DELPHI中利用Timer组件完成数据批处理(ADO)

2016-02-19 12:38 37 1 收藏

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的DELPHI中利用Timer组件完成数据批处理(ADO)懂设计的网友们快点来了解吧!

【 tulaoshi.com - 编程语言 】

近日在帮一个好朋友写一个数据库开发模块时遇到了数据批处理的问题.
  思考了一些数据批处理的开发方法,不敢独享特总结与大家分享.
  在 数 据 库 应 用 系 统 中, 常 常 要 对 数 据 进 行 成 批 的 如 追 加、 删 除、 更 改 等 操 作,
  这 种 批 量 操 作 在 专 门 的 数 据 库 开 发 工 具 如VFP 中 用APPEND 、COPY 命 令 带 上 相 应 的
  命 令 子 句就 能 轻 易 完 成。 但 在 其 它 开 发 工 具 中 并 没 有 类 似 的 命 令,
  而 是 提 供 能 完 成 类 似 功 能 的 控 件 或 对 象, 如 在PowerBuilder 中 就 是
  利 用Pipe Line( 数 据 管 道) 来 完 成 两 个 或 同 构 或 不 同 构 的 表 之 间 的 数 据 批 处 理。
  本 文 要 介 绍 的 是在利用Delphi进行数据库开发时用Timer组件进行批处理的方法.
  Delphi开发中在利用Delphi进行数据库开发时利用最多的就是ADO和BDE两种方法,众所周知BDE曾经是Borland大力提倡的,
  所以在BDE组件上Borland花费了大量的经历所以在数据批处理上有TBatchMove控件可以完成数据批处理.
  具 体 的 操 作 要 通 过 设 置TBatchMove 的Mode 属 性 后 再 调 用Execute 方 法 来 完 成。有 关BDE 的 帮 助。
  本 文 中 各 种 操 作 模 式 的 实 际 结 果 均 可 以 从Delphi 的Database Desktop
  中 查 看 到。
  这不是本文的重点所以不再此赘述.如有兴趣Delphi文档中有清楚的注释.,查阅便可.
  本文讨论的重点是:在ADO进行数据批处理方式.
  拿到这个问题一般采取的方式是数据结构的特征对全部数据进行遍历,循环插入.
  不过笔者在此要讲的是一种快捷,高效,建议的数据批处理方式..具体代码和操作方式如下:数据库基本的连接代码:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

procedure TForm1.FormCreate(Sender: TObject);
  var
  MyPath:string;
  const
  MyPassW ='****'; ///数据库密码
  begin
  MyPath:=ExtractFilePath(ParamStr(0)); ////数据库路径
  AdoConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
  MyPath+'dbdb.mdb;Jet OLEDB:Database Password='+
  MyPassW+';Persist Security Info=False';
  ///////设置数据引擎并加载密码
  ADOConnection1.LoginPrompt := false;
  ADOConnection1.Connected := true;
  ADOTable1.Connection := ADOConnection1;
  ADOTable1.TableName:='tab1';
  ADOTable2.Connection := ADOConnection1;
  ADOTable2.TableName:='tab2';
  try
  ADOTable2.Open;
  ADOTable1.Open;
  DataSource1.DataSet := ADOTable1;
  DBGrid1.DataSource := DataSource1;
  DBNavigator1.DataSource := DataSource1;
  except
  MessageBox(0,'无法打开数据库','错误',MB_OK);
  end;

/////////////Timer控件控制循环

begin
  ///////////进行差错控制的异构表的批量数据处理
  DataSource2.DataSet.Insert;
  ADOTable2.Fields[0].AsString:=ADOTable1.Fields[0].AsString;
  ADOTable2.Fields[1].AsString:=ADOTable1.Fields[1].AsString;
  DataSource1.DataSet.Next;
  if DataSource1.DataSet.Eof = True then timer1.Enabled := false ;
  if DataSource1.DataSet.Eof = True then ShowMessage('数据以导入成功!');
  except
  MessageBox(0,'数据导入失败','错误',MB_OK);
  end;
  end;
  DataModule2.DataSource1.DataSet.Next;//////////此句最为关键,即为循环语句.
  插入一条记录的时间(Timer的响应时间)是可以设置的.

这是利用Timer组件的特性.DataSet.Next属性设计而成的异构表之间的数据批量导入功能,
  那么删除,更新等功能都有类似代码可以实现(使用DataSource的属性修改即可).
  因为有查询功能所以我在开发中利用的是TADOQuery组件,大致方法一样.


  作者:VIIVD
  E-MAIL:bao-er@163.com
  日期:2004.6.5

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1601383.html

延伸阅读
标签: Delphi
  组件技术是新一代软件技术发展的标志,作为著名的RAD开发工具,Delphi可以轻松地实现组件的开发。本文将详细介绍Delphi中DCOM/CORBA的实现步骤。 ■创建应用服务器 要创建一个多层Client/Server应用程序,首先要创建应用服务器,然后注册或安装应用服务器,只有应用服务器已注册并且正在运行的情况下,才能创建...
Timer组件是也是一个WinForm组件了,和其他的WinForm组件的最大区别是:Timer组件是不可见的,而其他大部分的组件都是都是可见的,可以设计的。Timer组件也被封装在名称空间System.Windows.Forms中,其主要作用是当Timer组件启动后,每隔一个固定时间段,触发相同的事件。Timer组件在程序设计中是一个比较常用的组件,虽然属性、事件都很少...
标签: ASP
  為了善用RecordSet物件,RecordSet物件還有許多有用的屬性和方法,讓我們再學學: Filter屬性:於ReecordSet設定搜尋過濾的條件,只顯示合乎條件的資料。 Clone方法:複製一份RecordSet。 CacheSize屬性:設定或得知RecordSet暫存(cache)於記憶體的的記錄筆數。 Filter屬性 經由SELECT等指令將查詢存放到RecordSet的記錄,仍然可...
标签: Delphi
一、DBGrid中的下拉列表 在DBGrid网格中实现下拉列表,设置好DBGrid中该字段的PickList字符串列表、初始的序号值DropDownRows即可。以职工信息库中的籍贯字段(字符串类型)为例,具体设计步骤如下: 1、在窗体上放置Table1、DataSource1、DBGrid1、DBNavigator1等控件对象,按下表设置各个对象的属性: 对象属性设定值Table...
多表操作 在一个数据库中,可能存在多个表,这些表都是相互关联的。我们继续使用前面的例子。前面建立的表中包含了员工的一些基本信息,如姓名、性别、出生日期、出生地。我们再创建一个表,该表用于描述员工所发表的文章,内容包括作者姓名、文章标题、发表日期。 1、查看第一个表mytable的内容 mysql select * from mytable; +-...

经验教程

141

收藏

63
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部