您的位置:程序门 -> delphi -> 数据库相关



多线程问题,大家帮忙看看!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


多线程问题,大家帮忙看看!
发表于:2007-12-30 14:37:37 楼主
首先在u_thread定义线程类,
unit   u_thread;

interface

uses
    classes,db,   adodb;

type
    ttestthread   =   class(tthread)
    private
        {   private   declarations   }
        fadoquery:   tadoquery   ;
    protected
        procedure   EXECute;   override;
       
    public
        constructor   create(   suspended:   boolean;adoquery:   tadoquery);
    end;

implementation

{   ttestthread   }

constructor   ttestthread.create(   suspended:   boolean;adoquery:   tadoquery);
    begin
          inherited       create(suspended)   ;
        fadoquery:=adoquery;
        freeonterminate:=true;       //thread   执行完就自动删除
    end;

procedure   ttestthread.EXECute;
begin
    {   place   thread   code   here   }            
    fadoquery.open;
end;

end.

然后用ttestthread.create(false,adoquery1);调用   ,虽然没有问题,但是好像没有达到效果
程序总的结构是:
for   i:=0   to   nums-1   do
begin
    //这里面写线程对数据库查询,然后把查询结果显示出来
    edit1.text   :=   线程查询出来的结果;
end;
不知道该怎么做?麻烦大家教教我,感激不尽
发表于:2007-12-30 14:43:561楼 得分:0
你的adoquery   是多线程了但   adoconnetion   呢?
你应当   将adoconnetion   也加入线程
或   adoquery   直接连接数据库
发表于:2007-12-30 15:11:522楼 得分:0
查询单一数据库
用线程没什么帮助的
发表于:2007-12-30 15:14:373楼 得分:0
数据库是远程的
发表于:2007-12-30 15:34:144楼 得分:0
  都是数据库自身的驱动查询,与你的程序是否采用多线程没关系

你的程序只不过通过引擎访问
发表于:2007-12-30 16:09:565楼 得分:0
for       i:=0       to       nums-1       do  
begin  
        //这里面写线程对数据库查询,然后把查询结果显示出来,因为这里面是大数据量的查询,需要一定的时间,而程序不能一直停在这里等查询的结果,所以才用多线程  
        edit1.text       :=       线程查询出来的结果;  
end;  
发表于:2007-12-30 16:22:206楼 得分:0
procedure   tform1.getresult;
begin
      edit1.text:=returnvalue;
end;
procedure       ttestthread.EXECute;  
begin  
        fadoquery.sql.text:='select   sum(marks)   from     table1'     ;                          
        fadoquery.open;  
        returnvalue:=fadoquery.fields[0].asstring;//这是一个全局变量
          fadoquery.close;
          synchonize(form1.getresult);
end;  
发表于:2007-12-30 20:54:137楼 得分:0
针对你的问题,我的理解:
你使用多线程的目的就是因为数据量太大,而查询时间过长才采用的,但你在查询过程中会做什么别的操作吗?
一般来讲在数据库应用中,一个人在操作时,如果想查询一些数据,一般都会等待结果出来,而不会再去做其它的操作.
我觉得是不是先优化一下你的查询sql.
另,线程使用的目的是在并发情况下快速处理一些工作,比如计算等.这样提高速度.
我说的也不太好,呵:)
发表于:2008-01-03 13:29:298楼 得分:0
最好一个线程一个连接,否则会出现一些意想不到的错误


快速检索

最新资讯
热门点击