请兄弟给提示,最好是有代码,我百思不得其解。
解决方案 »
- Project Project1.exe raise exception class EOleSysError with message '没有注册类别'
- 如何自动网页提交
- 关于 delphi自带的TcpServer和indy的idTcpServer
- 关于sql存储过程的问题
- 在程序中创建FASTREPORT报表,怎么总是出错?
- 800分求一个解决方案....(WAV播放)
- OLE嵌入FrontPage对象的问题?请大侠们帮忙
- Delphi XE2小问题:为什么木有System.pas、StrUtils.pas等源代码!!!
- 大虾们帮帮忙呀!(一个简单的问题)
- 关于stringgrid的 问题 ,急~!!
- Treeview 更新问题
- 瑞星防火墙阻止自动发送邮件怎么办
var
array_ : array[1..3] of String;
i: integer;
begin
DBGrid1.DataSource := DataSource1;
DataSource1.DataSet := ClientDataSet1;
for i:=0 to 3 do
Begin
array_[i]:='1';
end;
with ClientDataSet1 do
begin
with FieldDefs.AddFieldDef do
begin
DataType:= ftString;
Name := 'col1';
Size := 100;
end;
CreateDataSet;
for i:=0 to High(array_) do
Begin
Append;
FieldByName( 'col1' ).AsString:=array_[i] ;
Post;
end;
end;
end;//显示到DBGRID,,,
var
i,j,ii,jj,rec,iii1,iii2,k,pd,ccpd,gsh,ff,mm: integer;
dstr,str,str1: String;
begin
closeallbut();
For ii:=1 to 64 do
begin
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('SELECT * From 验证状态表 where 序号='+IntToStr(ii));
ADOQuery4.Open;
if ADOQuery4.FieldByName('lock').AsInteger=0 then
begin
ADOQuery4.Edit;
ADOQuery4.FieldByName('lock').AsInteger:=1;
ADOQuery4.Post;
iii1:=ADOQuery4.FieldByName('ii1').AsInteger;
iii2:=ADOQuery4.FieldByName('序号').AsInteger;
Gauge1.MaxValue:=StrToInt(Edit2.Text);
For i:=StrToInt(Edit1.Text) to StrToInt(Edit2.Text) do
begin
Gauge1.Progress:=i;
StatusBar1.Panels[2].Text:=' 信息提取中......'+Edit2.Text+'/'+IntToStr(i);
application.ProcessMessages;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * From 信息 where 序号='+IntToStr(i));
ADOQuery1.Open;
For k:=1 to 24 do
begin
pd1[i,k]:=ADOQuery1.FieldByName('pd'+IntToStr(k)).AsInteger;
end;
for j:=1 to 8 do
begin
if pdstop='stop' then
begin
ADOQuery4.Edit;
ADOQuery4.FieldByName('lock').AsInteger:=0;
ADOQuery4.Post;
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
openallbut();
exit;
end;
xs[i,j,0]:=0;
xs[i,1,j]:=ADOQuery1.FieldByName('a'+IntToStr(j)).AsInteger;
xs[i,2,j]:=ADOQuery1.FieldByName('b'+IntToStr(j)).AsInteger;
xs[i,3,j]:=ADOQuery1.FieldByName('c'+IntToStr(j)).AsInteger;
xs[i,4,j]:=ADOQuery1.FieldByName('d'+IntToStr(j)).AsInteger;
xs[i,5,j]:=ADOQuery1.FieldByName('e'+IntToStr(j)).AsInteger;
xs[i,6,j]:=ADOQuery1.FieldByName('f'+IntToStr(j)).AsInteger;
xs[i,7,j]:=ADOQuery1.FieldByName('g'+IntToStr(j)).AsInteger;
xs[i,8,j]:=ADOQuery1.FieldByName('h'+IntToStr(j)).AsInteger;
end;
end;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
StatusBar1.Panels[2].Text:=' 信息提取完毕!';
application.ProcessMessages;
begin
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('SELECT * From 验证状态表 where 序号='+IntToStr(ii));
ADOQuery4.Open;
ADOQuery4.Edit;
ADOQuery4.FieldByName('ii1').AsInteger:=gsh;
ADOQuery4.Post;
rec:=ADOQuery4.FieldByName('no').AsInteger;
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
ADOQuery5.SQL.Add('SELECT * From 全部公式'+IntToStr(gsh)+' order by 序号');
ADOQuery5.Open;
ADOQuery5.RecNo:=rec;
Gauge1.MaxValue:=ADOQuery5.RecordCount;
Gauge1.Progress:=0;
dstr:=TimeToStr(Now);
For i:=rec to Gauge1.MaxValue do
begin
if pdstop='stop' then
begin
ADOQuery4.Edit;
ADOQuery4.FieldByName('lock').AsInteger:=0;
ADOQuery4.Post;
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
openallbut();
exit;
end;
Gauge1.Progress:=i;
StatusBar1.Panels[2].Text:=' 公式提取中(当前64/'+IntToStr(ii)+'-'+IntToStr(iii2*64)+'/'+IntTostr(gsh)+')......, 剩余'+IntToStr(iii2*64-gsh)+'个表,需时:'+str1;
application.ProcessMessages;
bii[i,1]:=ADOQuery5.FieldByName('i1').AsInteger;
bii[i,2]:=ADOQuery5.FieldByName('i2').AsInteger;
bii[i,3]:=ADOQuery5.FieldByName('i3').AsInteger;
bii[i,4]:=ADOQuery5.FieldByName('i4').AsInteger;
bii[i,5]:=ADOQuery5.FieldByName('i5').AsInteger;
bii[i,6]:=ADOQuery5.FieldByName('i6').AsInteger;
bii[i,7]:=ADOQuery5.FieldByName('i7').AsInteger;
bii[i,8]:=ADOQuery5.FieldByName('i8').AsInteger;
ADOQuery5.Next;
end;
For i:=rec to Gauge1.MaxValue do
begin
For j:=0 to 286 do
begin
cwcs[i,j]:=0;
end;
end;
For i:=rec to Gauge1.MaxValue do
begin
if pdstop='stop' then
begin
ADOQuery4.Edit;
ADOQuery4.FieldByName('lock').AsInteger:=0;
ADOQuery4.Post;
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
openallbut();
exit;
end;
Gauge1.Progress:=i;
StatusBar1.Panels[2].Text:=' 公式运算中(当前64/'+IntToStr(ii)+'-'+IntToStr(iii2*64)+'/'+IntTostr(gsh)+')......, 剩余'+IntToStr(iii2*64-gsh)+'个表,需时:'+str1;
application.ProcessMessages;
ccpd:=0;
For j:=StrToInt(Edit1.Text) to (StrToInt(Edit2.Text)-1) do
begin
pd:=xs[j,1,bii[i,1]]+xs[j,2,bii[i,2]]+xs[j,3,bii[i,3]]+xs[j,4,bii[i,4]]+xs[j,5,bii[i,5]]+xs[j,6,bii[i,6]]+xs[j,7,bii[i,7]]+xs[j,8,bii[i,8]];
For k:=1 to 16 do
begin
if pd mod pdzz[k]<>pd1[j+1,k] then
begin
For jj:=0 to ccpd do
begin
cwcs[i,k+(10-jj)*26]:=cwcs[i,k+(10-jj)*26]+1;
end;
end;
end;
For k:=17 to 24 do
begin
if pd mod pdzz[k]=pd1[j+1,k] then
begin
For jj:=0 to ccpd do
begin
cwcs[i,k+(10-jj)*26]:=cwcs[i,k+(10-jj)*26]+1;
end;
end;
end;
if (pd mod 10<>xs[j+1,1,3]) and (pd mod 10<>xs[j+1,2,3]) and (pd mod 10<>xs[j+1,3,3]) and (pd mod 10<>xs[j+1,4,3]) and (pd mod 10<>xs[j+1,5,3]) and (pd mod 10<>xs[j+1,6,3]) then
begin
For jj:=0 to ccpd do
begin
cwcs[i,25+(10-jj)*26]:=cwcs[i,25+(10-jj)*26]+1;
end;
end;
if (pd mod 12<>xs[j+1,1,6]) and (pd mod 12<>xs[j+1,2,6]) and (pd mod 12<>xs[j+1,3,6]) and (pd mod 12<>xs[j+1,4,6]) and (pd mod 12<>xs[j+1,5,6]) and (pd mod 12<>xs[j+1,6,6]) then
begin
For jj:=0 to ccpd do
begin
cwcs[i,26+(10-jj)*26]:=cwcs[i,26+(10-jj)*26]+1;
end;
end;
ccpd:=ccpd+1;
end;
cwcs[i,0]:=xs[StrToInt(Edit2.Text),1,bii[i,1]]+xs[StrToInt(Edit2.Text),2,bii[i,2]]+xs[StrToInt(Edit2.Text),3,bii[i,3]]+xs[StrToInt(Edit2.Text),4,bii[i,4]]+xs[StrToInt(Edit2.Text),5,bii[i,5]]+xs[StrToInt(Edit2.Text),6,bii[i,6]]+xs[StrToInt(Edit2.Text),7,bii[i,7]]+xs[StrToInt(Edit2.Text),8,bii[i,8]];
end;
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('SELECT * From 验证状态表 where 序号='+IntToStr(ii));
ADOQuery4.Open;
For i:=rec to Gauge1.MaxValue do
begin
Gauge1.Progress:=i;
StatusBar1.Panels[2].Text:=' 结果保存中(当前64/'+IntToStr(ii)+'-'+IntToStr(iii2*64)+'/'+IntTostr(gsh)+')......, 剩余'+IntToStr(iii2*64-gsh)+'个表,需时:'+str1;
application.ProcessMessages;
ADOQuery4.Edit;
ADOQuery4.FieldByName('no').AsInteger:=ADOQuery5.RecNo;
ADOQuery4.Post;
if pdstop='stop' then
begin
ADOQuery4.Edit;
ADOQuery4.FieldByName('lock').AsInteger:=0;
ADOQuery4.Post;
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
openallbut();
exit;
end;
ADOQuery5.Edit;
[color=#FF9900]For j:=0 to 286 do
begin
DBGrid1.fields[j+1].AsInteger:=cwcs[i,j];
end;
ADOQuery5.Next;//这里保存很慢,4千多条记录要一分多钟,我的电脑是E6550(超到3.15G/4G的内存)应该不会这么慢吧!
end;[/color]
str:=DateTimeToStr(Now()-StrtoDateTime(dstr));
ff:=MinuteOf(StrtoDateTime(str));
mm:=SecondOf(StrtoDateTime(str));
str1:=IntToStr((ff*60+mm)*((iii2*64)-gsh) div 3600)+'小时'+IntToStr(((ff*60+mm)*((iii2*64)-gsh) mod 3600) div 60)+'分'+IntToStr(((ff*60+mm)*((iii2*64)-gsh) mod 3600) mod 60)+'秒'+'('+IntToStr(ff)+'分'+IntToStr(mm)+'秒)!';
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('SELECT * From 验证状态表 where 序号='+IntToStr(ii));
ADOQuery4.Open;
ADOQuery4.Edit;
ADOQuery4.FieldByName('no').AsInteger:=1;
ADOQuery4.Post;
sum.Caption:='1';
end;
ADOQuery4.Edit;
ADOQuery4.FieldByName('lock').AsInteger:=10;
ADOQuery4.Post;
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
end;
end;
time:=0;
Timer1.Enabled:=True;
closeallbut();
StatusBar1.Panels[2].Text:=' 请等待......!程序会自动运行!';
application.ProcessMessages;
end;
For i:=rec to Gauge1.MaxValue do
begin
Gauge1.Progress:=i;
StatusBar1.Panels[2].Text:=' 结果保存中(当前64/'+IntToStr(ii)+'-'+IntToStr(iii2*64)+'/'+IntTostr(gsh)+')......, 剩余'+IntToStr(iii2*64-gsh)+'个表,需时:'+str1;
application.ProcessMessages;
ADOQuery4.Edit;
ADOQuery4.FieldByName('no').AsInteger:=ADOQuery5.RecNo;
ADOQuery4.Post;
if pdstop='stop' then
begin
ADOQuery4.Edit;
ADOQuery4.FieldByName('lock').AsInteger:=0;
ADOQuery4.Post;
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
openallbut();
exit;
end;
ADOQuery5.Edit;
For j:=0 to 286 do
begin
DBGrid1.fields[j+1].AsInteger:=cwcs[i,j];
end;
ADOQuery5.Next;这里保存很慢,4千多条记录要一分多钟,我的电脑是E6550(超到3.15G/4G的内存)应该不会这么慢吧!
end;
str:=DateTimeToStr(Now()-StrtoDateTime(dstr));
ff:=MinuteOf(StrtoDateTime(str));
mm:=SecondOf(StrtoDateTime(str));
str1:=IntToStr((ff*60+mm)*((iii2*64)-gsh) div 3600)+'小时'+IntToStr(((ff*60+mm)*((iii2*64)-gsh) mod 3600) div 60)+'分'+IntToStr(((ff*60+mm)*((iii2*64)-gsh) mod 3600) mod 60)+'秒'+'('+IntToStr(ff)+'分'+IntToStr(mm)+'秒)!';
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('SELECT * From 验证状态表 where 序号='+IntToStr(ii));
ADOQuery4.Open;
ADOQuery4.Edit;
ADOQuery4.FieldByName('no').AsInteger:=1;
ADOQuery4.Post;
sum.Caption:='1';
end;
ADOQuery4.Edit;
ADOQuery4.FieldByName('lock').AsInteger:=10;
ADOQuery4.Post;
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
end;
end;
time:=0;
Timer1.Enabled:=True;
closeallbut();
StatusBar1.Panels[2].Text:=' 请等待......!程序会自动运行!';
application.ProcessMessages;
end;
For i:=rec to 5000 do
begin
ADOQuery4.Edit;
ADOQuery4.FieldByName( 'no ').AsInteger:=ADOQuery5.RecNo;
ADOQuery4.Post;
if pdstop= 'stop ' then
begin
ADOQuery4.Edit;
ADOQuery4.FieldByName( 'lock ').AsInteger:=0;
ADOQuery4.Post;
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
openallbut();
exit;
end;
ADOQuery5.Edit;
For j:=0 to 286 do
begin
DBGrid1.fields[j+1].AsInteger:=cwcs[i,j];
end;
ADOQuery5.Next; //这里保存很慢,4千多条记录要一分多钟,我的电脑是E6550(超到3.15G/4G的内存)应该不会这么慢吧!
end; 就是要改这里,怎样先把数组全部赋给DBGrid,再一次把结果保存到表中,现在我只能一条一条的赋,帮帮忙啊!