以文本方式查看主题

-  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
            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
--  发布时间: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
--  发布时间: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
    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