delphi7 从1-200组中随机抽取6组数据,抽完了然后从又从1-194组中抽6组,并继续至抽完所有。
delphi7 从1-200组中随机抽取6组数据,抽完了然后从又从1-194组中抽6组,并继续至抽完所有。这个程序怎么写?
[解决办法]
新建一个工程、双击窗体后,用下列代码覆盖你的unit1:
unit Unit1;interfaceuses Windows, SysUtils, Classes, Controls, Forms, StdCtrls, ComCtrls;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } procedure Button1Click(Sender: TObject); public { Public declarations } end;var Form1: TForm1;implementationuses DB, ADODB;var Button1: TButton; Memo1: TMemo; ADOQuery1: TADOQuery; StatusBar1: TStatusBar;{$R *.dfm}//抽奖函数(参数为:数据集、显示的字段名、显示数据载体、每组个数)function Lottery(ADOQuery: TADOQuery;Field_Name: string;ls: TStrings; Num: integer):boolean;var i,j,Group:integer; s:Tstringlist;begin Result:=false; if ADOQuery.RecordCount<1 then exit; ls.Clear; s:=Tstringlist.Create; try Randomize;//初始化 //安排取数据的顺序: for i:= 0 to ADOQuery.RecordCount-1 do s.Insert(random(s.Count),inttostr(i)); Group:=ADOQuery.RecordCount div Num; //满每组个数部分: for i:= 0 to Group-1 do begin ls.Append('第 '+inttostr(i+1)+' 组中奖的客户是:'); for j:= 0 to 6 do begin ADOQuery.RecNo:=strtoint(s.Strings[i*6]); ls.Append(ADOQuery.FieldByName(Field_Name).AsString); end; end; //不足每组个数部分: if ADOQuery.RecordCount mod Num >0 then begin ls.Append('第 '+inttostr(Group*Num+1)+' 组中奖的客户是:'); for i:= 0 to ADOQuery.RecordCount mod Num -1 do begin ADOQuery.RecNo:=strtoint(s.Strings[Group*Num+i]); ls.Append(ADOQuery.FieldByName(Field_Name).AsString); end; end; Result:=true; finally s.Free; end;end;procedure TForm1.Button1Click(Sender: TObject);const cp:array[0..2]of string=('连接串:','SQL串:','字段名:');var Form:TForm; edt:array[0..2]of TEdit; lb:array[0..2]of TLabel; i:integer; Okbtn,Clbtn:TButton;begin Form:=TForm.Create(self); try Form.Position:=poScreenCenter; Form.Caption:='连接设置'; Okbtn:=TButton.Create(Form); with Okbtn do begin Parent:=Form; Left:=70; Top:=150; Caption:='确定'; ModalResult:=mrOk; end; Clbtn:=TButton.Create(Form); with Clbtn do begin Parent:=Form; Left:=160; Top:=150; Caption:='取消'; ModalResult:=mrCancel; end; for i:=0 to 2 do begin edt[i]:=TEdit.Create(Form); with edt[i] do begin Parent:=Form; Top:=40+i*32; Left:=120; end; lb[i]:=TLabel.Create(Form); with lb[i] do begin Parent:=Form; Top:=43+i*32; Left:=65; Caption:=cp[i]; end; end; if form.ShowModal=mrOk then begin ADOQuery1:=TADOQuery.Create(Form); try ADOQuery1.ConnectionString:=edt[0].Text; ADOQuery1.Close; ADOQuery1.SQL.Text:=edt[1].Text; try ADOQuery1.Open; if Lottery(ADOQuery1,edt[2].Text,Memo1.Lines,6)then StatusBar1.Panels[0].Text:='抽奖完毕' else StatusBar1.Panels[0].Text:='没数据提供抽奖'; except StatusBar1.Panels[0].Text:='数据集参数设置错误,数据库无法打开'; end; finally ADOQuery1.Free; end; end; finally Form.Free; end;end;procedure TForm1.FormCreate(Sender: TObject);begin Height:=380; Width:=345; Position:=poScreenCenter; Memo1:=TMemo.Create(self); Memo1.Parent:=Form1; Memo1.Align:=alLeft; Button1:=TButton.Create(self); with Button1 do begin Parent:=Form1; Top:=20; Left:=230; Caption:='抽奖'; OnClick:=Button1Click; end; StatusBar1:=TStatusBar.Create(self); StatusBar1.Parent:=Form1; StatusBar1.Panels.Add;end;end.