以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  写代码实现时实显示近30天的库存数量,测试总有错误,求高手帮忙看看  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=31566)

--  作者:jljacky
--  发布时间:2013/4/17 14:11:00
--  写代码实现时实显示近30天的库存数量,测试总有错误,求高手帮忙看看

项目有两个表,"库存运维"和"出入库记录",两表都有同一名称列“配件名称”,两表之间没有设关联。

 

现在通过在库存运维表中的DataColChanged事件中写代码实现 滚动显示最近30天的出库数量。

我每次修改日期测试的时候就会提示错误“Exception has been thrown by the target of an invocation.”

求高手帮我看看为什么会这样?

 

以下是库存运维表DataColChanged中的代码:

If e.DataCol.Name = "配件名称" Then

    e.DataRow("出库总量") = DataTables("出入库记录").Compute("Sum(出库)","[配件名称] = \'" & e.NewValue & "\'")

    e.DataRow("最近30天出库数量") = DataTables("出入库记录").Compute("Sum(出库)","[配件名称] = \'" & e.NewValue & "\' And [日期]<=#" & Date.Today & "# And [日期]>#" & Date.Today.AddDays(-31) & "#")

End If

 

为了使每次出入库记录表中数据有变化都触发库存运维表的DataColChanged事件,我又在出入库记录表的

DataColChanged事件下了代码入下:

If e.DataCol.Name = "出库" Then

   Dim pr As DataRow

   pr = DataTables("库存运维").Find(" 配件名称= \'" & e.DataRow("配件名称") & "\'")

   If pr IsNot Nothing Then

      pr("出库总量")= pr("出库总量") + e.NewValue - e.OldValue

   End If

ElseIf e.DataCol.Name="配件名称" Or "日期"

   If e.NewValue<>e.OldValue

      DataTables("库存运维").DataCols("配件名称").RaiseDataColChanged()

   End If

End If

我其实也试着在MaintableChanged事件里面写RaiseDataColChanged(),测试下来没问题,想知道为什么以上的代码就有问题

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:库存和出库表.table


--  作者:Bin
--  发布时间:2013/4/17 14:14:00
--  
没见有报错啊.
--  作者:jljacky
--  发布时间:2013/4/17 14:44:00
--  
以下是引用Bin在2013-4-17 14:14:00的发言:
没见有报错啊.

你试着改一下出入库记录表里面配件703的日期,


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

--  作者:jljacky
--  发布时间:2013/4/17 15:10:00
--  

--  作者:jijianjsj
--  发布时间:2013/4/17 15:27:00
--  
日期列问题,你改成这样,我测试过了
If e.DataCol.Name = "出库" Then
    Dim pr As DataRow
    pr = DataTables("库存运维").Find("配件名称 = \'" & e.DataRow("配件名称") & "\'")
    If pr IsNot Nothing Then
        pr("出库总量")= pr("出库总量") + e.NewValue - e.OldValue
    End If
ElseIf e.DataCol.Name="配件名称" 
    If e.NewValue<>e.OldValue
        DataTables("库存运维").DataCols("配件名称").RaiseDataColChanged()
    End If
ElseIf e.DataCol.Name= "日期"
    Dim y,m,d As Integer
    DateYMD(e.NewValue,e.OldValue,y,m,d)
    If d = 0 And y = 0 And m = 0 Then
    Else
        DataTables("库存运维").DataCols("配件名称").RaiseDataColChanged()
    End If   
End If
[此贴子已经被作者于2013-4-17 15:30:11编辑过]

--  作者:jljacky
--  发布时间:2013/4/17 15:33:00
--  
非常感谢!
--  作者:jljacky
--  发布时间:2013/4/17 15:42:00
--  

不好意思, If d = 0 And y = 0 And m = 0 Then 的后面一句是什么啊?


--  作者:jljacky
--  发布时间:2013/4/17 15:44:00
--  
还有DateYMD(e.NewValue,e.OldValue,y,m,d)是什么意思?偶不大理解
--  作者:jijianjsj
--  发布时间:2013/4/17 15:46:00
--  
后面没有,你可以改成
If d <> 0 or y <> 0 or m <> 0 Then
 DataTables("库存运维").DataCols("配件名称").RaiseDataColChanged()
  End If   

--  作者:Bin
--  发布时间:2013/4/17 15:46:00
--  
http://www.foxtable.com/help/topics/2648.htm
以下是引用jljacky在2013-4-17 15:44:00的发言:
还有DateYMD(e.NewValue,e.OldValue,y,m,d)是什么意思?偶不大理解

请查看帮助