Foxtable(狐表)用户栏目专家坐堂 → [求助]表B中合并数据,表A会增加相应记录,但表A分页加载时会出现错误,如何避免


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

主题:[求助]表B中合并数据,表A会增加相应记录,但表A分页加载时会出现错误,如何避免

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


加好友 发短信
等级:童狐 帖子:253 积分:2573 威望:0 精华:0 注册:2016/8/8 9:50:00
[求助]表B中合并数据,表A会增加相应记录,但表A分页加载时会出现错误,如何避免  发帖心情 Post By:2017/3/9 1:23:00 [显示全部帖子]

 下段代码,表B中合并数据,表A会增加相应记录,但表A在窗口分页加载时会出现增加重复记录的错误,请问老师这种情况如何避免?
 
表B的DataColChanged事件:

Sel ect Case e.DataCol.Name
     Case "编号","姓名",
        If e.DataRow.Isnull("编号")  = False
            Dim dr As DataRow
            dr = DataTables("表A").Find("[编号] = '" & e.DataRow("编号") & "'" )      ’表A编号不允许重复
            If dr Is Nothing Then
                dr = DataTables("表A").AddNew()
            End If
            dr("编号") = e.DataRow("编号")
            dr("姓名") = e.DataRow("姓名")
        End If



dr = DataTables("表A").Find("[编号] = '" & e.DataRow("编号") & "'" ),这段代码在表A已加载的数据中查找,而不是在后台数据库查找,因此出现错误。如果表A中加载所有的数据,就不会出现错误。

我把Find改成sqlFind也出现问题。


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


加好友 发短信
等级:童狐 帖子:253 积分:2573 威望:0 精华:0 注册:2016/8/8 9:50:00
  发帖心情 Post By:2017/3/9 14:32:00 [显示全部帖子]

 谢谢老师,解决了!

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


加好友 发短信
等级:童狐 帖子:253 积分:2573 威望:0 精华:0 注册:2016/8/8 9:50:00
  发帖心情 Post By:2017/3/12 12:33:00 [显示全部帖子]

 
您好,老师,上述代码测试后,还是有问题。
原因可能在于DataTable和后台数据库存储数据不同步,后台数据库不能及时反映DataTable的变化,因此会出现下面的情况
        编号          姓名
1.   0001        null
2.   0001        张三
3.   0002        null
4.   0002        李四

如果数据量大,需要分页加载,如何避免这种情况?

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


加好友 发短信
等级:童狐 帖子:253 积分:2573 威望:0 精华:0 注册:2016/8/8 9:50:00
  发帖心情 Post By:2017/3/12 21:06:00 [显示全部帖子]

 

       If e.DataRow.Isnull("编号")  = False
            Dim dr As DataRow
            dr = DataTables("表A").SQLFind("[编号] = '" & e.DataRow("编号") & "'" )      '表A编号不允许重复
            If dr Is Nothing Then
                dr = DataTables("表A").AddNew()
                dr("编号") = e.DataRow("编号")
            End If
            dr("姓名") = e.DataRow("姓名")
        End If

       dr.Save


上段代码保存会出现save为非dr成员错误提示。
如果把dr.Save放在最后一个“End If”上面,可以正常编译,但是B表合并数据会提示
图片点击可在新窗口打开查看

.NET Framework 版本:2.0.50727.8745
Foxtable 版本:2016.7.29.1
错误所在事件:
详细错误信息:
对于造型说明无效的字符值


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


加好友 发短信
等级:童狐 帖子:253 积分:2573 威望:0 精华:0 注册:2016/8/8 9:50:00
  发帖心情 Post By:2017/3/12 22:53:00 [显示全部帖子]

改成下面代码也不行

If e.DataRow.Isnull("编号")  = False
            Dim dr As DataRow
            dr = DataTables("表A").SQLFind("[编号] = '" & e.DataRow("编号") & "'" )      '表A编号不允许重复
            If dr Is Nothing Then
                dr = DataTables("表A").AddNew()
                dr("编号") = e.DataRow("编号")
            End If
            dr("姓名") = e.DataRow("姓名")
        End If

        DataTables("表A").Save


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


加好友 发短信
等级:童狐 帖子:253 积分:2573 威望:0 精华:0 注册:2016/8/8 9:50:00
  发帖心情 Post By:2017/3/12 22:57:00 [显示全部帖子]

改成下面这样还是不行

If e.DataRow.Isnull("编号")  = False
            Dim dr As DataRow
           
dr = DataTables("表A").SQLFind("[编号] = '" & e.DataRow("编号") & "'" And
"[姓名] = '" & e.DataRow("姓名") & "'"
            If dr Is Nothing Then
                dr = DataTables("表A").AddNew()
                dr("编号") = e.DataRow("编号")
            End If
            dr("姓名") = e.DataRow("姓名")
        End If

        DataTables("表A").Save




出现下面错误提示:

.NET Framework 版本:2.0.50727.8745

Foxtable 版本:2016.7.29.1

错误所在事件:表,tblDiagnoTher,DataColChanged

详细错误信息:

调用的目标发生了异常。

从字符串“[病历号] = '0009502021'”到类型“Long”的转换无效。

输入字符串的格式不正确。

[此贴子已经被作者于2017/3/12 23:02:39编辑过]

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


加好友 发短信
等级:童狐 帖子:253 积分:2573 威望:0 精华:0 注册:2016/8/8 9:50:00
  发帖心情 Post By:2017/3/12 22:59:00 [显示全部帖子]

老师,能否将编号和姓名作为数组一起存储呢?

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


加好友 发短信
等级:童狐 帖子:253 积分:2573 威望:0 精华:0 注册:2016/8/8 9:50:00
  发帖心情 Post By:2017/3/13 0:06:00 [显示全部帖子]

用以下代码可以较好解决问题,就是效率低了点。

老师,可以优化一下效率问题吗?

    Case "编号"
        If e.DataRow.Isnull("编号") = False
            Dim dr As DataRow
            dr = DataTables("表A").SQLFind("[编号] = '" & e.DataRow("编号") & "'") 
            If dr Is Nothing Then
                dr = DataTables("表A").AddNew()
                dr("编号") = e.DataRow("编号")
            End If
        End If
        DataTables("表A").Save
        DataTables("表B").Save
        
    Case "姓名","性别","出生日期"
        Dim dr As DataRow
        dr = DataTables("表A").Find("[编号] = '" & e.DataRow("编号") & "'")  
        If dr IsNot Nothing Then
            dr("姓名") = e.DataRow("姓名")
            dr("性别") = e.DataRow("性别")
            dr("出生日期") = e.DataRow("出生日期")
        End If


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


加好友 发短信
等级:童狐 帖子:253 积分:2573 威望:0 精华:0 注册:2016/8/8 9:50:00
  发帖心情 Post By:2017/3/13 9:35:00 [显示全部帖子]

测试代码:

Select Case e.DataCol.Name
    Case "编号","姓名","性别","出生日期"
        If e.DataRow.Isnull("编号") = False
            Dim dr As DataRow
            dr = DataTables("表A").SQLFind("[编号] = '" & e.DataRow("编号") & "'") 
            If dr Is Nothing Then
                dr = DataTables("表A").AddNew()
                dr("编号") = e.DataRow("编号")
            End If
                dr("姓名") = e.DataRow("姓名")
                dr("性别") = e.DataRow("性别")
                dr("出生日期") = e.DataRow("出生日期")
                dr.Save
        End If
End Select

测试结果:内部表没有问题。外部表(SqlServer)出现对于造型说明无效的字符值

.NET Framework 版本:2.0.50727.8745
Foxtable 版本:2016.7.29.1
错误所在事件:
详细错误信息:
对于造型说明无效的字符值

请老师指点

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


加好友 发短信
等级:童狐 帖子:253 积分:2573 威望:0 精华:0 注册:2016/8/8 9:50:00
  发帖心情 Post By:2017/3/13 9:48:00 [显示全部帖子]


老师,找到问题了,出生日期是空值时会出现问题。把所有出生日期填全后,运行没有问题。

有办法解决吗?
[此贴子已经被作者于2017/3/13 9:49:32编辑过]

 回到顶部
总数 13 1 2 下一页