以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  这段代码错在哪  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=49579)

--  作者:实话实说
--  发布时间:2014/4/20 18:53:00
--  这段代码错在哪
这段代码在以前的项目中可以正常运行,移植到新项目后有问题,分析了半天还是没搞定。

Select Case e.DataCol.Name
    Case "物料","入仓_数量","出仓_数量"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[日] < " & mr("日") & " And [物料] = \'" & mr("物料") & "\'", "[日]")
        If dr Is Nothing Then
            mr("库存_数量") = mr("入仓_数量") - mr("出仓_数量")
            \'mr("库存_金额") = mr("入仓_金额") - mr("出仓_金额")

            dr = mr
        End If
        drs = e.DataTable.Select("[日] >= " & dr("日") & " And [物料] = \'" & dr("物料") & "\'", "[日]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("库存_数量") = drs(i-1)("库存_数量") + drs(i)("入仓_数量") - drs(i)("出仓_数量")
            \'drs(i)("库存_金额") = drs(i-1)("库存_金额") + drs(i)("入仓_金额") - drs(i)("出仓_金额")

        Next
        If e.DataCol.Name = "物料" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[日] < " & mr("日") & " And [物料] = \'" & e.OldValue & "\'", "[日]")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[物料] = \'" & e.OldValue & "\'", "[日]")
                If dr IsNot Nothing Then
                    dr("库存_数量") = dr("入仓_数量") - dr("出仓_数量")
                    \'dr("库存_金额") = dr("入仓_金额") - dr("出仓_金额")

                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[日] >= " & dr("日") & " And [物料] = \'" & dr("物料") & "\'", "[日]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("库存_数量") = drs(i-1)("库存_数量") + drs(i)("入仓_数量") - drs(i)("出仓_数量")
                    \'drs(i)("库存_金额") = drs(i-1)("库存_金额") + drs(i)("入仓_金额") - drs(i)("出仓_金额")

                Next
            End If
        End If
End Select
图片点击可在新窗口打开查看此主题相关图片如下:snap1.jpg
图片点击可在新窗口打开查看

--  作者:有点甜
--  发布时间:2014/4/20 19:12:00
--  

 是不是这个 mr("日")  是空值?

 

 自己调试 http://www.foxtable.com/help/topics/1485.htm

 


--  作者:实话实说
--  发布时间:2014/4/20 19:36:00
--  
以下是引用有点甜在2014-4-20 19:12:00的发言:

 是不是这个 mr("日")  是空值?

 

 自己调试 http://www.foxtable.com/help/topics/1485.htm

 

调试过,错误可能在红色代码处,mr("日")不是空值


--  作者:有点甜
--  发布时间:2014/4/20 19:39:00
--  

 你这一列,[日],是什么类型的?

 

 弹出,截图发上来看看 msgbox("[日] < " & mr("日") & " And [物料] = \'" & mr("物料") & "\'")


--  作者:实话实说
--  发布时间:2014/4/20 19:48:00
--  
[日]是字符型

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

--  作者:有点甜
--  发布时间:2014/4/20 19:55:00
--  

 呃,字符类型?那得这样写,要加单引号的,下面的你都得改改

 

dr = e.DataTable.Find("[日] < \'" & mr("日") & "\' And [物料] = \'" & mr("物料") & "\'", "[日]")

 


--  作者:实话实说
--  发布时间:2014/4/20 20:05:00
--  
加了单引号正常了,疑惑的是,相同的代码(没加单引号)在其它一个项目却能正常运行
谢了

--  作者:有点甜
--  发布时间:2014/4/20 20:06:00
--  
以下是引用实话实说在2014-4-20 20:05:00的发言:
加了单引号正常了,疑惑的是,相同的代码(没加单引号)在其它一个项目却能正常运行
谢了

 

不应该吧?只有列是 数值 类型的,才不用加引号


--  作者:babaala
--  发布时间:2014/4/20 21:28:00
--  
没有断点调试,搞得每次出错,不好跟踪,尤其是跨了几个自定义函数之后。