以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  查询按钮生成的数据不完整  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=151626)

--  作者:采菊东篱下
--  发布时间:2020/6/29 16:28:00
--  查询按钮生成的数据不完整
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛(2020628).foxdb

密码:888888
如题:
Dim qsmc As WinForm.ComboBox = e.Form.Controls("棋赛名称")
        Dim di1 As String = qsmc.Value
        Dim m As WinForm.TextBox = e.Form.Controls("第几轮")
        Dim di2 As String = m.Value
        Dim fz As WinForm.ComboBox = e.Form.Controls("fenzhu")
        Dim Str As String = fz.Value
        Dim drs6 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = \'" & di1 & "\'And [第几轮比赛] = \'" & di2 & "\' And [分组] = \'" & Str & "\'")
        For i As Integer = 0 To drs6.Count - 1 Step 2
            If i + 1 <= drs6.Count - 1
                Dim cx As DataRow = DataTables("查询").AddNew
                cx("红方_编号") = drs6(i)("编号")
                cx("红方_姓名") = drs6(i)("姓名")
                cx("红方_上轮止累计积分") = drs6(i)("上轮止累计积分")
                cx("红方_曾交战对手累计积分") = drs6(i)("曾交战对手累计积分")
                cx("当前局成绩_红方") = IIF(drs6(i).IsNull("积分")," Is Null"," =\'" & drs6(i)("积分")  & "\'")
                cx("黑方_编号") = drs6(i+1)("编号")
                cx("黑方_姓名") = drs6(i+1)("姓名")
                cx("黑方_上轮止累计积分") = drs6(i+1)("上轮止累计积分")
                cx("黑方_曾交战对手累计积分") = drs6(i+1)("曾交战对手累计积分")
                cx("当前局成绩_黑方") = IIF(drs6(i+1).IsNull("积分")," Is Null"," =\'" & drs6(i+1)("积分")  & "\'")
            End If
        Next

--  作者:有点蓝
--  发布时间:2020/6/29 16:48:00
--  
        For i As Integer = 0 To drs6.Count - 1 Step 2
                Dim cx As DataRow = DataTables("查询").AddNew
                cx("红方_编号") = drs6(i)("编号")
                cx("红方_姓名") = drs6(i)("姓名")
                cx("红方_上轮止累计积分") = drs6(i)("上轮止累计积分")
                cx("红方_曾交战对手累计积分") = drs6(i)("曾交战对手累计积分")
                cx("当前局成绩_红方") = IIF(drs6(i).IsNull("积分")," Is Null"," =\'" & drs6(i)("积分")  & "\'")
         If i + 1 <= drs6.Count - 1
                cx("黑方_编号") = drs6(i+1)("编号")
                cx("黑方_姓名") = drs6(i+1)("姓名")
                cx("黑方_上轮止累计积分") = drs6(i+1)("上轮止累计积分")
                cx("黑方_曾交战对手累计积分") = drs6(i+1)("曾交战对手累计积分")
                cx("当前局成绩_黑方") = IIF(drs6(i+1).IsNull("积分")," Is Null"," =\'" & drs6(i+1)("积分")  & "\'")
            End If
        Next

--  作者:采菊东篱下
--  发布时间:2020/6/29 20:49:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛(2020629).foxdb

密码:888888
改成这样,报错!

图片点击可在新窗口打开查看此主题相关图片如下:20206.png
图片点击可在新窗口打开查看
        Dim qsmc As WinForm.ComboBox = e.Form.Controls("棋赛名称")
        Dim di1 As String = qsmc.Value
        Dim m As WinForm.TextBox = e.Form.Controls("第几轮")
        Dim di2 As String = m.Value
        Dim fz As WinForm.ComboBox = e.Form.Controls("fenzhu")
        Dim Str As String = fz.Value
        DataTables("查询").DataRows.Clear        
        Dim drs6 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = \'" & di1 & "\'And [第几轮比赛] = \'" & di2 & "\' And [分组] = \'" & Str & "\' And [桌号] > 0","","桌号")
        For ci As Integer = 0 To drs6.Count - 1 Step 2
            Dim cx As DataRow = DataTables("查询").AddNew
            cx("桌号") = drs6(ci)("桌号")
            cx("红方_编号") = drs6(ci)("编号")
            cx("红方_姓名") = drs6(ci)("姓名")
            cx("红方_上轮止累计积分") = drs6(ci)("上轮止累计积分")
            cx("红方_曾交战对手累计积分") = drs6(ci)("曾交战对手累计积分")
            cx("当前局成绩_红方") = IIF(drs6(ci).IsNull("积分"),"0",drs6(ci)("积分"))
            If ci + 1 <= drs6.Count - 1
                cx("黑方_编号") = drs6(ci+1)("编号")
                cx("黑方_姓名") = drs6(ci+1)("姓名")
                cx("黑方_上轮止累计积分") = drs6(ci+1)("上轮止累计积分")
                cx("黑方_曾交战对手累计积分") = drs6(ci+1)("曾交战对手累计积分")
                cx("当前局成绩_黑方") = IIF(drs6(ci+1).IsNull("积分"),"0",drs6(ci+1)("积分"))
            End If
        Next
        Dim drs7 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = \'" & di1 & "\'And [第几轮比赛] = \'" & di2 & "\' And [分组] = \'" & Str & "\' And [桌号] = 0","","桌号")
        For hi As Integer = 0 To drs7.Count - 1 Step 2
            Dim cx As DataRow = DataTables("查询").AddNew
            cx("桌号") = 0
            cx("红方_编号") = drs7(hi)("编号")
            cx("红方_姓名") = drs7(hi)("姓名")
            cx("红方_上轮止累计积分") = drs7(hi)("上轮止累计积分")
            cx("红方_曾交战对手累计积分") = drs7(hi)("曾交战对手累计积分")
            cx("当前局成绩_红方") = IIF(drs7(hi).IsNull("积分"),"0",drs7(hi)("积分"))
            If hi + 1 <= drs6.Count - 1
                cx("黑方_编号") = drs7(hi+1)("编号")
                cx("黑方_姓名") = drs7(hi+1)("姓名")
                cx("黑方_上轮止累计积分") = drs7(hi+1)("上轮止累计积分")
                cx("黑方_曾交战对手累计积分") = drs7(hi+1)("曾交战对手累计积分")
                cx("当前局成绩_黑方") = IIF(drs7(hi+1).IsNull("积分"),"0",drs7(hi+1)("积分"))
            End If
        Next

--  作者:采菊东篱下
--  发布时间:2020/6/29 20:53:00
--  
你给的代码没有了所有0桌的数据,查询出来的数据也与比赛积分表的不一致,因此我把代码改为这样,显示数据没错了,但提示窗口报错就不知哪的问题了。
--  作者:有点蓝
--  发布时间:2020/6/29 20:58:00
--  
调试技巧:http://www.foxtable.com/webhelp/topics/1485.htm
--  作者:采菊东篱下
--  发布时间:2020/6/29 21:14:00
--  
我知道是什么问题引发的错了,综合组第一轮不报错,因为没缺赛人,都有对应排座,第2轮之后有缺赛独立排座后没对应数据就报错了,请教如何解决对应数据为空造成的错误问题呢?
--  作者:有点蓝
--  发布时间:2020/6/29 21:56:00
--  
判断查询结果是否有值,比如使用find,就是判断if dr isnot nothing,如果使用select,就判断drs.Count > 0
--  作者:采菊东篱下
--  发布时间:2020/6/29 22:24:00
--  
还是报错
           Dim qsmc As WinForm.ComboBox = e.Form.Controls("棋赛名称")
        Dim di1 As String = qsmc.Value
        Dim fz As WinForm.ComboBox = e.Form.Controls("fenzhu")
        Dim di4 As String = fz.Value
        DataTables("比赛积分").SQLReplaceFor("比赛已结束",True,"[棋赛名称] = \'" & di1 & "\' And [分组] = \'" & di4 & "\' And [比赛已结束] = False")
        DataTables("比赛积分").SQLReplaceFor("_locked",True,"[棋赛名称] = \'" & di1 & "\' And [分组] = \'" & di4 & "\' And [比赛已结束] = True")
        DataTables("比赛积分").save
        DataTables("比赛积分").load
    Case  "解锁"
        Dim qsmc As WinForm.ComboBox = e.Form.Controls("棋赛名称")
        Dim di1 As String = qsmc.Value
        Dim fz As WinForm.ComboBox = e.Form.Controls("fenzhu")
        Dim di4 As String = fz.Value
        DataTables("比赛积分").SQLReplaceFor("比赛已结束",False,"[棋赛名称] = \'" & di1 & "\' And [分组] = \'" & di4 & "\' And [比赛已结束] = True")
        DataTables("比赛积分").SQLReplaceFor("_locked",False,"[棋赛名称] = \'" & di1 & "\' And [分组] = \'" & di4 & "\' And [比赛已结束] = False")
        DataTables("比赛积分").save
        DataTables("比赛积分").load
    Case  "查询"
        Dim qsmc As WinForm.ComboBox = e.Form.Controls("棋赛名称")
        Dim di1 As String = qsmc.Value
        Dim m As WinForm.TextBox = e.Form.Controls("第几轮")
        Dim di2 As String = m.Value
        Dim fz As WinForm.ComboBox = e.Form.Controls("fenzhu")
        Dim Str As String = fz.Value
        DataTables("查询").DataRows.Clear
        Dim drs6 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = \'" & di1 & "\'And [第几轮比赛] = \'" & di2 & "\' And [分组] = \'" & Str & "\' And [桌号] > 0","","桌号")
        Dim drs7 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = \'" & di1 & "\'And [第几轮比赛] = \'" & di2 & "\' And [分组] = \'" & Str & "\' And [桌号] > 0 And [红黑方] = \'红方\'","","桌号")
        Dim drs8 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = \'" & di1 & "\'And [第几轮比赛] = \'" & di2 & "\' And [分组] = \'" & Str & "\' And [桌号] > 0 And [红黑方] = \'黑方\'","","桌号")
        For ci As Integer = 0 To (drs6.Count)\\2
            Dim cx As DataRow = DataTables("查询").AddNew
            If ci > drs7.count And ci <= drs8.count Then
                cx("红方_编号") = Nothing
                cx("红方_姓名") = Nothing
                cx("红方_上轮止累计积分") = 0
                cx("红方_曾交战对手累计积分") = 0
                cx("当前局成绩_红方") = 0
            Else
                cx("桌号") = drs7(ci)("桌号")
                cx("红方_编号") = drs7(ci)("编号")
                cx("红方_姓名") = drs7(ci)("姓名")
                cx("红方_上轮止累计积分") = drs7(ci)("上轮止累计积分")
                cx("红方_曾交战对手累计积分") = drs7(ci)("曾交战对手累计积分")
                cx("当前局成绩_红方") = IIF(drs7(ci).IsNull("积分"),"0",drs7(ci)("积分"))
            End If
            If ci <= drs7.count And ci > drs8.count Then
                cx("黑方_编号") = Nothing
                cx("黑方_姓名") = Nothing
                cx("黑方_上轮止累计积分") = 0
                cx("黑方_曾交战对手累计积分") = 0
                cx("当前局成绩_黑方") = 0
            Else
                cx("黑方_编号") = drs8(ci)("编号")
                cx("黑方_姓名") = drs8(ci)("姓名")
                cx("黑方_上轮止累计积分") = drs8(ci)("上轮止累计积分")
                cx("黑方_曾交战对手累计积分") = drs8(ci)("曾交战对手累计积分")
                cx("当前局成绩_黑方") = IIF(drs8(ci+1).IsNull("积分"),"0",drs8(ci)("积分"))
            End If
        Next
        Dim drs9 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = \'" & di1 & "\'And [第几轮比赛] = \'" & di2 & "\' And [分组] = \'" & Str & "\' And [桌号] = 0","","桌号")
        Dim drs10 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = \'" & di1 & "\'And [第几轮比赛] = \'" & di2 & "\' And [分组] = \'" & Str & "\' And [桌号] = 0 And [红黑方] = \'红方\'","","桌号")
        Dim drs11 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = \'" & di1 & "\'And [第几轮比赛] = \'" & di2 & "\' And [分组] = \'" & Str & "\' And [桌号] = 0 And [红黑方] = \'黑方\'","","桌号")
        For hi As Integer = 0 To (drs9.Count)\\2
            Dim cx As DataRow = DataTables("查询").AddNew
            If hi > drs10.count And hi <= drs11.count Then
                cx("红方_编号") = Nothing
                cx("红方_姓名") = Nothing
                cx("红方_上轮止累计积分") = 0
                cx("红方_曾交战对手累计积分") = 0
                cx("当前局成绩_红方") = 0
            Else
                cx("桌号") = 0
                cx("红方_编号") = drs10(hi)("编号")
                cx("红方_姓名") = drs10(hi)("姓名")
                cx("红方_上轮止累计积分") = drs10(hi)("上轮止累计积分")
                cx("红方_曾交战对手累计积分") = drs10(hi)("曾交战对手累计积分")
                cx("当前局成绩_红方") = IIF(drs10(hi).IsNull("积分"),"0",drs10(hi)("积分"))
            End If
            If hi <= drs10.count And hi > drs11.count Then
                cx("黑方_编号") = Nothing
                cx("黑方_姓名") = Nothing
                cx("黑方_上轮止累计积分") = 0
                cx("黑方_曾交战对手累计积分") = 0
                cx("当前局成绩_黑方") = 0
            Else
                cx("黑方_编号") = drs11(hi+1)("编号")
                cx("黑方_姓名") = drs11(hi+1)("姓名")
                cx("黑方_上轮止累计积分") = drs11(hi+1)("上轮止累计积分")
                cx("黑方_曾交战对手累计积分") = drs11(hi+1)("曾交战对手累计积分")
                cx("当前局成绩_黑方") = IIF(drs11(hi+1).IsNull("积分"),"0",drs11(hi+1)("积分"))
            End If
        Next
[此贴子已经被作者于2020/6/29 23:01:20编辑过]

--  作者:有点蓝
--  发布时间:2020/6/29 22:42:00
--  
没看懂这代码逻辑。自己调试一下看哪一句出错
--  作者:采菊东篱下
--  发布时间:2020/6/29 23:04:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20200629230016.png
图片点击可在新窗口打开查看
0桌的数据全没了,最后一行也没了黑方的当前积分!