Foxtable(狐表)用户栏目专家坐堂 → 总是不执行某些条件


  共有1389人关注过本帖树形打印复制链接

主题:总是不执行某些条件

帅哥哟,离线,有人找我吗?
edisontsui
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
总是不执行某些条件  发帖心情 Post By:2024/4/26 10:15:00 [只看该作者]

请看附页代码和3个问题,不知道为什么。谢谢。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:代码0426.rar



 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110551 积分:562645 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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("piao号") = ctns1(s1 - 1) '指令单号
                                                            dr3("制造产品号") = ctns2(s2 - 1) '产品代号
                                                            dr3("要求生产数量") = q1
                                                            If drf5 IsNot Nothing Then
                                                                dr3("piao号日期") = drf5("要求开始交付日期")
                                                            end if
                                                        End If
                                                        'msgbox("T=" & T)
                                                End If
                                                
                                                If T = "False" Then 
                                                    Exit For 
                                                End If
                                                
                                            Next

 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By: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) & "' ")
请问这句代码有问题吗?

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110551 积分:562645 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/4/26 13:51:00 [只看该作者]

应该是木有符合条件的数据,或者没有保存数据。调试看看条件

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

 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2024/4/26 14:00:00 [只看该作者]

哦,发现一个问题了。我再试一下。


 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2024/4/26 15:18:00 [只看该作者]

都找到原因了。谢谢。

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110551 积分:562645 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/4/26 15:24:00 [只看该作者]

理解一下我给的调试代码,学会在调试的时候,显示一些关键的数据,方便跟踪分析各个步骤的执行情况。而不是简单抄帮助的messagebox.show(1)

 回到顶部