Foxtable(狐表)用户栏目专家坐堂 → 为什么改动一下就不行了?


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

主题:为什么改动一下就不行了?

美女呀,离线,留言给我吧!
采菊东篱下
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
为什么改动一下就不行了?  发帖心情 Post By:2020/6/13 16:08:00 [只看该作者]

原来的代码没问题的:
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 bsrq As WinForm.DateTimePicker = e.Form.Controls("rq")
Dim di3 As Date = bsrq.Value
Dim dr As DataRow = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "'")
Dim a As String = Cstr(Val(di2)-1)
If DataTables("比赛积分").DataRows.count = 0 OrElse dr Is Nothing Then
    Dim dts As List(of DataRow) = DataTables("基本信息").SQLSelect("[棋赛名称] = '" & di1 & "'And [身份] = '参赛人'")
    Dim i2 As Integer = 1
    Do While dts.Count > 0
        Dim idx As Integer = rand.Next(0,dts.Count-1)
        dr = DataTables("比赛积分").AddNew()
        dr("桌号") = math.Ceiling((i2+1) \ 2)
        dr("日期") = di3
        dr("棋赛名称") = di1
        dr("第几轮比赛") = di2
        dr("编号") = dts(idx)("编号")
        dr("姓名") = dts(idx)("姓名")
        dts.RemoveAt(idx)
        i2 += 1
    Loop
    DataTables("比赛积分").Save()
    DataTables("对阵表").DataRows.Clear
    Dim drs1 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "'","","第几轮比赛,桌号")
    For i As Integer = 0 To drs1.Count - 1 Step 2
        If i+1 <= drs1.Count - 1
            Dim nr As DataRow = DataTables("对阵表").AddNew()
            nr("桌号") = drs1(i)("桌号")
            nr("红方_编号") = drs1(i)("编号")
            nr("红方_姓名") = drs1(i)("姓名")
            nr("黑方_编号") = drs1(i+1)("编号")
            nr("黑方_姓名") = drs1(i+1)("姓名")
        End If
    Next
因为还要利用dr继续写代码,就改为:
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 bsrq As WinForm.DateTimePicker = e.Form.Controls("rq")
Dim di3 As Date = bsrq.Value
Dim drs As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "'")
For Each dr As DataRow In drs
    Dim a As String = Cstr(Val(di2)-1)
    Dim i2 As Integer = 1
    Dim dts As List(of DataRow) = DataTables("基本信息").SQLSelect("[棋赛名称] = '" & di1 & "'And [身份] = '参赛人'")
    DataTables("比赛积分").DeleteFor("棋赛名称 is null and 第几轮比赛 is null")
    If di2 =1 And (DataTables("比赛积分").DataRows.count = 0 OrElse drs.count <= dts.Count) Then 
        Do While dts.Count > 0
            Dim idx As Integer = rand.Next(0,dts.Count-1)
            dr = DataTables("比赛积分").AddNew
            dr("桌号") = math.Ceiling((i2+1) \ 2)
            dr("日期") = di3
            dr("棋赛名称") = di1
            dr("第几轮比赛") = di2
            dr("编号") = dts(idx)("编号")
            dr("姓名") = dts(idx)("姓名")
            dts.RemoveAt(idx)
            i2 += 1
        Loop
        DataTables("比赛积分").Save()
        DataTables("对阵表").DataRows.Clear
        Dim drs1 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "'","","桌号")
        For i As Integer = 0 To drs1.Count - 1 Step 2
            If i+1 <= drs1.Count - 1
                Dim nr As DataRow = DataTables("对阵表").AddNew
                nr("桌号") = drs1(i)("桌号")
                nr("红方_编号") = drs1(i)("编号")
                nr("红方_姓名") = drs1(i)("姓名")
                nr("黑方_编号") = drs1(i+1)("编号")
                nr("黑方_姓名") = drs1(i+1)("姓名")
            End If
        Next
  End If
Next
红色部分是我改动过的,删除添加的空行,不允按了多次按钮生成了多次数据。

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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/13 16:32:00 [只看该作者]

不行了指什么?什么地方不行了?
第一段红色代码,sqlselect如果有结果,能够进入for each循环,说明"比赛积分"表肯定是有数据的,第二段红色代码的判断【DataTables("比赛积分").DataRows.count = 0】完全就是多余的,因为count肯定不等于0。
至于【drs.count <= dts.Count】条件是否成立,自己调试一下
msgbox(drs.count)
msgbox(dts.count)

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/6/13 17:17:00 [只看该作者]

一开始是空表,或不存在棋赛名称和第几轮比赛,不要DataTables("比赛积分").DataRows.count = 0我也试过,都不能生成数据。代码在对阵表中的综合排座上。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛.foxdb
密码:888888

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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/13 17:31:00 [只看该作者]

看不懂您的代码。请使用文字说明一下具体的实现逻辑,比如第一轮想做什么功能?把哪个表的数据按照什么规则填充到哪个表?最后生成的结果应该是怎么样的?最好是画个流程图,把您的思路表现出来

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/6/13 17:46:00 [只看该作者]

加上messagebox.show(drs.count),完全没反应,因为比赛积分表中一开始完全没有记录,但必须加这判断,否则表上已生成数据,因为多次按按钮,再度生成。

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/6/13 19:25:00 [只看该作者]

改为这样解决了:
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 bsrq As WinForm.DateTimePicker = e.Form.Controls("rq")
Dim di3 As Date = bsrq.Value
Dim dr As DataRow = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "'")
Dim a As String = Cstr(Val(di2)-1)
Dim i2 As Integer = 1
Dim dts As List(of DataRow) = DataTables("基本信息").SQLSelect("[棋赛名称] = '" & di1 & "'And [身份] = '参赛人'")
DataTables("比赛积分").DeleteFor("棋赛名称 is null and 第几轮比赛 is null")
Dim cnt As Integer
cnt = DataTables("比赛积分").Compute("Count([姓名])", "[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "'")
If di2 =1 And cnt = 0 Then
    Do While dts.Count > 0
        Dim idx As Integer = rand.Next(0,dts.Count-1)
        dr = DataTables("比赛积分").AddNew
        dr("桌号") = math.Ceiling((i2+1) \ 2)
        dr("日期") = di3
        dr("棋赛名称") = di1
        dr("第几轮比赛") = di2
        dr("编号") = dts(idx)("编号")
        dr("姓名") = dts(idx)("姓名")
        dts.RemoveAt(idx)
        i2 += 1
    Loop
    DataTables("比赛积分").Save()
    DataTables("对阵表").DataRows.Clear
    Dim drs1 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "'","","桌号 Desc")
    For i As Integer = 0 To drs1.Count - 1 Step 2
        If i+1 <= drs1.Count - 1
            Dim nr As DataRow = DataTables("对阵表").AddNew
            nr("桌号") = drs1(i)("桌号")
            nr("红方_编号") = drs1(i)("编号")
            nr("红方_姓名") = drs1(i)("姓名")
            nr("黑方_编号") = drs1(i+1)("编号")
            nr("黑方_姓名") = drs1(i+1)("姓名")
        End If
    Next
End If
[此贴子已经被作者于2020/6/13 20:33:06编辑过]

 回到顶部