以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  数据同步  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=35617)

--  作者:FB学生
--  发布时间:2013/6/28 15:04:00
--  数据同步

在帮助的“关联与表达式的综合示例”中,如何做到,入库表中增加一个产品编号,库存表也增加一个产品编号,如果库存表已经有该产品编号,那么不再增加,只是让库存_单价保持和入库单价同步?


--  作者:Bin
--  发布时间:2013/6/28 15:08:00
--  
这个论坛中很多类似例子, 你找找看吧!

思路如下:

入库表DataColChanged事件查找库存表是否存在一样的产品编号行,如果找到就修改对应的行. 如果没找到就新增,并且赋值.

--  作者:FB学生
--  发布时间:2013/6/28 15:42:00
--  

那这个事件怎么改呢?

 

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


--  作者:Bin
--  发布时间:2013/6/28 15:47:00
--  
代码应该没什么问题啊

严谨一点应该增加一下e.DataRow("产品编号")的空值判断


你执行出现什么问题?

--  作者:FB学生
--  发布时间:2013/6/28 15:58:00
--  

执行时,库存表已经有了这笔产品编号,入库表中增加是,库存表还会增加同样一笔


--  作者:Bin
--  发布时间:2013/6/28 16:03:00
--  
上个例子才方便分析你的问题.
--  作者:Bin
--  发布时间:2013/6/28 16:05:00
--  
原因应该是你这里Dim dr As DataRow = DataTables("库存").Find("产品编号 = \'" & e.OldValue & "\'")  你用的是OldValue

你新增的时候 OldVale是空的, 因为你是新增的行.第一次修改老的值肯定空的.那么肯定找不到行. 自然就新增行了.

--  作者:FB学生
--  发布时间:2013/6/28 16:20:00
--  

那怎么调试呢

 


--  作者:Bin
--  发布时间:2013/6/28 16:23:00
--  
调试技巧 http://www.foxtable.com/help/topics/1485.htm
--  作者:FB学生
--  发布时间:2013/6/28 16:24:00
--  

老师误解了,我是问上面的代码怎么改正过来