以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  统计没有数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=194761)

--  作者:lin98
--  发布时间:2025/1/11 13:49:00
--  统计没有数据

需求;汇总表A的"单号、品名、规格、完成数",执行下面代码,没有报错,没提示,如何处理?
If e.DataCol.Name = "单号" AndAlso e.DataCol.Name = "品名" AndAlso e.DataCol.Name = "规格" Then \'发生变化的是XX单号列   
    Dim Filter As String = "[单号] = \'" & e.NewValue & "\' AND [品名] = \'" & e.NewValue & "\'  AND [规格] = \'" & e.NewValue & "\'"
    e.DataRow("完成数") = DataTables("表B").Compute("Sum(完成数)", Filter)
    \' MsgBox(10)\'排查错
msgbox(Filter) \'调试用
End If

--  作者:有点蓝
--  发布时间:2025/1/11 14:04:00
--  
先学好基础:http://www.foxtable.com/webhelp/topics/0220.htm

If e.DataCol.Name = "单号" OrElse e.DataCol.Name = "品名" OrElse e.DataCol.Name = "规格" Then \'发生变化的是XX单号列   

--  作者:lin98
--  发布时间:2025/1/11 14:23:00
--  
下面执行,没报错也没数据
If e.DataCol.Name = "单号" OrElse e.DataCol.Name = "品名" OrElse e.DataCol.Name = "规格" Then \'发生变化的是XX单号列   
Dim Filter As String = "[单号] = \'" & e.NewValue & "\' AND [品名] = \'" & e.NewValue & "\'  AND [规格] = \'" & e.NewValue & "\'"
    e.DataRow("完成数") = DataTables("表B").Compute("Sum(完成数)", Filter)
    \' MsgBox(10)\'排查错
msgbox(Filter) \'调试用
End If

下面执行,报错   语法错误:“AndAlso”运算符后缺少操作数。

If e.DataCol.Name = "单号" OrElse e.DataCol.Name = "品名" OrElse e.DataCol.Name = "规格" Then \'发生变化的是XX单号列   
Dim Filter As String = "[单号] = \'" & e.NewValue & "\' AndAlso [品名] = \'" & e.NewValue & "\'  AndAlso  [规格] = \'" & e.NewValue & "\'"
    e.DataRow("完成数") = DataTables("表B").Compute("Sum(完成数)", Filter)
    \' MsgBox(10)\'排查错
msgbox(Filter) \'调试用
End If
下面执行,报错   语法错误:“OrElse”运算符后缺少操作数。
If e.DataCol.Name = "单号" OrElse e.DataCol.Name = "品名" OrElse e.DataCol.Name = "规格" Then \'发生变化的是XX单号列   
Dim Filter As String = "[单号] = \'" & e.NewValue & "\' OrElse [品名] = \'" & e.NewValue & "\'  OrElse  [规格] = \'" & e.NewValue & "\'"
    e.DataRow("完成数") = DataTables("表B").Compute("Sum(完成数)", Filter)
    \' MsgBox(10)\'排查错
msgbox(Filter) \'调试用
End If


--  作者:有点蓝
--  发布时间:2025/1/11 14:41:00
--  
再学习基础

这个是代码里使用的逻辑运算符and等:http://www.foxtable.com/webhelp/topics/0220.htm
这个是表达式里使用的逻辑运算符(只有and和or)等:http://www.foxtable.com/webhelp/topics/0102.htm

上面两种用法完全不是一回事,不能混用

--  作者:有点蓝
--  发布时间:2025/1/11 14:42:00
--  
只能说明没有同时符合这3个条件的数据

If e.DataCol.Name = "单号" OrElse e.DataCol.Name = "品名" OrElse e.DataCol.Name = "规格" Then \'发生变化的是XX单号列   
Dim Filter As String = "[单号] = \'" & e.NewValue & "\' AND [品名] = \'" & e.NewValue & "\'  AND [规格] = \'" & e.NewValue & "\'"
msgbox(Filter )
dim a as double = DataTables("表B").Compute("Sum(完成数)", Filter)
msgbox(a)
    e.DataRow("完成数") = a
msgbox(Filter) \'调试用
End If

--  作者:lin98
--  发布时间:2025/1/11 15:03:00
--  
Dim Filter As String = "[单号] = \'" & e.NewValue & "\' AND [品名] = \'" & e.NewValue & "\'  AND [规格] = \'" & e.NewValue & "\'"

这里三个条件的新值,只有一个新值。执行提示:[单号]="\'QT*20"AND [品名] = "\'QT*20"AND [规格] = "\'QT*20"

--  作者:有点蓝
--  发布时间:2025/1/11 15:25:00
--  
msgbox(Filter )截图弹窗看看
--  作者:lin98
--  发布时间:2025/1/11 15:59:00
--  

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

--  作者:有点蓝
--  发布时间:2025/1/11 17:02:00
--  
很明显查询条件里有多余的空格,其次三个列都查询同样的数据,有符合这个条件的数据?

要知道e.NewValue表示的是当前正在录入的这个单元格的值,而不是表示3个列的单元格值,所以确定不应该是这样?
Dim Filter As String = "[单号] = \'" & e.DataRow("单号") & "\' AND [品名] = \'" & e.DataRow("品名") & "\'  AND [规格] = \'" & e.DataRow("规格") & "\'"