以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  总是不执行某些条件  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=191619)

--  作者:edisontsui
--  发布时间:2024/4/26 10:15:00
--  总是不执行某些条件
请看附页代码和3个问题,不知道为什么。谢谢。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:代码0426.rar



--  作者:有点蓝
--  发布时间:2024/4/26 10:32:00
--  
按红色方式改,然后调试

                                            r1 = r1 + 1
                                            Dim drs As List(Of DataRow) = DataTables("生产计划").SQLSelect("[产品代号] = \'" & ctns2(s2 - 1) & "\' and [指令单号] = \'" & ctns1(s1 - 1) & "\' and  [生产年月] = \'" & tx2 & "\' ", "", "[_SortKey]")
                                           
                                            Dim T As String = "True"
                                            Dim i As Integer
                                            For Each dr As DataRow In drs
                                                \'msgbox(1)
                                                i = i + 1
                                                msgbox("累计生产小时1=" & dr.isnull("累计生产小时1") & "," & dr("累计生产小时1") & "," & H1)
                                                msgbox("累计生产小时2=" & dr.isnull("累计生产小时2") & "," & dr("累计生产小时2") & "," & H1)
                                                If dr.isnull("累计生产小时1") = False AndAlso dr("累计生产小时1") >= H1 Then 
msgbox("累计生产小时1执行")
                                                    \'总有一些数据行是满足这个条件的,但是总是不执行这里的代码
                                                    r2 = r2 + 1
                                                    T = "False"
                                                    msgbox("准时行数=" & r2)
                                                    Exit For
                                                ElseIf dr.isnull("累计生产小时2") = False AndAlso dr("累计生产小时2") >= H1 Then
msgbox("累计生产小时1   不执行,累计生产小时2执行")
                                                        \'这里也一样,总有一些数据行是满足这个条件的,但是总是不执行这里的代码
                                                        r2 = r2 + 1
                                                        T = "False"
                                                        msgbox("准时行数=" & r2)
                                                        Exit For
                                                    Else
msgbox("累计生产小时1   不执行,累计生产小时2   不执行,这时 i=" & i & ",drs.count=" & drs.count)
                                                        \'按道理,如果有满足上面的任何一个条件的数据的话,那么这样的数据行就不执行如下代码了,但是,所有数据行都会执行下面的代码
                                                        If i = drs.count Then
                                                            r9 = r9 + 1
                                                            Dim dr3 As DataRow = DataTables("未按时完成数据").AddNew()
                                                            dr3("工序") = "注塑"
                                                            dr3("数据来源") = "生产计划1"
                                                            dr3("票号") = ctns1(s1 - 1) \'指令单号
                                                            dr3("制造产品号") = ctns2(s2 - 1) \'产品代号
                                                            dr3("要求生产数量") = q1
                                                            If drf5 IsNot Nothing Then
                                                                dr3("票号日期") = drf5("要求开始交付日期")
                                                            end if
                                                        End If
                                                        \'msgbox("T=" & T)
                                                End If
                                                
                                                If T = "False" Then 
                                                    Exit For 
                                                End If
                                                
                                            Next

--  作者:edisontsui
--  发布时间:2024/4/26 13:47:00
--  
现在发现H1的值是无穷大,而这个问题的原因是前面有一个数据 drs1.count 的数据是0.
drs1.count 的来源是如下代码:
Dim drs1 As List(Of DataRow) = DataTables("生产计划").SQLSelect("[生产年月] = \'" & tx2 & "\' and [指令单号] <> \'" & ctns1(s1 - 1) & "\' and 产品代号 = \'" & ctns2(s2 - 1) & "\' ")
请问这句代码有问题吗?

--  作者:有点蓝
--  发布时间:2024/4/26 13:51:00
--  
应该是木有符合条件的数据,或者没有保存数据。调试看看条件

msgbox("[生产年月] = \'" & tx2 & "\' and [指令单号] <> \'" & ctns1(s1 - 1) & "\' and 产品代号 = \'" & ctns2(s2 - 1) & "\' ")

--  作者:edisontsui
--  发布时间:2024/4/26 13:59:00
--  
Dim drcnt As Integer = DataTables("生产计划").SQLCompute("count(生产年月)", "[生产年月] = \'" & tx2 & "\' and [指令单号] <> \'" & ctns1(s1 - 1) & "\'  and 产品代号 = \'" & ctns2(s2 - 1) & "\'") 
我用上面的代码来计算,drcnt 也一直是 0。
但是我用 
 msgbox("生产年月=" & tx2 & "  指令单号=" & ctns1(s1 - 1) & "  产品代号=" & ctns2(s2 - 1))

来测试的话,生产年月、指令单号、产品代号都是有数据的。



--  作者:edisontsui
--  发布时间:2024/4/26 14:00:00
--  
哦,发现一个问题了。我再试一下。


--  作者:edisontsui
--  发布时间:2024/4/26 15:18:00
--  
都找到原因了。谢谢。
--  作者:有点蓝
--  发布时间:2024/4/26 15:24:00
--  
理解一下我给的调试代码,学会在调试的时候,显示一些关键的数据,方便跟踪分析各个步骤的执行情况。而不是简单抄帮助的messagebox.show(1)