以文本方式查看主题 - 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个问题,不知道为什么。谢谢。
|
||||
-- 作者:有点蓝 -- 发布时间: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) |