问了半天,还没解决,有人说用线程,可有问题,不要用application.process..,这个没用,有好方法吗,谢谢大家了,讲详细点,我菜哦
 var
   Form1: TForm1;
   Q1: TThreadQuery; { 线程查询对象1 }  implementation  {$R *.DFM}
  { TThreadQuery类的实现 }  { 连接数据查询组件和数据感知组件}
  procedure TThreadQuery.ConnectDataSource;
  begin
   FDataSource.DataSet := FQuery;{ 该方法在查询结束后才调用 }
  end;  procedure TThreadQuery.Execute;{ 执行线程的方法 }
  begin
   try
   FQuery.Open; { 打开查询 }
   Synchronize(ConnectDataSource);{ 线程同步 }
   except
   ShowMessage(‘Query Error‘); { 线程异常 }
   end;
  end;  { 线程查询类的构造器 }
  constructor TThreadQuery.Create(Query: ToraQuery; DataSource: ToraDataSource);
  begin
   FQuery := Query;
   FDataSource := DataSource;
   inherited Create(True);
   FreeOnTerminate := False;
  end;  { 创建窗体时创建线程查询对象 }
  procedure TForm1.FormCreate(Sender: TObject);
  begin
   Q1 := TThreadQuery.Create(Query1, DataSource1);
  end;  { 销毁窗体时销毁线程查询对象 }
  procedure TForm1.FormDestroy(Sender: TObject);
  begin
   Q1.Terminate; { 销毁之前终止线程执行 }
   Q1.Destroy;
  end;  { 开始线程、继续执行线程、挂起线程 }
  procedure TForm1.BtnGoPauseClick(Sender: TObject);
  begin
   if Q1.Suspended then Q1.Resume else Q1.Suspend;
  end;  end.
上面是看人家的程序,还是中断不了,唉??????挂起时候说句柄不能访问?
救命

解决方案 »

  1.   

    转贴
    1.这个语句要为select
    2.adodataset设为异步执行方式!
    adodataset1.ExecuteOptions:= [eoAsyncFetchNonBlocking]
    3。在
    procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
      Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
    begin
      if ...then //用一变量表示用户是否要求停止
        dataset.close;
    end;
    对上面的一点补充,
    上面的语句虽然可以停止查询,但是查询到的结果也没了,
    下面用一个变通的方法可以保存查询结果
    增加一个adodataset2,
    procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
      Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
    begin
      if ...then //用一变量表示用户是否要求停止
      begin  
        adodataset2.recordset:=dataset.recordset;//保存查询结果
        dataset.close; //停止查询
      end;
    end;
      

  2.   

    谢谢你哦,ADO我知道,但我的是oraquery的控件,这个有方法吗?
      

  3.   

    这不是程序设计问题,应该是你sql有问题或索引问题,应该dbgrid一次只显示少量数据,我记得oraquery应该是一次25条吧,你应该看看sql或索引!