Foxtable(狐表)用户栏目专家坐堂 → 想做一个排位表


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

主题:想做一个排位表

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


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


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20200412231557.png
图片点击可在新窗口打开查看
密码:888888
不行啊,你可以测试一下。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛11141.foxdb


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


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

这个代码改不出错很容易,但是却实现不了功能,改也就没有意义。这个其实不是代码的问题,写代码很容易,难在这个算法逻辑上。先把代码放一边,画个完整可以实现功能的流程图出来,具体到可以对应代码的每个步骤,根据流程图可以手工填写出完整的对战表。再考虑编写代码吧!

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


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

我知道问题在哪了,这代码本身是没问题,但不适合用在这结构上,我昨晚已在换度思考变通取数了,等我写好了再来请教你。

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


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

密码:888888
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛11141.foxdb


DataTables("对阵表").DataRows.Clear
Dim bsrq As WinForm.DateTimePicker = e.Form.Controls("rq")
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 Integer = m.Value = 1
Dim di3 As Date = bsrq.Value
Dim all As Boolean = True
Dim ls As Integer = DataTables("基本信息").SQLGetValues("棋赛名称|姓名|身份", "[棋赛名称] = '" & di1 & "' And [姓名] Isnot Nothing And [身份] = '参赛人'").Count
'Dim ls As Integer = Select(count(*) fome {基本信息} wherh "棋赛名称 = '" & di1 & "' And [姓名] Isnot Nothing And [身份] = '参赛人'")
Dim dr As DataRow = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "'")
If DataTables("比赛积分").DataRows.count = 0 OrElse dr Is Nothing Then
    Dim ids1,ids2 As New List(of Integer) '用于存储洗牌前后的位置
    For i As Integer = 0 To ls -1 '准备初始的牌
        ids1.add(i)
    Next
    For i As Integer = 0 To ls - 1 '开始洗牌
        Dim idx As Integer = ids1(rand.Next(0,ids1.count))
        ids2.Add(idx)
        ids1.Remove(idx)
    Next
    DataTables("比赛积分").ReplaceFor("编号","","[棋赛名称] = '" & di1 & "'")
    For i As Integer = 0 To ls - 1 '100为要抽取的行数
        dr(ids2(i))("编号") = True
        dr(ids2(i))("棋赛名称") = di1
        dr(ids2(i))("第几轮比赛") = 1
    Next
    Dim ls1 As Integer = DataTables("比赛积分").SQLGetValues("棋赛名称|第几轮比赛", "棋赛名称 = '" & di1 & "' And 第几轮比赛 = 1'").Count
    For Each ds As DataRow In DataTables("对阵表").DataRows
        ds("桌号") = 0
        Dim di4 As Integer = ds("桌号")
        For i As Integer = 0 To ls1 - 1
            Dim n = 2
            If ls1 >= n Then
                Dim ls2 As new List(Of String)
                Do While ls2.count < n
                    ls2.add(dr(ids2(i))("编号")(ls1))
                Loop
                di4 = di4 + 1
                If ls2.count = 0 Then ds("红方_编号") = ls2(0)
                If ls2.count = 1 Then ds("黑方_编号") = ls2(1)
            End If
        Next
    Next
End If
DataTables("对阵表").Save()
我写了一下代码,不报错,但不生成任何数据,请教应如何写这代码,谢谢。
[此贴子已经被作者于2020/4/15 22:01:24编辑过]

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


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

密码:888888
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛(原).foxdb


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
我在对阵表窗口的随机号按钮中写入这段代码,意要按下按钮后弹出临时表,在临时表中生成随机号,这是符合指定棋赛名称,身份为参赛人的第1轮比赛随机号,但执行后报错!
Dim qsmc As WinForm.ComboBox = e.Form.Controls("棋赛名称")
Dim di1 As String = qsmc.Value
Dim ls As Integer = DataTables("基本信息").SQLCompute("Count([姓名])","[棋赛名称] = '" & di1 & "'And [姓名] Is Not Null And [身份] = '参赛人'")
Dim dr As DataRow = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "'")
If DataTables("比赛积分").DataRows.count = 0 OrElse dr("棋赛名称") Is Nothing Then
    Dim ids1,ids2 As New List(of Integer) '用于存储洗牌前后的位置
    For i As Integer = 0 To ls -1 '准备初始的牌
        ids1.add(i)
    Next
    For i As Integer = 0 To ls - 1 '开始洗牌
        Dim idx As Integer = ids1(rand.Next(0,ls-1))
        ids2.Add(idx)
        ids1.Remove(idx)
    Next
    Dim frm As WinForm.Form = Forms("随机号")
    frm.Open()
    DataTables("随机号").DataRows.Clear()
    DataTables("随机号").StopRedraw()
    DataTables("随机号").ReplaceFor("随机号",False)
    Dim dt As DataRow
    For i As Integer = 0 To ls - 1 '100为要抽取的行数
        dt = DataTables("随机号").AddNew
        DataTables("随机号").DataRows(ids2(i))("随机号") = True
    Next
    Tables("随机号").Filter = "[随机号] = True"
    DataTables("随机号").ResumeRedraw()
End If
[此贴子已经被作者于2020/5/4 7:43:41编辑过]

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


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

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛(原).foxdb


密码:888888
我把对阵表窗口的随机号按钮中写入这段代码再改为:
Dim frm As WinForm.Form = Forms("随机号")
frm.Open()
DataTables("随机号").DataRows.Clear()
Dim qsmc As WinForm.ComboBox = e.Form.Controls("棋赛名称")
Dim di1 As String = qsmc.Value
Dim ls As Integer = DataTables("基本信息").SQLCompute("Count([姓名])","[棋赛名称] = '" & di1 & "'And [姓名] Is Not Null And [身份] = '参赛人'")
Dim dr As DataRow = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "'")
If DataTables("比赛积分").DataRows.count = 0 OrElse dr("棋赛名称") Is Nothing Then
    Dim ids1,ids2 As New List(of Integer) '用于存储洗牌前后的位置
    For i As Integer = 0 To ls -1 '准备初始的牌
        ids1.add(i)
    Next
    For i As Integer = 0 To ls - 1 '开始洗牌
        Dim idx As Integer = ids1(rand.Next(0,ls-1))
        ids2.Add(idx)
        ids1.Remove(idx)
        Dim dt As DataRow = DataTables("随机号").AddNew()
        dt("随机号") = Csrt(ids2)
    Next
End If
红色标注数值转换代码报错,生成的是整数型、表编号列设置的是字符型,如果把表编号列改为数值型,则基本信息表的DataColChanged事件
Select Case e.DataCol.Name
    Case "棋赛名称","编号"
        Dim Filter As String 
        If e.DataCol.Name = "编号" Then
            Filter = "[棋赛名称] = '" & e.DataRow("棋赛名称") & "' And 编号 = '" & e.OldValue & "'"
        Else
            Filter = "[棋赛名称] = '" & e.OldValue & "' And 编号 = '" & e.DataRow("编号") & "'"
        End If
        e.DataRow.Save
        Dim drs As List(Of DataRow) = DataTables("比赛积分").Select(Filter)
        For Each dr As DataRow In drs
            dr(e.DataCol.Name) = e.NewValue
        Next
        DataTables("比赛积分").save
        e.DataRow.Save
End Select
报错,只有改为字符型,代码才执行,请教如果解决这矛盾?

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


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

终于明白帮助里的高效随机抽取记录是在原有记录基础上进行抽选,选取全部就完全没动,它只是随机选取内容,不会随机变动位置,我要重新想了。
[此贴子已经被作者于2020/5/4 22:36:58编辑过]

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


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

我要把基本信息表中指定棋赛名称的参赛人在随机号窗口中全部随机顺序,也就是随机生成编号。

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


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

Dim frm As WinForm.Form = Forms("随机号")
frm.Open()
DataTables("随机号").DataRows.Clear()
Dim qsmc As WinForm.ComboBox = e.Form.Controls("棋赛名称")
Dim di1 As String = qsmc.Value
Dim ls As Integer = DataTables("基本信息").SQLCompute("Count([姓名])","[棋赛名称] = '" & di1 & "'And [姓名] Is Not Null And [身份] = '参赛人'")
Dim dr As DataRow = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "'")
If DataTables("比赛积分").DataRows.count = 0 OrElse dr Is Nothing Then
    For i As Integer = 0 To ls -1 '准备初始的牌
        Dim idx As String = rand.Next(1,ls)
        Dim ds As DataRow
        ds = DataTables("随机号").AddNew()
        ds("随机号") = idx
    Next
End If

生成编号了,但有重复值!
[此贴子已经被作者于2020/5/5 1:17:11编辑过]

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


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

Dim frm As WinForm.Form = Forms("随机号")
frm.Open()
DataTables("随机号").DataRows.Clear()
Dim qsmc As WinForm.ComboBox = e.Form.Controls("棋赛名称")
Dim di1 As String = qsmc.Value
Dim drs As  List(of  DataRow) = DataTables("基本信息").SQLSelect("[棋赛名称] = '" & di1 & "'And [姓名] Is Not Null And [身份] = '参赛人'")
Dim dr As DataRow = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "'")
If DataTables("比赛积分").DataRows.count = 0 OrElse dr Is Nothing Then
    Dim ls As Integer = 1
    Do While drs.Count > 0
        Dim idx As Integer = rand.Next(0,drs.Count-1 )
        Dim ds As DataRow
        ds = DataTables("随机号").AddNew()
        ds("随机号") = ls
        ds("姓名") = drs(idx)("drs")
        ls+=1
        drs.RemoveAt(idx)
    Loop
End If

 回到顶部
总数 120 上一页 1 2 3 4 5 6 7 8 9 10 下一页 ..12