以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  偶尔出现同步更新待办不成功  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=172499)

--  作者:cd_tdh
--  发布时间:2021/10/15 16:18:00
--  偶尔出现同步更新待办不成功

 老师,我以下代码,放到表的DataColChanged 事件,会偶尔出现审批状态不能更新到待办事项表的情况,排除了ID重复的可能,请看看代码是否有问题?

\'添加到待办事项
S  elect Case e.DataCol.Name
    C  ase  "审批状态","ID"
        If e.DataRow("审批状态") <> "已审批完成"  AndAlso e.DataRow("审批状态") <> ""  AndAlso e.DataRow("ID") <> "" Then
            Dim nma() As String = {"审批状态","ID"} \'A表数据来源列
            Dim nmb() As String = {"审批状态","ID"} \'B表数据接收列
            Dim dr As DataRow = DataTables("待办事项").SQLFind("ID = \'" & e.DataRow("ID") & "\'")
            If dr Is Nothing Then  \'如果没有找到
                dr=DataTables("待办事项").AddNew()
                dr("所属机构") = _UserPart
                dr("表名") = 
                dr("页签名")= 
                dr("更新日期")= Data.Now
                For i As Integer = 0 To nma.Length - 1
                    dr(nmb(i)) = e.DataRow(nma(i))
                Next
            Else
                Dim Filter As String = "ID = \'" & e.DataRow("ID") & "\'"
                Dim drs  As  List(Of DataRow) =  DataTables("待办事项").S elect(Filter)
                For Each ds  As  DataRow  In drs
                    ds(e.DataCol.Name) = e.NewValue
                Next
            End If
            DataTables("待办事项").save
        Else
            DataTables("待办事项").sq   lDeletefor("ID = \'" & e.DataRow("ID") & "\'")
            DataTables("待办事项").s  ave
        End If
End S  elect

[此贴子已经被作者于2021/10/15 16:20:56编辑过]

--  作者:有点蓝
--  发布时间:2021/10/15 16:28:00
--  
1、判断单元格空值使用isnull:http://www.foxtable.com/webhelp/topics/0426.htm
2、case里有2个列【Case  "审批状态","ID" 】,下面代码只会更新一个列的数据。如果是通过ID列触发的事件,就只会改ID列,不会改状态列的

                Dim Filter As String = "ID = \'" & e.DataRow("ID") & "\'"
                Dim drs  As  List(Of DataRow) =  DataTables("待办事项").S elect(Filter)
                For Each ds  As  DataRow  In drs
                    ds(e.DataCol.Name) = e.NewValue
                Next

--  作者:cd_tdh
--  发布时间:2021/10/15 16:38:00
--  

第一次添加到待办事项后,后面只需要更新审批状态列,意思是直接用find,找到后直接更新审批状态,不用S elect,这样写就行了哇?


            Else
                dr("审批状态") = e.DataRow("审批状态")

            End If

[此贴子已经被作者于2021/10/15 16:41:27编辑过]

--  作者:有点蓝
--  发布时间:2021/10/15 16:45:00
--  
只有一条数据就使用find,如果有多条要更新就select
--  作者:cd_tdh
--  发布时间:2021/10/15 16:52:00
--  

以前还不是很清楚逻辑的时候弄的,那这儿该写成这样:dr("审批状态") = e.DataRow("审批状态"),还是写成这样: dr("审批状态") = e.NewValue 这个呢


--  作者:有点蓝
--  发布时间:2021/10/15 17:05:00
--  
2楼说的很清楚了,e.NewValue是触发列的值,比如是更改ID列触发的事件,e.NewValue就是ID的值。

多个列的情况下,一般最好是指定列名取值

--  作者:cd_tdh
--  发布时间:2021/10/18 14:29:00
--  
老师,我有两个表更新审批状态还是不成功,是哪儿有问题啊?
--  作者:有点蓝
--  发布时间:2021/10/18 14:39:00
--  
能帮我申请到哈勃的使用权吗,我穿过千山万水看能不能看到您桌面的代码,然后脑补一下执行过程.....
--  作者:cd_tdh
--  发布时间:2021/10/18 14:40:00
--  
以下是引用有点蓝在2021/10/18 14:39:00的发言:
能帮我申请到哈勃的使用权吗,我穿过千山万水看能不能看到您桌面的代码,然后脑补一下执行过程.....

什么意思?


--  作者:有点蓝
--  发布时间:2021/10/18 14:41:00
--  
http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=150626