付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年高考语文全真模拟试卷及答案(四)
- 初级中学教职工考核制度
- 档案监督检查与考核制度
- 广西2025届高三下学期开学考(上进联考)数学+答案
- 10万吨陶粒砂石油压裂支撑剂生产线项目可行性研究报告
- 汽车高端智能零部件产业基地项目申请报告
- 芯片清洗液生产线项目实施方案
- 2026年河南郑州市属事业单位招聘工作人员450人易考易错模拟试题(共500题)试卷后附参考答案
- 人形机器人孵化产业园项目实施方案
- 山东南山铝业精铝扩产项目环境影响报告书
- 2025年山西省教师职称考试(理论知识)复习题及答案(新课标)-山西教师
- 管晏列传教学课件
- 市区交通护栏维护管养服务方案投标文件(技术方案)
- 北京大学2025年保研研究生选拔个人陈述范文
- 动态排程算法研究-洞察阐释
- 销售流程管理制度模板
- 2025年高考英语复习知识清单(全国)专题45 应用文写作11组34个满分句式68个真题例句 (讲案)解析版
- 2023《广东省建设工程消防设计审查疑难问题解析》
- 中学-学年第二学期教科室工作计划
- 2024年贵州省公务员考试《行测》真题及答案解析
- DB34T 3267-2024 公路养护工程设计文件编制规范
评论
0/150
提交评论