Foxtable(狐表)用户栏目专家坐堂 → 通过临时列积分排名次


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

主题:通过临时列积分排名次

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


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
通过临时列积分排名次  发帖心情 Post By:2020/7/6 20:40:00 [只看该作者]

对阵表窗口综合组保存按钮我写了这代码,
图片点击可在新窗口打开查看此主题相关图片如下:排名.png
图片点击可在新窗口打开查看
应红色标注出错,请教应怎么写?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛(2020706).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 bsrq As WinForm.DateTimePicker = e.Form.Controls("rq")
        Dim di3 As Date = bsrq.Value
        Dim fz As WinForm.ComboBox = e.Form.Controls("fenzhu")
        Dim Str As String = fz.Value

        If di2 >= 2
            If DataTables("比赛积分").DataCols.Contains("辅助计算") = False Then
                DataTables("比赛积分").DataCols.add("辅助计算", Gettype(Integer))
            End If
            Dim drs1 As List(of DataRow)  = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "' And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "'","","上轮止累计积分 Desc,曾交战对手累计积分 Desc")
            For Each dr1 As DataRow In drs1
                dr1("辅助计算") = dr1("上轮止累计积分") + dr1("曾交战对手累计积分")
            Next
            Dim bjs As List(Of String) = DataTables("比赛积分").SQLGetValues("姓名","[棋赛名称] = '" & di1 & "' And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "'","上轮止累计积分 Desc,曾交战对手累计积分 Desc")
            For Each bj As String In bjs
                Dim drs2 As List(Of DataRow) = DataTables("比赛积分").Select("[姓名] = " & bj, "辅助计算 DESC")
                For n As Integer = 0 To drs2.Count - 1 '遍历所有行
                    If n > 0 AndAlso drs2(n)("辅助计算") = drs2(n-1)("辅助计算") Then '如果总分和上一行相同
                        drs2(n)("名次") = drs2(n-1)("名次") '则排名等于上一行
                    Else
                        drs2(n)("名次") = n + 1 '设置排名
                    End If
                Next
            Next
        End If


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


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

SQLSelect是从后台数据库取值,后台数据库是不存在临时列的。如果要使用临时列数据只有使用Select

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


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

临时列数据是从后台取数计算出来的,不是直接从后台取,后台没这数据。

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


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

Select不是只能计算已加载数据吗?我是分页加载的,用Select数据不全面吧?

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


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

不要临时列也很简单,在比赛积分表再加一列数值列就行,可我不想要那么多列,想显示简洁点,当然不想看到它隐藏列也可以,现在不是在学编程吗?尽量多学学。

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


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/7/6 22:27: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 fz As WinForm.ComboBox = e.Form.Controls("fenzhu")
        Dim Str As String = fz.Value
        For Each nr As Row In Tables("综合组").Rows
            Dim dr As DataRow = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "' And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "' And [编号] = '" & nr("红方_编号") & "'")
            If dr IsNot Nothing Then
                If di3 <> Nothing Then
                    dr("日期") = di3
                End If
                dr("桌号") = nr("桌号")
                dr("红黑方") = "红方"
                dr("积分") = nr("当前局成绩_红方")
                dr.Save
            End If
            dr = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "' And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "' And [编号]='" & nr("黑方_编号") & "'")
            If dr IsNot Nothing Then
                If di3 <> Nothing Then
                    dr("日期") = di3
                End If
                dr("桌号") = nr("桌号")
                dr("红黑方") = "黑方"
                dr("积分") = nr("当前局成绩_黑方")
                dr.Save
            End If
            If di2 >= 2
                dr("辅助计算") = dr("上轮止累计积分") + dr("积分") + dr("曾交战对手累计积分") + DataTables("比赛积分").SQLCompute("SUM(积分)","[分组] = '" & Str & "' And [桌号] = " & dr("桌号") & " And [编号] <> '" & dr("编号") & "'and [姓名] <> '" & dr("姓名") & "'")
            End If
        Next
        DataTables("比赛积分").load
        Dim drs1 As List(of DataRow)  = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "' And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "'","","上轮止累计积分 Desc,曾交战对手累计积分 Desc")
        Dim bjs As List(Of String) = DataTables("比赛积分").SQLGetValues("姓名","[棋赛名称] = '" & di1 & "' And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "'","上轮止累计积分 Desc,曾交战对手累计积分 Desc")
        For Each bj As String In bjs
            Dim drs2 As List(Of DataRow) = DataTables("比赛积分").Select("[姓名] = " & bj, "辅助计算 DESC")
            For n As Integer = 0 To drs2.Count - 1 '遍历所有行
                If n > 0 AndAlso drs2(n)("辅助计算") = drs2(n-1)("辅助计算") Then '如果总分和上一行相同
                    drs2(n)("名次") = drs2(n-1)("名次") '则排名等于上一行
                Else
                    drs2(n)("名次") = n + 1 '设置排名
                End If
            Next
        Next
End Select

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20200706222009.png
图片点击可在新窗口打开查看
辅助计算列并没有数值。


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


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

            If dr IsNot Nothing Then
                If di3 <> Nothing Then
                    dr("日期") = di3
                End If
                dr("桌号") = nr("桌号")
                dr("红黑方") = "黑方"
                dr("积分") = nr("当前局成绩_黑方")
            If di2 >= 2
                dr("辅助计算") = dr("上轮止累计积分") + dr("积分") + dr("曾交战对手累计积分") + DataTables("比赛积分").SQLCompute("SUM(积分)","[分组] = '" & Str & "' And [桌号] = " & dr("桌号") & " And [编号] <> '" & dr("编号") & "'and [姓名] <> '" & dr("姓名") & "'")
            End If
                dr.Save
            End If


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


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

辅助计算列的数值没问题了,用注识的代码,报错,用没注识代码生成的名次不对:

图片点击可在新窗口打开查看此主题相关图片如下:2112.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 bsrq As WinForm.DateTimePicker = e.Form.Controls("rq")
        Dim di3 As Date = bsrq.Value
        Dim fz As WinForm.ComboBox = e.Form.Controls("fenzhu")
        Dim Str As String = fz.Value
        For Each nr As Row In Tables("综合组").Rows
            Dim dr As DataRow = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "' And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "' And [编号] = '" & nr("红方_编号") & "'")
            If dr IsNot Nothing Then
                If di3 <> Nothing Then
                    dr("日期") = di3
                End If
                dr("桌号") = nr("桌号")
                dr("红黑方") = "红方"
                dr("积分") = nr("当前局成绩_红方")
                If di2 >= 2
                    dr("辅助计算") = dr("上轮止累计积分") + dr("积分") + dr("曾交战对手累计积分") + DataTables("比赛积分").SQLCompute("SUM(积分)","[分组] = '" & Str & "' And [桌号] = " & dr("桌号") & " And [编号] <> '" & dr("编号") & "'and [姓名] <> '" & dr("姓名") & "'")
                End If
                dr.Save
            End If
            dr = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "' And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "' And [编号]='" & nr("黑方_编号") & "'")
            If dr IsNot Nothing Then
                If di3 <> Nothing Then
                    dr("日期") = di3
                End If
                dr("桌号") = nr("桌号")
                dr("红黑方") = "黑方"
                dr("积分") = nr("当前局成绩_黑方")
                If di2 >= 2
                    dr("辅助计算") = dr("上轮止累计积分") + dr("积分") + dr("曾交战对手累计积分") + DataTables("比赛积分").SQLCompute("SUM(积分)","[分组] = '" & Str & "' And [桌号] = " & dr("桌号") & " And [编号] <> '" & dr("编号") & "'and [姓名] <> '" & dr("姓名") & "'")
                End If
                dr.Save
            End If
        Next
        DataTables("比赛积分").load
'Dim bjs As List(Of String) = DataTables("比赛积分").SQLGetValues("姓名","[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "'")
'For Each bj As String In bjs
'Dim drs As List(Of DataRow) = DataTables("比赛积分").Select("[姓名] = " & bj, "辅助计算 DESC")
    'For n As Integer = 0 To drs.Count - 1 '遍历所有行
        'If n > 0 AndAlso drs(n)("辅助计算") = drs(n-1)("辅助计算") Then '如果总分和上一行相同
            'drs(n)("名次") = drs(n-1)("名次") '则排名等于上一行
        'Else
            'drs(n)("名次") = n + 1 '设置排名
        'End If
    'Next
        Dim drs2 As List(Of String) = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "'")
        Dim drs1 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "'","","辅助计算 DESC")
        For n As Integer = 0 To drs1.Count - 1 '遍历所有行
            If n > 0 AndAlso drs1(n)("辅助计算") = drs1(n-1)("辅助计算") Then '如果总分和上一行相同
                drs2(n)("名次") = drs1(n-1)("名次") '则排名等于上一行
            Else
                drs2(n)("名次") = n + 1 '设置排名
            End If
        Next
        DataTables("比赛积分").load

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


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


Dim drs As List(Of DataRow) = DataTables("比赛积分").Select("[姓名] = '" & bj & "'", "辅助计算 DESC")

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


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

改为这样名次全为1        
        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 fz As WinForm.ComboBox = e.Form.Controls("fenzhu")
        Dim Str As String = fz.Value
        For Each nr As Row In Tables("综合组").Rows
            Dim dr As DataRow = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "' And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "' And [编号] = '" & nr("红方_编号") & "'")
            If dr IsNot Nothing Then
                If di3 <> Nothing Then
                    dr("日期") = di3
                End If
                dr("桌号") = nr("桌号")
                dr("红黑方") = "红方"
                dr("积分") = nr("当前局成绩_红方")
                If di2 >= 2
                    dr("辅助计算") = dr("上轮止累计积分") + dr("积分") + dr("曾交战对手累计积分") + DataTables("比赛积分").SQLCompute("SUM(积分)","[分组] = '" & Str & "' And [桌号] = " & dr("桌号") & " And [编号] <> '" & dr("编号") & "'and [姓名] <> '" & dr("姓名") & "'")
                End If
                dr.Save
            End If
            dr = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "' And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "' And [编号]='" & nr("黑方_编号") & "'")
            If dr IsNot Nothing Then
                If di3 <> Nothing Then
                    dr("日期") = di3
                End If
                dr("桌号") = nr("桌号")
                dr("红黑方") = "黑方"
                dr("积分") = nr("当前局成绩_黑方")
                If di2 >= 2
                    dr("辅助计算") = dr("上轮止累计积分") + dr("积分") + dr("曾交战对手累计积分") + DataTables("比赛积分").SQLCompute("SUM(积分)","[分组] = '" & Str & "' And [桌号] = " & dr("桌号") & " And [编号] <> '" & dr("编号") & "'and [姓名] <> '" & dr("姓名") & "'")
                End If
                dr.Save
            End If
        Next
        DataTables("比赛积分").load
Dim bjs As List(Of String) = DataTables("比赛积分").SQLGetValues("姓名","[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "'")
For Each bj As String In bjs
Dim drs As List(Of DataRow) = DataTables("比赛积分").Select("[姓名] = '" & bj & "'", "辅助计算 DESC")
    For n As Integer = 0 To drs.Count - 1 '遍历所有行
        If n > 0 AndAlso drs(n)("辅助计算") = drs(n-1)("辅助计算") Then '如果总分和上一行相同
            drs(n)("名次") = drs(n-1)("名次") '则排名等于上一行
        Else
            drs(n)("名次") = n + 1 '设置排名
        End If
    Next
Next

 回到顶部
总数 31 1 2 3 4 下一页