以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  非关联表之间的数据同步请教  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=61108)

--  作者:7032175
--  发布时间:2014/12/7 11:16:00
--  非关联表之间的数据同步请教

非关联表之间的数据同步

假定有一个产品表和一个库存表,两个表都有产品编号、产品名称、产品规格三列,但是没有建立关联,我们希望:

1、在产品表增加一个产品,库存表对应也增加此产品。
2、在产品表删除一个产品,库存表对应也删除此产品。
3、在产品表更改某产品的产品编号、产品名称或产品规格后,库存表也能同步修改。

设计步骤

1、将产品表的DataColChanged事件代码设置为:

Select Case e.DataCol.name
    Case "产品编号"
        Dim dr As DataRow = DataTables("库存").Find("产品编号 = \'" & e.OldValue & "\'")
        
If dr Is Nothing Then 
            dr = DataTables(
"
库存").AddNew()
            dr(
"
产品编号") = e.DataRow("产品编号")
            dr(
"
产品名称") = e.DataRow("产品名称")
            dr(
"
产品规格") = e.DataRow("产品规格")
        Else
            dr(
"
产品编号") = e.DataRow("产品编号")
        End If
    Case 
"
产品名称","产品规格"
        Dim dr As DataRow = DataTables(
"
库存").Find("产品编号 = \'" & e.DataRow("产品编号") & "\'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        
End If
End
 Select

2、将产品表的DataRowDeleting事件代码设置为:

Dim dr As DataRow = DataTables("库存").Find("产品编号 = \'" & e.DataRow("产品编号") & "\'")
If
 dr IsNot Nothing Then
    dr.
Delete()

End
 If

 问题:这个是帮助里面的例子,其中有二个表之间互相连接的条件是只要二个表之间能满足相同的产品编号就可以进行同步更新,如果在以后的过程中表会不段增大,会出现很多相同的产品编号,这时只满足一个条件是不行的,如果增加满足条件,如:表只符合相同的产品编号与产品名称才能进行同步更新内容,上面的代码要如何更改,请帮助一下谢谢。


--  作者:有点甜
--  发布时间:2014/12/7 11:28:00
--  

 这就是你的设计有问题了,每一个表,都必须应该有一个唯一的编号列的。

 

 代码不要改,你的思路要改。


--  作者:7032175
--  发布时间:2014/12/7 15:05:00
--  
我指的编号只是一个代表性,如果说表中有型号,规格   其它等等列,型号与规格都会有重复的,加上一个条件,查找符合相同的型号与规格行,这种情况也会发生,我只是想学习这代码,要想多加上一个条件怎么写代码我不会请教教我。
--  作者:有点甜
--  发布时间:2014/12/7 15:08:00
--  

 不会有这种情况。

 

 一个表,必须有一个列的值是唯一的,这样就能处理即便有n列不同的情况也能标注出它的唯一。