admin 管理员组

文章数量: 887021


2023年12月17日发(作者:bootstrap table使用方法汇总)

多线程数据查询与存储在Delphi中的实现

1、引言:

随着数据的存储、修改及查询变得更加频繁优秀的数据库应用程序,应当充分考虑数据库访问的速度问题。通常可以通过优化数据库、优化查询语句、分页查询等途径收到明显的效果。但是,大家都会遇到这样的问题,在较短的时间里,对服务器端数据访问或操作过于频繁时,主程序的窗口会出现一个带有SQL符号的沙漏。如果数据存储的量很大时,主程序会出现死机的情况,用户只好重新启动应用程序。这在实际中是不允许的,因为这样会丢失重要的数据,那么有没有好的解决方法呢?分析造成这种现象的原因,主要有2个方面。第一,对数据库的访问处理放在了主程序的前端处理;第二,忽略了网络数据处理的并发性[1]。在实际Delphi的编程应用中,由于Delphi的强大功能和支持多线程的面向对象编程技术,使得实现网络数据的并发存储及查询变得非常简单方便。

2、多线程技术

在Delphi的编程中,可以很方便的使用多线程,可以在后台调用一个线程,直接对数据进行操作处理,而用户可以继续其他程序操作,不必关心该数据的处理。使用多线程技术,可以达到数据存储与查询的并行操作,即可以使用一个线程进行数据存储,另一个线程进行数据的查询,2个线程操作互不影响。这样大大地提高了程序的效率。

3、多线程的实现

实现多线程的数据库同步访问的基本思想是:为每个数据操作(如TQuery组件)创建一个独占的数据库会话对象,然后各自进行数据库访问。在Delphi数据库应用中,都有一个缺省的数据会话对象Tsession。假如在进行一个线程存储时,用户可通过按钮或菜单发出查询命令,此时,可以不必终止正在执行的数据库的访问[3]。

下面的例子给出了同时进行的2个线程操作,一个是存储,另一个是查询。这里的多线程同步查询、存储演示程序仅包括一个工程文件和一个单元文件,窗体中放置的组件有2个Session组件、2个Button组件。

3.1、查询线程类的实现方法

e;

begin

try

;{打开查询}

except

ShowMessage(cFQueryErrorc);{线程异常}

end;

Terminate;

end;

(Suspended:Boolean;Session:TSession);

begin

FQuery:=(nil);{動态产生}

nName:=nName;

nName:=nName;

seName:=-baseName;

(sql语句);

inheritedCreate(True);

FreeOnTerminate:=true;

end;

y;

begin

;

;

end;

3.2存储线程类的实现方法

e;

begin

ransaction;

try

L;

;

except

ck;

end;

Terminate;

end;

ueryClick(Sender:TOb2ject);

begin

(false,Session){点击查询按钮创建查询线程}

end;

aveClick(Sender:TOb2ject);

begin

(false,Session)

{点击存储按钮创建存储线程}

end;

在上面这个例子中,我们构造2个TThread的子类,用于在后台执行数据库查询和存储。在该类的Create函数中,传递了2个参数Suspended和Session,其中Suspended用于控制线程的运行,如果为真时,线程在建立后将立即被悬挂,一直到运行了Resume方法,该线程才会继续执行。Session参数传递数据库会话对象,以

避免线程相互冲突,来定制自己的TSession控件。Execute是线程中最重要的过程,它是类TThread的执行部分,所有需要在这个多线程类中运行的语句都必须写在这个过程里。其实,虽然我们也许没有亲自使用过Session控件,但在实际上,在所有的数据库访问时,Delphi都会自动建立一个临时的Session控件,使用完后又动态地删除它[4]。

4、结束语

通过以上示例可以看出,多线程编程技术在Delphi数据库应用操作上带来极大的方便,也使我们了解到后台处理程序的优越性。当然,使用过多的线程,也有一定的弊端,它会占用大量的CPU时间和内存资源。因此,在编程中,要综合考虑多线程使用的优点和缺点。

参考文献:

[1][美]5从入门到精通[M].北京:电子工业出版社,2000.

[2][美]SteveTeixeira,5开发人员指南[M].任旭钧,王永生,冯泽波,等,译.北京:机械工业出版社,2000.

[3]何鹏飞.Delphi7程序设计教程[M].北京:清华大学出版社,2003.

[4]李维.Delphi7高效数据库程序设计[M].北京:机械工业出版社,2003.


本文标签: 数据库 查询 线程 数据 访问