本帖最后由 gztiger 于 2011-03-11 08:07:42 编辑

解决方案 »

  1.   

    procedure TThreadQuery.Execute; { 执行线程的方法 }
    begin
      try
        CoInitialize(nil);//你应该是漏掉了这个
        FQuery.SQL.Text := form1.Memo1.Text;
    ......
        
      

  2.   

    {except
    ShowMessage('Query Error'); { 线程异常 }
    //end;  }
      except
        FQuery.Free;
      end;你把这个地方的Except去掉 看看会不会报错 感觉可能except引发异常后那个FQuery被free掉了
      

  3.   

      if Q1.Suspended then Q1.Resume else Q1.Suspend;//*报错!!!*
      if Q2.Suspended then Q2.Resume else Q2.Suspend;楼主以为。。Suspended 在resume线程执行完成后仍然是True????
    实际上是False所以resume完了后。。等线程结束了。。你仍然要继续resume而不是suspend。。
    看来你的基础有问题。。suspend是挂起正在执行的线程不是终止或结束线程
    你这里是处理线程挂起。。不是你想要的重启线程。。所以报错
      

  4.   

    在Execute里面加个循环
    while true do
    begin
      ...
      if terminated then 
        break
      else
        suspend;
    end;调用的时候,直接唤醒resume即可,有时suspended判定不准确的
      

  5.   

    Execute最后加入
    suspend;循环与否没所谓