这是小弟的代码:
procedure TForm1.Button2Click(Sender: TObject);
       var str,a,b:string;
begin
        if query1.active then
    begin
      str:='确实要删除用户'+ Trim(a)+ '?';
      while (Application.messagebox(pchar(str),'删除',MB_YESNO)=ID_YES) and (not (query1.Eof)) do
        begin
           query1.First;
           a:=query1.fieldbyname('recmac').AsString;
           b:=query1.fieldbyname('spname').AsString;
           query2.Close;
           query2.SQL.Clear;
           query2.SQL.Add('insert into canceltb(command,machine,canceltime,executed,spname)');
           query2.SQL.Add('values (:a,:b,:c,:d,:e)');
           query2.ParamByName('a').AsString:='手动';
           query2.ParamByName('b').AsString:=a;
           query2.ParamByName('c').AsString:=datetimetostr(now);
           query2.ParamByName('d').AsString:='1';
           query2.ParamByName('e').AsString:=b;
           query2.ExecSQL;
           query1.close;
           query1.sql.clear;
           query1.sql.add('delete from splogin where recmac=:a');
           query1.ParamByName('a').AsString:=a;
           query1.ExecSQL;
         end;
    end;
    if  query1.Eof then
      button2.Enabled:=false;
end;
小弟的需求是把查找出来的表格中的记录删除并将所找出来记录的recmac和spname这两个字段的值写进新的表中(query2),现在记录可以删除,但是每次只能写一条记录进去希望能够帮我解决!!!!  

解决方案 »

  1.   

    procedure TForm1.Button2Click(Sender: TObject);
           var str,a,b:string;
    begin
        if query1.active then
        begin
          str:='确实要删除用户'+ Trim(a)+ '?';
          if(Application.messagebox(pchar(str),'删除',MB_YESNO)=ID_YES) then
          while not (query1.Eof) do
            begin
               query1.First;
               a:=query1.fieldbyname('recmac').AsString;
               b:=query1.fieldbyname('spname').AsString;
               query2.Close;
               query2.SQL.Clear;
               query2.SQL.Add('insert into canceltb(command,machine,canceltime,executed,spname)');
               query2.SQL.Add('values (:a,:b,:c,:d,:e)');
               query2.ParamByName('a').AsString:='手动';
               query2.ParamByName('b').AsString:=a;
               query2.ParamByName('c').AsString:=datetimetostr(now);
               query2.ParamByName('d').AsString:='1';
               query2.ParamByName('e').AsString:=b;
               query2.ExecSQL;
               qyery1.next;
            end;
            query1.close;
            query1.sql.clear;
            query1.sql.add('delete from splogin where recmac=:a');
            query1.ParamByName('a').AsString:=a;
            query1.ExecSQL;
        end;
        button2.Enabled:=false;
    end;
      

  2.   

    把  query1.First; 去掉
      

  3.   

    当执行:   query1.close;
               query1.sql.clear;
               query1.sql.add('delete from splogin where recmac=:a');
               query1.ParamByName('a').AsString:=a;
               query1.ExecSQL;///之后query1所连接的数据是什么???当第二次循环时:
               query1.First;
               a:=query1.fieldbyname('recmac').AsString;
               b:=query1.fieldbyname('spname').AsString;
    //////////////////////
      

  4.   

    if query1.active then
        begin
          str:='确实要删除用户'+ Trim(a)+ '?';
          if Application.messagebox(pchar(str),'删除',MB_YESNO)=ID_YES then
            begin
              query1.First;
              while not (query1.eof) do
                begin  
                  a:=query1.fieldbyname('recmac').AsString;
                  b:=query1.fieldbyname('spname').AsString;
                  
                  with query2 do 
                    begin
                      Close;
                      SQL.Clear;
                      SQL.Add('insert into canceltb(command,machine,canceltime,executed,spname)');
                      SQL.Add('values (:a,:b,:c,:d,:e)');
                      Parameters.ParamByName('a').AsString:='手动';
                      Parameters.ParamByName('b').AsString:=a;
                      Parameters.ParamByName('c').AsString:=datetimetostr(now);
                      Parameters.ParamByName('d').AsString:='1';
                      Parameters.ParamByName('e').AsString:=b;
                      ExecSQL;
                    end;//query2
                  
                  with query1 do
                    begin
                      close;
                      sql.clear;
                      sql.add('delete from splogin where recmac=:a');
                      ParamByName('a').AsString:=a;
                      ExecSQL;
                      
                      close;
                      sql.clear;
                      sql.add('select * from splogin');
                      open;
                    end;//query1
                end;//end (query1.eof)
            end;
        end;
    ///试试看.....