2 *** 本HTML页面由红虎工作室的 PRG2HTML 生成器产生 ***
3 *** 生成器版本 共享版 1.0 build0922 (Honghoo.NET) ***
4 ******************************************************
5
6 *-- 首先打开你要抽取的表,并将它的别名以参数的形式传入
7 *-- 再加上要抽取的记录数
8 DO GetRandRecord WITH "table1",10
9
10 *-- 随机从一个表获取N个不重复的记录
11 *-- 红虎 于 2008.04.21
12 PROCEDURE GetRandRecord
13 LPARAMETERS tcSourceTable , tnRecordN
14 *-- 参数说明:源表,就是从哪个表取纪录
15 * 记录数,就是随机要取得个数
16
17 IF PARAMETERS() <> 2
18 MESSAGEBOX("参数个数不正确!",48,"参数错误")
19 RETURN
20 ENDIF
21
22 IF TYPE("tcSourceTable") <> "C"
23 MESSAGEBOX("第一个参数需要传递一个源数据表名!",64,"参数提示")
24 RETURN
25 ENDIF
26
27 IF TYPE("tnRecordN") <> "N"
28 MESSAGEBOX("第二个参数需要传递一个需要取的记录数 N !",64,"参数提示")
29 RETURN
30 ENDIF
31
32 IF !USED("&tcSourceTable")
33 MESSAGEBOX("源表没有打开!",48,"警告")
34 RETURN
35 ELSE
36 SELECT &tcSourceTable
37 IF RECCOUNT() < tnRecordN
38 MESSAGEBOX("数据源的记录总数还没有要取得数量多,不能继续!",16,"错误")
39 RETURN
40 ENDIF
41 ENDIF
42
43 *-- 定义变量
44 LOCAL lcTempTable && 用来存放取到的记录号,也可用数组实现
45 LOCAL lcResultTable && 用来存放取到的记录
46 LOCAL lnRandRecord && 随机的数
47 LOCAL lnSourceCount && 数据源的总数
48 LOCAL i
49
50 lcTempTable = "temp" + SYS(2015)
51 lcResultTable = "Result" + SYS(2015)
52
53 lnSourceCount = RECCOUNT(tcSourceTable)
54
55 *-- 创建临时表用来存放记录号
56 CREATE CURSOR &lcTempTable ( RecordNo n (10) )
57 *-- 创建结果表
58 SELECT &tcSourceTable
59 COPY STRUCTURE TO &lcResultTable
60 USE &lcResultTable ALIAS &lcResultTable IN 0
61
62 *-- 开始循环找N个记录出来
63 i=1
64 DO WHILE i<=tnRecordN
65
66 WAIT WINDOW "正在抽取第 " + ALLTRIM(STR(i)) + " 个随机记录..." NOWAIT
67
68 *-- 得到一个0到源记录数的一个随机数
69 lnRandRecord = INT(RAND() * lnSourceCount)
70
71 *-- 为零的不要
72 IF lnRandRecord = 0
73 LOOP
74 ENDIF
75
76 *-- 已有的不要
77 SELECT &lcTempTable
78 LOCATE FOR RecordNo = lnRandRecord
79 IF FOUND()
80 LOOP
81 ENDIF
82
83 *-- 剩下的是有用的
84 SELECT &tcSourceTable
85 GOTO lnRandRecord
86 SCATTER TO memv memo
87
88 SELECT &lcTempTable
89 APPEND BLANK
90 REPLACE RecordNo WITH lnRandRecord
91
92 SELECT &lcResultTable
93 APPEND BLANK
94 GATHER FROM memv memo
95
96 i = i + 1
97 ENDDO
98
99 WAIT WINDOW "抽取 " + ALLTRIM(STR(tnRecordN)) + " 个随机记录完毕!" nowait
100
101 SELECT &lcResultTable
102 BROWSE TITLE "抽到的结果"
103
104 ENDPROC