以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]关于SQLReplaceFor  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=177297)

--  作者:昱飞哥
--  发布时间:2022/5/16 21:39:00
--  [求助]关于SQLReplaceFor
有个主表:表A
有n个子表:表B、表C。。。,每个子表只加载了部分数据

要达到的效果:当主表某行的"所有者"列数据发生变化时,它的所有子表已经加载了的数据的“所有者”列也改变,同时,后台数据库没加载的数据的“所有者”列也改变
于是,我在全局表事件的DataColChanged事件中这样写:

\'对于所有关联表,如果主表的所有者改变了,该主表的所有子表的所有者也变成对应的
If e.DataCol.Name = "所有者" Then
    For Each re As Relation In Relations
        If re.ParentTable Is e.DataTable Then
            For Each r As Row In Tables(Re.ParentTable.Name & "." & Re.ChildTable.Name).Rows  \'遍历关联表的所有行
                r("所有者") = e.DataRow("所有者") \'将加载出来的关联表的所有记录的所有者修改
            Next
            DataTables(Re.ChildTable.Name).SQLReplaceFor("所有者",e.DataRow("所有者")," \'" & Re.ChildColumn.Name & "\'  = \'" & e.DataRow(Re.ParentColumn.Name) & "\'")   \'修改后台数据库中
            DataTables(Re.ChildTable.Name).Save()
        End If
    Next
End If

出现的问题:已经加载的数据倒是变化了,但是后台数据库对应的数据并没有发生改变

--  作者:有点蓝
--  发布时间:2022/5/16 21:43:00
--  
调试

msgbox(" \'" & Re.ChildColumn.Name & "\'  = \'" & e.DataRow(Re.ParentColumn.Name) & "\'")
DataTables(Re.ChildTable.Name).SQLReplaceFor("所有者",e.DataRow("所有者")," \'" & Re.ChildColumn.Name & "\'  = \'" & e.DataRow(Re.ParentColumn.Name) & "\'") 

--  作者:昱飞哥
--  发布时间:2022/5/16 21:53:00
--  
明白了,要写成这样:Re.ChildColumn.Name &"  = \'" & e.DataRow(Re.ParentColumn.Name) & "\'"