以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]表B中合并数据,表A会增加相应记录,但表A分页加载时会出现错误,如何避免 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=97271) |
-- 作者:chh2321 -- 发布时间:2017/3/9 1:23:00 -- [求助]表B中合并数据,表A会增加相应记录,但表A分页加载时会出现错误,如何避免 下段代码,表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也出现问题。 |
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2017/3/9 14:32:00 -- 谢谢老师,解决了! |
-- 作者:chh2321 -- 发布时间:2017/3/12 12:33:00 -- 您好,老师,上述代码测试后,还是有问题。 原因可能在于DataTable和后台数据库存储数据不同步,后台数据库不能及时反映DataTable的变化,因此会出现下面的情况 编号 姓名 1. 0001 null 2. 0001 张三 3. 0002 null 4. 0002 李四 如果数据量大,需要分页加载,如何避免这种情况? |
-- 作者:有点色 -- 发布时间:2017/3/12 20:09:00 -- save一下即可
If e.DataRow.Isnull("编号") = False dr.Save |
-- 作者:chh2321 -- 发布时间:2017/3/12 21:06:00 -- If e.DataRow.Isnull("编号") = False dr.Save 上段代码保存会出现save为非dr成员错误提示。 如果把dr.Save放在最后一个“End If”上面,可以正常编译,但是B表合并数据会提示 .NET Framework 版本:2.0.50727.8745 Foxtable 版本:2016.7.29.1 错误所在事件: 详细错误信息: 对于造型说明无效的字符值 |
-- 作者:chh2321 -- 发布时间: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 -- 发布时间: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 -- 发布时间:2017/3/12 22:59:00 -- 老师,能否将编号和姓名作为数组一起存储呢? |
-- 作者:有点色 -- 发布时间:2017/3/12 23:52:00 -- 重新打开项目测试。
If e.DataRow.Isnull("编号") = False |