以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  sqlreplacefor跨表自动更新  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=178307)

--  作者:swagger
--  发布时间:2022/6/29 1:26:00
--  sqlreplacefor跨表自动更新


现在希望在产品表修改上述四列数据后,订单表能够自动更新这些列的数据,为此可以将产品表的DataColChanged事件设置为:

Select Case e.DataCol.Name
    Case
"品名","型号","单号",
"通过"
       
Dim Filter As String = "[产品编号] = \'" & e.DataRow("产品编号") & "\'"
        DataTables("订单").ReplaceFor(e.DataCol.Name, e.NewValue, Filter)
End
Select




问题:删除行时,譬如删除产品编号为12345的行,希望把订单的”品名,型号,单号,通过“ 这四项清空内容,譬如用删除按钮代码

Tables("订单_Table1").Current("品名") = Nothing

Tables("订单_Table1").Current("型号") = Nothing

...

Tables("订单_Table1").Current.Delete

然后更新产品表后,这四项内容都是空。如果对应的产品编号没有加载,用replacefor,删除行,四项没有变化。用sqlreplace也没效,而且删除的速度变慢。

 

这个代码改怎么写呢?





--  作者:有点蓝
--  发布时间:2022/6/29 8:34:00
--  
产品表datarowdeleting事件

Dim Filter As String = "[产品编号] = \'" & e.DataRow("产品编号") & "\'"
dim dr as datarow = DataTables("订单").find(Filter )
if dr isnot nothing then
dr("品名") = Nothing
dr("型号") = Nothing
……
end if


删除按钮代码

if Tables("订单_Table1").Current isnot nothing then

Tables("订单_Table1").Current.Delete

end if


--  作者:swagger
--  发布时间:2022/6/29 20:04:00
--  
不行呢,如果表数据没加载是没效的。譬如 订单表 编号为12345的这行的数据是加载的,删除产品表 编号为12345行, 订单表的四项内容就被清空,如果订单表的编号为12345没有加载的,删除产品表的12345,订单表的12345四项没被清空
--  作者:swagger
--  发布时间:2022/6/30 0:10:00
--  
已经解决了,其实很简单用appendload就行,需注意的是,新增行的时候没有保存,然后同时另外的表加载其它数据。这时候删除行就不起效了,所以新增行同时保存行才能避免这个问题