Foxtable(狐表)用户栏目专家坐堂 → [求助]第二列前20行的数量自动录入


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

主题:[求助]第二列前20行的数量自动录入

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


加好友 发短信
等级:三尾狐 帖子:660 积分:5180 威望:0 精华:0 注册:2019/7/26 12:54:00
[求助]第二列前20行的数量自动录入  发帖心情 Post By:2023/3/10 9:59:00 [显示全部帖子]

求助自动统计第二列前20行的数量
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:第二列前20行数量自动录入到第三列.foxdb

版本不能升级,辛苦蓝总把代码贴出来,感谢

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


加好友 发短信
等级:三尾狐 帖子:660 积分:5180 威望:0 精华:0 注册:2019/7/26 12:54:00
回复:(有点蓝)使用for遍历  发帖心情 Post By:2023/3/10 12:21:00 [显示全部帖子]

蓝总,下面代码,统计结果怎么都是1

Select Case e.DataCol.Name

    Case "第二列","第二列前20行等于4的数量自动录入"
        
        Dim dr As DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") '找出上一行
        If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
            e.DataRow("第二列前20行等于4的数量自动录入") = Nothing
            dr = e.DataRow
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]")

            For i As Integer = 20 To drs.Count - 1 '重算余下行的余额
                        If e.DataRow("第二列") = "4" Then
                Dim Products As List(Of String)
                Products = DataTables("表A").GetValues("第二列","第二列  = 4")
                Dim q As Integer = DataTables("表A").GetValues("第二列","第二列  = 4").Count
                
                'Dim 数组1() As Char = e.DataRow("第二列")
                'Dim q As Integer = 数组1.Count
                
                drs(i)("第二列前20行等于4的数量自动录入") = q

                
                End If
            Next
        
End Select



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


加好友 发短信
等级:三尾狐 帖子:660 积分:5180 威望:0 精华:0 注册:2019/7/26 12:54:00
回复:(有点蓝)   Case "第二列","第二列...  发帖心情 Post By:2023/3/10 15:20:00 [显示全部帖子]

蓝总,上楼代码 第二列重置列时,项目崩溃报错: 无法创建新的堆x防护页面
下面的代码也项目崩溃报错: 无法创建新的堆x防护页面
求助

Select Case e.DataCol.Name
    
    Case "第二列","第二列前20行等于4的数量自动录入"
        
        Dim dr As DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") '找出上一行
        If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
            e.DataRow("第二列前20行等于4的数量自动录入") = Nothing
            dr = e.DataRow
        End If
        drs = e.DataTable.Select("[_SortKey] <= " & dr("_SortKey"), "[_SortKey] desc")
        Dim sum As Integer
        For i As Integer = 0 To math.min(drs.Count - 1,19) '重算余下行的余额
            If e.DataRow("第二列") = "4" Then
                sum += 1
                e.DataRow("第二列前20行等于4的数量自动录入") = sum
            End If
            If e.DataRow("第二列") = "8" Then
                sum += 1
                e.DataRow("第二列前20行等于8的数量自动录入") = sum
            End If
        Next
        
End Select

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


加好友 发短信
等级:三尾狐 帖子:660 积分:5180 威望:0 精华:0 注册:2019/7/26 12:54:00
回复:(有点蓝)Select Case e.DataCol.Name  &...  发帖心情 Post By:2023/3/10 15:45:00 [显示全部帖子]

蓝总,下面的代码生成的数量自动录入结果不对
想实现自动录入正确值是从第21行开始统计上面20行含有值的数量,图片粉色打钩处的值

图片点击可在新窗口打开查看此主题相关图片如下:代码生成的值与正切值不符(不是第一列的值).png
图片点击可在新窗口打开查看


Select Case e.DataCol.Name
    
    Case "第二列"
        
        Dim dr As DataRow
        
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") '找出上一行
        If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
            e.DataRow("第二列前20行等于4的数量自动录入") = Nothing
            dr = e.DataRow
        End If
        drs = e.DataTable.Select("[_SortKey] <= " & dr("_SortKey"), "[_SortKey] desc")
        Dim sum As Integer
        For i As Integer = 0 To math.min(drs.Count - 1,19) '重算余下行的余额
            If e.DataRow("第二列") = "4" Then
                sum += 1
                e.DataRow("第二列前20行等于4的数量自动录入") = sum
            End If
            If e.DataRow("第二列") = "8" Then
                sum += 1
                e.DataRow("第二列前20行等于8的数量自动录入") = sum
            End If
        Next
        
End Select


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


加好友 发短信
等级:三尾狐 帖子:660 积分:5180 威望:0 精华:0 注册:2019/7/26 12:54:00
回复:(有点蓝)第一列如果是序号,自己根据序号计算...  发帖心情 Post By:2023/3/10 16:17:00 [显示全部帖子]

蓝总,第一列不是序号,是无用的列。
下面的代码从第21行开始自动录入第二列 值4  值8 的数量还是不对,辛苦帮忙

Select Case e.DataCol.Name
    
    Case "第二列"
        
        Dim dr As DataRow
        
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") '找出上一行
        If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
            e.DataRow("第二列前20行等于4的数量自动录入") = Nothing
            dr = e.DataRow
        End If
        drs = e.DataTable.Select("[_SortKey] <= " & dr("_SortKey"), "[_SortKey] desc")
        Dim sum As Integer
        For i As Integer = 20 To drs.Count - 1 '重算余下行的余额
       ' For i As Integer = 20 To math.min(drs.Count - 1,19) '重算余下行的余额

            If e.DataRow("第二列") = "4" Then
                sum += 1
                'e.DataRow("第二列前20行等于4的数量自动录入") = sum
                drs(i-20)("第二列前20行等于4的数量自动录入") =  sum
            End If
            If e.DataRow("第二列") = "8" Then
                sum += 1
                ' e.DataRow("第二列前20行等于8的数量自动录入") = sum
               drs(i-20)("第二列前20行等于8的数量自动录入") =  sum
            End If
        Next
        
End Select

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


加好友 发短信
等级:三尾狐 帖子:660 积分:5180 威望:0 精华:0 注册:2019/7/26 12:54:00
回复:(有点蓝)都计算到一起了,肯定不对咯,分开计...  发帖心情 Post By:2023/3/10 17:00:00 [显示全部帖子]

蓝总,折腾了很久,有点难,论坛里有类似的案例吗?我参照修改一下

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


加好友 发短信
等级:三尾狐 帖子:660 积分:5180 威望:0 精华:0 注册:2019/7/26 12:54:00
回复:(有点蓝)Dim sum,sum2 As Integer  &nbs...  发帖心情 Post By:2023/3/10 19:39:00 [显示全部帖子]

蓝总,下面代码生成列填充0,还是有问题
Select Case e.DataCol.Name
    
    Case "第二列"
        
        Dim dr As DataRow
        
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") '找出上一行
        If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
            e.DataRow("第二列前20行等于4的数量自动录入") = Nothing
            dr = e.DataRow
        End If
        drs = e.DataTable.Select("[_SortKey] <= " & dr("_SortKey"), "[_SortKey] desc")
        
        Dim sum,sum2 As Integer
        For i As Integer = 20 To math.min(drs.Count - 1,19) '重算余下行的余额
            
            If e.DataRow("第二列") = "4" Then
                sum += 1
            End If
            If e.DataRow("第二列") = "8" Then
                sum2 += 1
            End If
        Next
        e.DataRow("第二列前20行等于4的数量自动录入") = sum
        e.DataRow("第二列前20行等于8的数量自动录入") = sum2
        
        
End Select

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


加好友 发短信
等级:三尾狐 帖子:660 积分:5180 威望:0 精华:0 注册:2019/7/26 12:54:00
回复:(有点蓝)Dim sum,sum2 As Integer  &nbs...  发帖心情 Post By:2023/3/10 19:42:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:列填充0有问题.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:三尾狐 帖子:660 积分:5180 威望:0 精华:0 注册:2019/7/26 12:54:00
回复:(有点蓝)For i As Integer = 0 To math.min(d...  发帖心情 Post By:2023/3/11 10:27:00 [显示全部帖子]

蓝总,可能是我表达描述不到位,想实现的效果是黄色列生成绿色列的值(统计第二列 4or8 前20行中出现的次数数量)

图片点击可在新窗口打开查看此主题相关图片如下:要实现生成绿色填充的值不是黄色填充的值.png
图片点击可在新窗口打开查看

下面代码执行生成的是黄色值是0和第一列的编号(不是想要的结果),是想统计 
4 千20行中出现的次数数量  9 10 10 11 10。。。。
8 千20行中出现的次数数量 5 4 4 4 4 3 2 2 2 2 。。。。

Select Case e.DataCol.Name
    
    Case "第二列"
        
        Dim dr As DataRow
        
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") '找出上一行
        If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
            e.DataRow("第二列前20行等于4的数量自动录入") = Nothing
            dr = e.DataRow
        End If
        drs = e.DataTable.Select("[_SortKey] <= " & dr("_SortKey"), "[_SortKey] desc")
        
        Dim sum,sum2 As Integer

For i As Integer = 0 To math.min(drs.Count - 1,19) 
            
            If e.DataRow("第二列") = "4" Then
                sum += 1
            End If
            If e.DataRow("第二列") = "8" Then
                sum2 += 1
            End If
        Next
        e.DataRow("第二列前20行等于4的数量自动录入") = sum
        e.DataRow("第二列前20行等于8的数量自动录入") = sum2
        
        
End Select

[此贴子已经被作者于2023/3/11 10:29:56编辑过]

 回到顶部