Foxtable(狐表)用户栏目专家坐堂 → 时间类型和SQL数据库问题


  共有2019人关注过本帖树形打印复制链接

主题:时间类型和SQL数据库问题

帅哥哟,离线,有人找我吗?
bressernon
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:86 积分:876 威望:0 精华:0 注册:2014/7/25 23:20:00
时间类型和SQL数据库问题  发帖心情 Post By:2017/1/11 11:33:00 [只看该作者]

最近发现用时间类型(Date)存储到SQL相应的字段,总是会丢失数据。
也就是录入都是正常的,有的时候保存后退出,再打开就会有某一行或某几行数据的时间日期没有了。
其他列的数据都正常。
不是每次都发生,发生频率不确定。
和多人同时打开一张表有没有关系?有按照帮助文件里面的独占式代码编写,其他人无法更改别人正在使用的行。



 回到顶部
帅哥哟,离线,有人找我吗?
bressernon
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:86 积分:876 威望:0 精华:0 注册:2014/7/25 23:20:00
  发帖心情 Post By:2017/1/11 11:37:00 [只看该作者]

补充一下,如果这个表只有一个人在使用,这种情况出现的很少。


图片点击可在新窗口打开查看此主题相关图片如下:日期列错误.jpg
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/11 11:42:00 [只看该作者]

1、你sqlserver里面的类型,要使用 datetime 类型,不能用date

 

2、你代码肯定写得有问题,又或者是多人操作的时候,会修改覆盖掉你原先的记录。


 回到顶部
帅哥哟,离线,有人找我吗?
bressernon
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:86 积分:876 威望:0 精华:0 注册:2014/7/25 23:20:00
  发帖心情 Post By:2017/1/11 12:08:00 [只看该作者]

1. SQL里面看了,是datetime类型没问题。
2. 代码没问题,几个表8万多条记录用下来了,要是有重复覆盖的早就发现问题了,见附件。
2.1 首先StartEdit中判断这行数据属于哪个用户
2.2 在DataChanging中判断是否已经在Sql中相应字段写了用户开始编辑的状态


图片点击可在新窗口打开查看此主题相关图片如下:锁定代码1.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:锁定代码2.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:锁定代码3.jpg
图片点击可在新窗口打开查看

目前客户端没有做每个表的保存按钮,就用的系统自带的那个保存功能。
想问一下,系统自带的那个保存,有没有可能出现以下的问题。
1. 用户A和用户B同时打开这个表。
2. 用户A编辑了第5000行数据,用户B编辑了5010行数据
3. 在用户A录入数据以后,还没有点保存。
4. 用户B录入5010行数据以后点了保存退出。
5. 然后用户A保存退出。

用户A无法编辑5010行,因为用户B一旦开始编辑就已经在Sql后端写入了。
同样用户B也无法编辑5000行,也就是在各自的界面中,这2行前面数字的状态都不会是橙色,被改变过的

这样2个用户是否存在保存覆盖的问题,

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/11 12:58:00 [只看该作者]

 并发的问题。

 

 当两个人同时修改一行数据的时候,同时执行update的时候,有可能都能成功,那么,就允许这两个人修改同一行数据了。而之后,再没有额外的判断是否重复。

 

 建议直接获取后台的值判断,而不是用e.datarow("录入员") http://www.foxtable.com/webhelp/scr/2955.htm

 

 只有修改同一行数据,才会有覆盖的问题。


 回到顶部
帅哥哟,离线,有人找我吗?
bressernon
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:86 积分:876 威望:0 精华:0 注册:2014/7/25 23:20:00
  发帖心情 Post By:2017/1/11 13:08:00 [只看该作者]

我试一下,目前实际情况是有可能有2-3个人同时打开文件。
但是我看了一下录入时间(表中有记录实际录入时间),并没有在一个时间段内有2个人同时录入数据的情况。

我个人感觉可能是Sql的datetime类型和foxtable的date类型的数据写入问题。
因为只有日期列的数据会丢失,其他都没有问题。
现在把date类型变成字符串,然后用Date.TryParse去判断输入是否符合日期,准备进行测试一下。
如果这样更改以后没有问题,那就是数据类型的问题了。

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/11 14:23:00 [只看该作者]

测试一下是不是电脑日期格式的问题。

 

AfterOpenProject加入代码

 

Dim cd As System.Globalization.DateTimeFormatInfo = System.Globalization.DateTimeFormatInfo.CurrentInfo
cd.ShortDatePattern = "yyyy年MM月dd日"
Dim DateInfo As System.Reflection.FieldInfo = cd.Gettype.GetField("generalLongTimePattern", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)
If  DateInfo IsNot Nothing Then
    DateInfo.SetValue(cd, "yyyy-MM-dd HH:mm:ss")
End If


 回到顶部