以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  触发求助  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=72855)

--  作者:supwork
--  发布时间:2015/8/7 16:34:00
--  触发求助

 

DataColChanged    事件代码

 

Case "产品编码"       
        e.DataRow.Locked = False
        Dim pr As DataRow = e.DataRow.GetParentRow("出入记录_主表")
        Dim cmd1 As New SQLCommand
        cmd1.ConnectionName= gs_strActiveConn
        cmd1.CommandText="sel ect [库存] from {V_仓库物料库存} where  [审核] = 1 and [仓库编码] = \'" & pr("仓库编码") & "\' and [产品编码] = \'" & e.DataRow("产品编码") & "\'"
        Dim dt1 As DataTable = cmd1.ExecuteReader
        If dt1.DataRows.Count>0 Then
            e.DataRow("当前库存")= dt1.DataRows(0)("库存")
        Else
            e.DataRow("当前库存")= 0
        End If

 

触发代码

 

For i As Integer=0 To Tables("出入记录_主表.出入记录_明细表").rows.Count-1
DataTables("出入记录_明细表").datacols("产品编码").RaiseDataColChanged()
Next

 

为什么明细 表里只有三条数据

监测到 该系列行为对数据库中的所有数据均进行了操作。 我只要重算明细 表里的产品的库存数据就好。


--  作者:大红袍
--  发布时间:2015/8/7 16:43:00
--  
For Each r As Row In Tables("出入记录_主表.出入记录_明细表").rows
    DataTables("出入记录_明细表").datacols("产品编码").RaiseDataColChanged("关联列 = \'" & r("关联列") & "\'")
Next

--  作者:有点蓝
--  发布时间:2015/8/7 16:45:00
--  

 1、下面这种用法不对,重置列时不需要循环

For i As Integer=0 To Tables("出入记录_主表.出入记录_明细表").rows.Count-1
DataTables("出入记录_明细表").datacols("产品编码").RaiseDataColChanged()
Next

2、你要用RaiseDataColChanged(Filter)

把主表和子表关联的号记录下来

然后 Filter = "外键 =" & 主表号


--  作者:有点蓝
--  发布时间:2015/8/7 16:46:00
--  
2楼正解
--  作者:supwork
--  发布时间:2015/8/7 16:49:00
--  

谢谢 这样效果好多了,没有遍历数据库中的所有数据了

但观察到如果明细表中有3条数据的话 DataColChanged  被执行了9次,如果4条记录的话,被执行了16次,就是被执行了明细表数据行数N的平方次数。

 

本意只要执行 N次了。


--  作者:有点蓝
--  发布时间:2015/8/7 16:59:00
--  
改一下看看
For Each r As Row In Tables("出入记录_主表.出入记录_明细表").rows
    Dim dr as DataRow = DataTables("出入记录_明细表").Find("关联列 = \'" & r("关联列") & "\'")
    DataTables("出入记录_明细表").datacols("产品编码").RaiseDataColChanged(dr)
Next

--  作者:大红袍
--  发布时间:2015/8/7 17:00:00
--  

汗,你这个是关联表,主表数据,肯定只有一行。把当前行重置就行啊。

 

DataTables("出入记录_明细表").datacols("产品编码").RaiseDataColChanged(Tables("出入记录_明细表").Current.DataRow)
 


--  作者:supwork
--  发布时间:2015/8/7 17:01:00
--  
正解