因为记录量很大,处理很慢,请问高手们好的解决方法!procedure TForm1.yss1Click(Sender: TObject);
var
  i,j,pd: integer;
  xs: array[1..8,0..8] of Integer;
  a: array[0..1] of integer;
  b: array[0..1] of integer;
begin
  closeallbut();
  for i:=0 to 1 do
      begin
        a[i]:=0;
        b[i]:=i;
      end;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT * From 信息 where 序号='+no.Caption);
  ADOQuery1.Open;
  for i:=1 to 8 do
      begin
        xs[i,0]:=0;
        xs[1,i]:=ADOQuery1.FieldByName('a'+IntToStr(i)).AsInteger;
        xs[2,i]:=ADOQuery1.FieldByName('b'+IntToStr(i)).AsInteger;
        xs[3,i]:=ADOQuery1.FieldByName('c'+IntToStr(i)).AsInteger;
        xs[4,i]:=ADOQuery1.FieldByName('d'+IntToStr(i)).AsInteger;
        xs[5,i]:=ADOQuery1.FieldByName('e'+IntToStr(i)).AsInteger;
        xs[6,i]:=ADOQuery1.FieldByName('f'+IntToStr(i)).AsInteger;
        xs[7,i]:=ADOQuery1.FieldByName('g'+IntToStr(i)).AsInteger;
        xs[8,i]:=ADOQuery1.FieldByName('h'+IntToStr(i)).AsInteger;
      end;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT * From 公式1');
  ADOQuery1.Open;
  ADOQuery1.First;
  Gauge1.MaxValue:=ADOQuery1.RecordCount;
  While not ADOQuery1.Eof  do //记录数100W左右
        begin
          Gauge1.Progress:=ADOQuery1.RecNo;
          StatusBar1.Panels[2].Text:=' 计算中......';
          application.ProcessMessages;
          pd:=xs[1,ADOQuery1.FieldByName('i1').AsInteger]+xs[2,ADOQuery1.FieldByName('i2').AsInteger]+xs[3,ADOQuery1.FieldByName('i3').AsInteger]+xs[4,ADOQuery1.FieldByName('i4').AsInteger]+xs[5,ADOQuery1.FieldByName('i5').AsInteger]+xs[6,ADOQuery1.FieldByName('i6').AsInteger]+xs[7,ADOQuery1.FieldByName('i7').AsInteger]+xs[8,ADOQuery1.FieldByName('i8').AsInteger];
          pd:=pd mod 2;
          a[pd]:=a[pd]+1;
          ADOQuery1.Next;
        end;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  StatusBar1.Panels[2].Text:=' 计算已完成.';
  application.ProcessMessages;
  for i:=0 to 0 do
      begin
        for j:=i+1 to 1 do
            begin
              if a[i]<a[j] then
                 begin
                   pd:=a[j];
                   a[j]:=a[i];
                   a[i]:=pd;
                   pd:=b[j];
                   b[j]:=b[i];
                   b[i]:=pd;
                 end;
            end;
      end;
  lla1.Caption:='';
  j:=0;
  For i:=0 to 1 do
      begin
        if b[i]=0 then
           begin
             lla1.Caption:=lla1.Caption+'-'+IntToStr(a[i])+'次  ';
           end
        else
           begin
             lla1.Caption:=lla1.Caption+'-'+IntToStr(a[i])+'次  ';
           end;
        if i=0 then
           begin
             lla1.Caption:=lla1.Caption+' /   ';
           end;
        j:=j+a[i];
      end;
  lla1.Caption:=lla1.Caption+'  共'+IntToStr(j)+'次';
  for i:=0 to 0 do
      begin
        if a[i]<>0 then
           begin
             for j:=1 to 49 do
                 begin
                   ADOQuery1.Close;
                   ADOQuery1.SQL.Clear;
                   ADOQuery1.SQL.Add('SELECT * From 属性表 where 号码='+IntToStr(j));
                   ADOQuery1.Open;
                   if b[i]=ADOQuery1.FieldByName('CA').AsInteger then
                      begin
                        TCheckBox(FindComponent('CheckBox'+IntToStr(j))).Checked:=True;
                      end
                   else
                      begin
                        TCheckBox(FindComponent('CheckBox'+IntToStr(j))).Checked:=false;
                      end;
                   ADOQuery1.Close;
                   ADOQuery1.SQL.Clear;
                 end;
           end;
      end;
  application.ProcessMessages;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT * From 结果 where 序号='+no.Caption);
  ADOQuery1.Open;
  ADOQuery1.Edit;
  For i:=1 to 49 do
      begin
        ADOQuery1.FieldByName('i'+IntToStr(i)).AsString:=BoolToStr(TCheckBox(FindComponent('CheckBox'+IntToStr(i))).Checked);
      end;
  ADOQuery1.Post;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  openallbut();
end;