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


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

主题:[求助]表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也出现问题。


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


加好友 发短信
等级:超级版主 帖子:110592 积分:562856 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/3/9 8:38:00 [只看该作者]

Sel ect Case e.DataCol.Name
     Case "编号","姓名",
        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

如果数据不是很多,建议先全部加载,合并后在重新分页

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


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

 谢谢老师,解决了!

 回到顶部
帅哥哟,离线,有人找我吗?
chh2321
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | 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        李四

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

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


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

save一下即可

 

       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


 回到顶部
帅哥哟,离线,有人找我吗?
chh2321
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

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

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/3/12 23:52: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("姓名")
    dr.Save
End If


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