那位帮我看看,我是个新人。找出对应的日期时间生成随机数在   插入到另外一张表。
高人看看,总是有问不知道哪里谢谢大侠们帮帮。
var
  i,j,z,y,a,r,e:string;
  rq1,rq2,sj1,sj2,fh:string;
  sTemp:string;
  Aqry:Tadoquery;begin                         //数据连接
  Aqry:=TADOQuery.Create(nil);
  Aqry.Connection:=ADOConnection1;
  rq1:=FormatDateTime('yyyy-MM-dd',DateTimePicker1.Date);
  rq2:=FormatDateTime('yyyy-MM-dd',DateTimePicker2.Date);
  sj1:= MaskEdit1.Text;
  sj2:= MaskEdit2.Text;   if sj1= '' then
      if  sj2 ='' then
     begin
        showmessage('时间不能为空');
        Exit;
     end;
     while not ADOQuery1.Eof do
 begin      with   Aqry DO
     begin
       Aqry.SQL.Clear;
       Aqry.SQL.Text := 'Select * from  Att  '
                      +' where rdate  between '''+rq1+'''  and '''+rq2+''' '
                      +' and rtime  between '''+sj1+''' and '''+sj2+''' ';       Aqry.Open;
        if  Aqry.RecordCount < 1   then
      begin
        showmessage('日期范围,没有可以更新的数据');
        Exit;
      end
      else
       begin
       Randomize;  //Randomize随机函数数
       sTemp:=Format('%.2d',[1+Random(30)]);      i:=Aqry.fieldbyname('CardSerial').AsString;
      j:=Aqry.fieldbyname('RDate').AsString;
      z:='08'+':'+sTemp;
      y:=Aqry.fieldbyname('PersonnelID').AsString;
      a:=Aqry.fieldbyname('MachineNo').AsString;
      r:=Aqry.fieldbyname('Mark').AsString;
      e:=Aqry.fieldbyname('RecordTime').AsString;        Aqry.Close;
        Aqry.SQL.Clear;
         Aqry.SQL.text:='INSERT Att_AA (CardSerial, RDate, RTime,PersonnelID,CardNo,MachineNo,Mark,RecordTime)'
                         +' values('''+i+''','''+j+''','''+z+''','+y+',''000000'','+a+','+r+','''+e+''')';
         Aqry.ExecSQL;
        ADOQuery1.Next;
     end;    end;   end;

解决方案 »

  1.   

    while not ADOQuery1.Eof do
     begin  with Aqry DO
      begin
      Aqry.SQL.Clear;
      Aqry.SQL.Text := 'Select * from Att '
    Aqry和ADOQuery1的作用要分清楚啊,仔细清理下……后面有Aqry.XXX,就不要这个套了with Aqry do 
      

  2.   

    Aqry.Close;把这句去掉 ,你都关闭了 ,还怎么clear 、ExecSQL ?
      

  3.   

    看起来很乱~循环插入,数据多的话,用事务啊,以免出错。
    try
        ADOconnection1.Connected := True;
        ADOconnection1.BeginTrans;  //开始执行事务
        for intCount := 1 to 10 do
        begin
          ADOquery1.SQL.Clear;
          strSQL := Format('insert into test values(%d, %d, %d)', [intCount, intCount+1, intCount+2]);
          ADOquery1.SQL.Add(strSQL);
          ADOquery1.ExecSQL;
        end;
        ADOconnection1.CommitTrans; //提交事务
      except
        ADOconnection1.RollbackTrans; //回转事务(撤销)
        ShowMessage('错误!');
      end;
      

  4.   

    INSERT into Att_AA 
      

  5.   

    只插入了一条数据就报错了,那位高人指教一下
    cannot pirfrom thin operation on a closed dataset