Foxtable(狐表)用户栏目专家坐堂 → 高效随机抽取少量和大量记录的方法


  共有4324人关注过本帖平板打印复制链接

主题:高效随机抽取少量和大量记录的方法

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


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
高效随机抽取少量和大量记录的方法  发帖心情 Post By:2015/5/14 16:54:00 [只看该作者]

随机抽取少量记录

 

如果要从数据表中随机抽取一定数量的记录,例如从员工表随机抽取5个员工,可以参考下面的代码:

Dim ids As String
Dim
lst As new List(of String)
Dim
cnt As Integer = DataTables("员工").DataRows.Count
Do

    Dim Id As Integer = rand.Next(0,cnt)
    id = DataTables("员工").DataRows(id)("_Identify")
    If lst.Contains(id) =False Then
        lst.Add(id)
    End If
    ids = ids & id &
","

Loop
While lst.count < 5   '5是要抽取的行数
Tables
("员工").Filter = "[_Identify] In (" & ids.Trim(",") & ")"

 

上面的代码适合随机抽取少量的记录。

 

随机抽取大量记录

 

如果随机抽取的记录较多,可以考虑增加一个逻辑列,假定逻辑列的名称为“选择”,可以参考下面的代码:

 

Dim lst As new List(of Integer)
Dim
cnt As Integer = DataTables("订单").DataRows.Count
Tables
("订单").StopRedraw()
DataTables
("订单").ReplaceFor("选择",False)
Do

    Dim idx As Integer = rand.Next(0,cnt)
    If lst.Contains(idx) =False Then
        lst.Add(idx)
        DataTables(
"
订单").DataRows(idx)("选择") = True
    End
If

Loop
While lst.count < 100   '100是要抽取的行数
Tables
("订单").Filter = "[选择] = True"
Tables
("订单").ResumeRedraw()

 

上面的代码从订单表中随机抽取100个订单。
建议逻辑列“选择”采用表达式列,不要给其设置表达式即可,因为:没有设置表达式的表达式列,可以通过代码设置此列的值。


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