多线程数据查询与存储在Delphi中的实现_第1页
多线程数据查询与存储在Delphi中的实现_第2页
多线程数据查询与存储在Delphi中的实现_第3页
多线程数据查询与存储在Delphi中的实现_第4页
免费预览已结束,剩余1页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 多线程数据查询与存储在Delphi中的实现 1、引言 :随着数据的存储、 修改及查询变得更 加频繁优秀的数据库应用程序 , 应当充分考虑数据库访问的速度 问题。通常可以通过优化数据库、优化查询语句、分页查询等途 径收到明显的效果。 但是, 大家都会遇到这样的问题 ,在较短的时 间里,对服务器端数据访问或操作过于频繁时 , 主程序的窗口会 出现一个带有SQL符号的沙漏。如果数据存储的量很大时,主程 序会出现死机的情况 , 用户只好重新启动应用程序。这在实际中 是不允许的 , 因为这样会丢失重要的数据 , 那么有没有好的解决 方法呢 ?分析造成这种现象的原因 , 主要有 2 个方面。第一 , 对

2、数 据库的访问处理放在了主程序的前端处理 ; 第二, 忽略了网络数 据处理的并发性 1 。在实际 Delphi 的编程应用中 , 由于 Delphi 的强大功能和支持多线程的面向对象编程技术 , 使得实现网络数 据的并发存储及查询变得非常简单方便。 2、多线程技术 在 Delphi 的编程中 , 可以很方便的使用多线程 , 可以在后台 调用一个线程 , 直接对数据进行操作处理 , 而用户可以继续其他 程序操作 , 不必关心该数据的处理。 使用多线程技术 , 可以达到数 据存储与查询的并行操作 , 即可以使用一个线程进行数据存储 , 另一个线程进行数据的查询 ,2 个线程操作互不影响。这样大大

3、地提高了程序的效率。 3、多线程的实现 实现多线程的数据库同步访问的基本思想是 : 为每个数据操 作(如TQuery组件)创建一个独占的数据库会话对象,然后各自 进行数据库访问。 在 Delphi 数据库应用中 , 都有一个缺省的数据 会话对象 Tsession 。假如在进行一个线程存储时 , 用户可通过按 钮或菜单发出查询命令 , 此时, 可以不必终止正在执行的数据库 的访问 3 。 下面的例子给出了同时进行的 2个线程操作,一个是存储 , 另一个是查询。 这里的多线程同步查询、 存储演示程序仅包括一 个工程文件和一个单元文件 , 窗体中放置的组件有 2 个 Session 组件、 2 个

4、Button 组件。 3.1 、查询线程类的实现方法 procedureTThreadQuery.Execute; begin try FQuery.Open; 打开查询 except ShowMessage(cFQueryErrorc); 线程异常 end; Terminate; end; constructorTThreadQuery.Create(Suspended:Boolean;Sessio n:TSession); begin FQuery:=Tquery.create(nil); 动态产生 FDatabase.SessionName:=Session1.SessionName;

5、FQuery.SessionName:=Database.SessionName; FQuery.DatabaseName:=Database.Data-baseName; Fquery.Sq.ladd(sql 语句 ); inheritedCreate(True); FreeOnTerminate:=true; end; destructorTThreadQuery.Destroy; begin FdataBase.Free; Fquery.Free; end; 3.2 存储线程类的实现方法 procedureTThreadSave.Execute; begin Database.Start

6、Transaction; try Squery.ExecSQL; Databasemi; except Database.Rollback; end; Terminate; end; procedureTForm1.BtnGoQueryClick(Sender:TOb2ject); begin TThreadQuery.Create(false,Session) 点击查询按钮创建 查询线程 end; procedureTForm1.BtnGoSaveClick(Sender:TOb2ject); begin TThreadSave.Create(false,Session) 点击存储按钮创建存

7、储线程 end; 在上面这个例子中,我们构造2个TThread的子类,用于在后 台执行数据库查询和存储。 在该类的 Create 函数中 , 传递了 2 个 参数 Suspended 和 Session, 其中 Suspended 用于控制线程的运 行, 如果为真时 , 线程在建立后将立即被悬挂 , 一直到运行了 Resume方法,该线程才会继续执行。Session参数传递数据库会 话对象 , 以避免线程相互冲突 , 来定制自己的 TSession 控件。 Execute 是线程中最重要的过程 , 它是类 TThread 的执行部分 , 所 有需要在这个多线程类中运行的语句都必须写在这个过程里。 其 实, 虽然我们也许没有亲自使用过 Session 控件, 但在实际上 , 在 所有的数据库访问时 ,Delphi 都会自动建立一个临时的 Session 控件 ,使用完后又动态地删除它 4 。 4、结束语 通过以上示例可以看出 , 多线程编程技术

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论