首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi7 从1-200组中随机抽取6组数据,抽完了然后从又从1-194组中抽6组,并继续至抽完所有。解决方案

2013-01-25 
delphi7 从1-200组中随机抽取6组数据,抽完了然后从又从1-194组中抽6组,并继续至抽完所有。delphi7 从1-200

delphi7 从1-200组中随机抽取6组数据,抽完了然后从又从1-194组中抽6组,并继续至抽完所有。
delphi7 从1-200组中随机抽取6组数据,抽完了然后从又从1-194组中抽6组,并继续至抽完所有。这个程序怎么写?
[解决办法]
新建一个工程、双击窗体后,用下列代码覆盖你的unit1:

unit Unit1;

interface

uses
  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;

implementation

uses  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.

热点排行