寻求解决方案!单机版程序,在每天的合并中的问题!
做了个图书管理系统,单机版的。每天有三台机子,三千多条记录要加进来。因为条码是唯一的,
但在合并的时候又怕相同的条码记录合并进来,比较麻烦!寻求解决办法!现库中已经存在了这样的问题!比如说000001,就有两个
我这样写了一句,一运行就死机?帮忙看看!
procedure TFrm_Main.Button9Click(Sender: TObject);
var
  tmp_aa:String;
begin
  with Frm_data.ADOQuery do
    begin
      Close;
      SQL.Clear;
      SQl.Add('Select * from book_info');
      Open;
      while not eof do
        begin
          tmp_aa:=fieldByName('book_id').AsString;
          with Frm_data.ADOQuery do
            begin
              Close;
              SQL.Clear;
              SQL.Add('Select * from book_info where book_id=:t1');
              Parameters[0].Value:=tmp_aa;
              Open;
              if RecordCount>1 then
                begin
                  Memo1.Lines.Add(tmp_aa);
                end;
              next;
            end;
        end;
    end;
end;应该怎么写!

解决方案 »

  1.   

    当然要死了,你在循环中乱写了。最好用两个Query,这样才不至于出错。另外不要滥用with,自己会被自己搞定的。
    begin
          Frm_data.ADOQuery.Close;
          Frm_data.ADOQuery.SQL.Clear;
          Frm_data.ADOQuery.SQl.Add('Select * from book_info');
          Frm_data.ADOQuery.Open;
          while not Frm_data.ADOQuery.eof do
            begin
              tmp_aa:=fieldByName('book_id').AsString;
                  Frm_data.ADOQuery1.Close;
                  Frm_data.ADOQuery1.SQL.Clear;
                  Frm_data.ADOQuery1.SQL.Add('Select * from book_info where book_id=:t1');
                  Frm_data.ADOQuery1.Parameters[0].Value:=tmp_aa;
                  Frm_data.ADOQuery1.Open;
                  if Frm_data.ADOQuery1.RecordCount>1 then
                    begin
                      Memo1.Lines.Add(tmp_aa);
                    end;
                  Frm_data.ADOQuery.next;
                end;
    end;
      

  2.   

    begin
          Frm_data.ADOQuery.Close;
          Frm_data.ADOQuery.SQL.Clear;
          Frm_data.ADOQuery.SQl.Add('Select count(*) as count from book_info');
          Frm_data.ADOQuery.Open;
          Frm_data.ADOQuery1.Close;
          Frm_data.ADOQuery1.SQL.Clear;
          Frm_data.ADOQuery1.SQL.Add('Select * from book_info where book_id=:t1');
          while not Frm_data.ADOQuery.eof do
            begin
              tmp_aa:=fieldByName('book_id').AsString;
                  Frm_data.ADOQuery1.Close;
                  Frm_data.ADOQuery1.Parameters[0].Value:=tmp_aa;
                  Frm_data.ADOQuery1.Open;
                  if Frm_data.ADOQuery1.FieldByname('count').asInteger>0 then
                    begin
                      Memo1.Lines.Add(tmp_aa);
                    end;
                  Frm_data.ADOQuery.next;
                end;
    end;
      

  3.   

    这样看看
          i , j : Integer ;
          Frm_data.ADOQuery.Close;
          Frm_data.ADOQuery.SQL.Clear;
          Frm_data.ADOQuery.SQl.Add('Select * from book_info');
          Frm_data.ADOQuery.Open;
          i := 0 ;          
          while not Frm_data.ADOQuery1.eof do
            begin
              tmp_aa:=fieldByName('book_id').AsString;
              i := i + 1 ;  
              Close;
              SQL.Clear;
              SQL.Add('Select * from book_info where book_id=:t1');
              Parameters[0].Value:=tmp_aa;
              Open;
              if RecordCount>1 then
              begin
                Memo1.Lines.Add(tmp_aa);
              end;
              Close ;
              SQl.Add('Select * from book_info') ;
              Open ;
              For j := 0 to i do Next ;
              //Frm_data.ADOQuery.next; //这样总是第二条纪录,是不是 ?
           end;
      

  4.   

    这样看看 ,代码不完整,补充
          i , j : Integer ;
          Frm_data.ADOQuery.Close;
          Frm_data.ADOQuery.SQL.Clear;
          Frm_data.ADOQuery.SQl.Add('Select * from book_info');
          Frm_data.ADOQuery.Open;
          i := 0 ;          
          while not Frm_data.ADOQuery1.eof do
            begin
              with Frm_data.ADOQuery1 do
              Begin
                tmp_aa:=fieldByName('book_id').AsString;
                i := i + 1 ;  
                Close;
                SQL.Clear;
                SQL.Add('Select * from book_info where book_id=:t1');
                Parameters[0].Value:=tmp_aa;
                Open;
                if RecordCount>1 then
                begin
                  Memo1.Lines.Add(tmp_aa);
                end;
                Close ;
                SQl.Add('Select * from book_info') ;
                Open ;
                For j := 0 to i do Next ;
                //Frm_data.ADOQuery.next; //这样总是第二条纪录,是不是 ?
              End;     
           end;
      

  5.   

    to hanly2008(郁闷人) :因为单机版的应用程序,所以选用了access?