ADO_Q:=TADOQuery.Create(nil);
  ADO_Q.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ExtractFilePath(ParamStr(0))+'db1.mdb'+';Persist Security Info=False';
  ADO_Q.SQL.Clear;
  ADO_Q.SQL.Add('delete *from Alarm');
  ADO_Q.ExecSQL;  //下面是线程
  QueryThread := TQueryThread.Create(True);
  QueryThread.Resume;  procedure TQueryThread.Execute;
  begin
  FreeOnTerminate := True;
  try
  AdoQuery.Active := True;
  AdoConn1.Open;
  AdoQuery1.SQL.text:='insert into AA(A_1,A_2) value('11','2')';
  AdoQuery1.ExecSQL;
  except
  end;
  end;为什么delete 还没有delete 完所有的数据,就已经insert了呀??该怎么办?

解决方案 »

  1.   

    补充ADO_Q.SQL.Add('delete *from Alarm'); 这段把后面线程新insert进来的数据也delete了
      

  2.   

    同一个水池,两个和尚,A和尚被分派去放水,B和尚被分派去挑水,他们同时工作,本来应该是当A和尚把水池原有的水放完,再让B和尚把挑来的水倒进池子里,当A还没有放完,B就挑水来直接往里面倒进去了...这就是你现在的问题。你想该如何解决?
      

  3.   

    那主线程不是要来了repeat....又假死,不得行
      

  4.   

      
    看出一个问题: delete写法不对,应该改为Delete from Alarm
      

  5.   

    你的ADO_Q是用的ConnectionString自己开的一个连接,和AdoQuery不在同一个连接里试试把两个query共用同一个数据库连接,这样应该不会不同步
      

  6.   

     delete * from AA是错误的SQL语法.
      

  7.   

    应该写成 delete  from AA 
      

  8.   

    此问题无人回答
    delete * from AA 在TADOQUERY中通过.delete  from AA 中from 是可选字段,应该delete AA
      

  9.   

    最简单的,可以设置个公共变量isOver,初始为false,删除完设置为true,线程中判断为true后执行。取和设公共变量时需要同步
      

  10.   


      AdoConn1.Open; 
      //加入判断AdoConn1记录数的语句,先看是否是空表,若不是则延迟一估时间再执行
      AdoQuery1.SQL.text:='insert into AA(A_1,A_2) value('11','2')'; 
      

  11.   

    'delete * from Alarm'   *from 没有空格
      

  12.   

    delete * from Alarm这种语句能运行?
      

  13.   

    if ADO_Q.IsEmpty then            //这样应该可以吧 
      begin 
        //下面是线程 
        QueryThread := TQueryThread.Create(True); 
      QueryThread.Resume; 
      end; 这里不会丢数据么?? with ADO_Q do 
     begin 
       sql.clear; 
       sql.add('SELECT * FROM Alarm'); 
       open; 
     end;while (1=1) do
    begin
    if ADO_Q.IsEmpty then  
      begin 
        //下面是线程 
       QueryThread := TQueryThread.Create(True); 
      QueryThread.Resume;
      Break; 
      end; 
    end;
      

  14.   

    不是線程的問題。
    建議樓主在檢查一下,是不是哪里誤解了。
    delete * from Alarm 語法錯誤,不會得到執行
      

  15.   

    完全是两个表嘛.一个是 aa ,Alarm'
      

  16.   


    if ADO_Q.IsEmpty then            //这样应该可以吧 
      begin 
        QueryThread := TQueryThread.Create(True); 
      QueryThread.Resume; 
      end; 
    这样肯定是不行的,可能线程是不运行的.引用>>delete * from Alarm 語法錯誤,不會得到執行
    这个完全没有问题.你们可以Try看看while (1=1) do 
    begin 
    if ADO_Q.IsEmpty then  
      begin 
        //下面是线程 
      QueryThread := TQueryThread.Create(True); 
      QueryThread.Resume; 
      Break; 
      end; 
    end;
    这条语句是可以的,就是变成一个假死的循环.