我的实现方法是在每个线程中create adoconnection和adoquery这样不会影响主窗口的数据库处理。

解决方案 »

  1.   

    如果你只是要求在比较费时的查询里面能够做到提交到后台处理,其实不必用线程,可以使用ADO的异步处理
    设定TADODataset的ExecuteOptions = [eoAsyncFetchNonBlocking]。
    在异步处理中,ADO会以OnFetchProgrss事件来通知应用程序ADO还在处理数据当中,并且以OnFetchComplete事件来通知应用程序ADO已经处理完毕,你可以响应这两个事件来完成异步提交。如果你一定要在多线程里面处理,要注意以下几点:1、每个线程的Create方法里面建立一个连接,而且一定要在Create方法里面做,不能在Execute方法里面做,会蓝屏
    2、其余的就可以放到Execute里面了,我做过的没问题。
    3、要注意多线程比较麻烦,而且同步问题要考虑,最好还是按照我开始所说的异步提交比较好一点
      

  2.   

    另外,使用多线程,最好看看Delphi5开发人员指南,要注意用Synchronize方法来更新主线程,这样主界面才会响应用户输入。
    BDE有个TSession,但是ADO没有,它使自己在处理Session的。一定要一个线程创建一个TADOConnection,切记,切记。