因为记录量很大,处理很慢,请问高手们好的解决方法!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;
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;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货