请兄弟给提示,最好是有代码,我百思不得其解。

解决方案 »

  1.   

    procedure TForm1.Button16Click(Sender: TObject);
    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,,,
      

  2.   

    procedure TForm1.Button5Click(Sender: TObject);
    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;
      

  3.   

    For gsh:=iii1 to iii2*64 do
                     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;
      

  4.   

    ADOQuery5.RecNo:=rec;
                       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;
      

  5.   

    ADOQuery5.RecNo:=rec;
                       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;
      

  6.   

                       ADOQuery5.RecNo:=rec; 
                       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,再一次把结果保存到表中,现在我只能一条一条的赋,帮帮忙啊!