以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]二表联动的代码,改了一下午还是失败  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=61901)

--  作者:huangfanzi
--  发布时间:2014/12/21 21:40:00
--  [求助]二表联动的代码,改了一下午还是失败
表A为入库明细单,有以下内容:
通知单号     品名    是否制单(逻辑字段)
D01           A       、
D01           B
D02           C

表B为入库通知单,有以下内容
通知单号    入库日期
D01          2014-01-01
D02          2014-01-02

现在的要求是当表A中的通知单号能在表B中找到时,“是否制单”为TRUE,反之为FALSE。
我目前解决了单表B的通知单号列发生变化时,表A的对应通知单号的是“否制单列”会发生变化。
现在的问题是,我如果直接把表B中的一行数据删除,例如删除表B的D01这一行,表A中只有品名为A的是否制单变为了FALSE,而品名B还是TRUE,我实在不解,我的代码如下:


表B的    BeforeDeleteDataRow事件


For Each dr As DataRow In DataTables("表A").DataRows

    

    dr = DataTables("表A").Find("[通知单号] = \'" & e.DataRow("通知单号") & "\'")

    

    If dr IsNot Nothing Then \'如果找到了,也就是dr不是Nothing

        dr("是否制单")=False

        dr.Save()

    End If

Next


请老师帮我看看,到底错哪了,谢谢!


--  作者:有点甜
--  发布时间:2014/12/21 21:43:00
--  

代码这样写

 

DataTables("表A").ReplaceFor("是否制单", False, "[通知单号] = \'" & e.DataRow("通知单号") & "\'")


--  作者:huangfanzi
--  发布时间:2014/12/21 21:45:00
--  
这行代码看下教程懂了,但是,我写的代码错在哪了,我读了不下30遍,感觉没什么错啊!
[此贴子已经被作者于2014-12-21 21:48:36编辑过]

--  作者:bm
--  发布时间:2014/12/21 21:48:00
--  光纸上谈兵不行
做个项目过来看看。
--  作者:huangfanzi
--  发布时间:2014/12/21 21:50:00
--  
有点甜 老师的代码确实简单,非常好用,我现在用的不够活,但是,我写的代码也不应该有错啊?为什么!
--  作者:bm
--  发布时间:2014/12/21 21:51:00
--  这个不对
dr("是否制单")=False
--  作者:有点甜
--  发布时间:2014/12/21 21:55:00
--  
以下是引用huangfanzi在2014-12-21 21:45:00的发言:
这行代码看下教程懂了,但是,我写的代码错在哪了,我读了不下30遍,感觉没什么错啊!
[此贴子已经被作者于2014-12-21 21:48:36编辑过]

 

你的代码,用的是Find函数,那么永远去查找的是都是同一行。

 

你要这样写

 

For Each dr As DataRow In DataTables("表A").Select("[通知单号] = \'" & e.DataRow("通知单号") & "\'")
   
    dr("是否制单")=False
   
    dr.Save()
   
Next

 


--  作者:huangfanzi
--  发布时间:2014/12/21 21:59:00
--  
受教了。