以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 时间类型和SQL数据库问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=95144) |
-- 作者:bressernon -- 发布时间:2017/1/11 11:33:00 -- 时间类型和SQL数据库问题 最近发现用时间类型(Date)存储到SQL相应的字段,总是会丢失数据。 也就是录入都是正常的,有的时候保存后退出,再打开就会有某一行或某几行数据的时间日期没有了。 其他列的数据都正常。 不是每次都发生,发生频率不确定。 和多人同时打开一张表有没有关系?有按照帮助文件里面的独占式代码编写,其他人无法更改别人正在使用的行。 |
-- 作者:bressernon -- 发布时间:2017/1/11 11:37:00 -- 补充一下,如果这个表只有一个人在使用,这种情况出现的很少。 |
-- 作者:有点色 -- 发布时间:2017/1/11 11:42:00 -- 1、你sqlserver里面的类型,要使用 datetime 类型,不能用date
2、你代码肯定写得有问题,又或者是多人操作的时候,会修改覆盖掉你原先的记录。 |
-- 作者:bressernon -- 发布时间:2017/1/11 12:08:00 -- 1. SQL里面看了,是datetime类型没问题。 2. 代码没问题,几个表8万多条记录用下来了,要是有重复覆盖的早就发现问题了,见附件。 2.1 首先StartEdit中判断这行数据属于哪个用户 2.2 在DataChanging中判断是否已经在Sql中相应字段写了用户开始编辑的状态 目前客户端没有做每个表的保存按钮,就用的系统自带的那个保存功能。 想问一下,系统自带的那个保存,有没有可能出现以下的问题。 1. 用户A和用户B同时打开这个表。 2. 用户A编辑了第5000行数据,用户B编辑了5010行数据 3. 在用户A录入数据以后,还没有点保存。 4. 用户B录入5010行数据以后点了保存退出。 5. 然后用户A保存退出。 用户A无法编辑5010行,因为用户B一旦开始编辑就已经在Sql后端写入了。 同样用户B也无法编辑5000行,也就是在各自的界面中,这2行前面数字的状态都不会是橙色,被改变过的 这样2个用户是否存在保存覆盖的问题,
|
-- 作者:有点色 -- 发布时间:2017/1/11 12:58:00 -- 并发的问题。
当两个人同时修改一行数据的时候,同时执行update的时候,有可能都能成功,那么,就允许这两个人修改同一行数据了。而之后,再没有额外的判断是否重复。
建议直接获取后台的值判断,而不是用e.datarow("录入员") http://www.foxtable.com/webhelp/scr/2955.htm
只有修改同一行数据,才会有覆盖的问题。 |
-- 作者:bressernon -- 发布时间:2017/1/11 13:08:00 -- 我试一下,目前实际情况是有可能有2-3个人同时打开文件。 但是我看了一下录入时间(表中有记录实际录入时间),并没有在一个时间段内有2个人同时录入数据的情况。 我个人感觉可能是Sql的datetime类型和foxtable的date类型的数据写入问题。 因为只有日期列的数据会丢失,其他都没有问题。 现在把date类型变成字符串,然后用Date.TryParse去判断输入是否符合日期,准备进行测试一下。 如果这样更改以后没有问题,那就是数据类型的问题了。
|
-- 作者:有点色 -- 发布时间:2017/1/11 14:23:00 -- 测试一下是不是电脑日期格式的问题。
AfterOpenProject加入代码
Dim cd As System.Globalization.DateTimeFormatInfo = System.Globalization.DateTimeFormatInfo.CurrentInfo |