网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
Delphi中带缓存的数据更新技术
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式
。通常,delphi为用户提供了TTable和TQuery等几种存取数据库表的数据集控件;提供了TDBNevigator控件,可以对数据集进行增、删、改、查询等操作。在数据集的属性控件中有一个cachedUpdate选项,将这一项设为true,delphi即允许以缓冲的形式来存取该数据集,也就是说对数据集所做的更新操作不会立刻自动反映到数据库服务器,而只有调用实际提交的方法(如applyUpdates()等),delphi才将实际提交的数据反映到数据库,同时通过数据集的on UpdateRecord()方法,来定义在实际更新数据库表时需要同时进行的操作(如级联删除等)。这样就为我们自己来控制数据提交的步骤提供了方便,虽然这使编程的难度有所增大,但是在某些场合我们需要这样的灵活性。而且通过这种模式,确实大大减少了事务的长度、降低了网络流量、增加了应用程序的可靠性。下面我们举一个具体的应用模块来说明如何运用这种编程模式。




  五. Delphi程序举例

  (1) 应用背景说明

  假设我们做一个商品定单处理的模块。在这个模块中涉及三个数据库表:订单表Order (有订单号OrderID、金额SumMoney、日期date、客户姓名costomer等字段),订单明细表OrderDetail(有订单明细号detailID、订单号OrderID、商品编号CommondityID、数量amount、单价price等字段),库存表storage(有商品编号CommondityID、现有库存量stocks等字段)。其中,订单与订单明细表是一对多的关系,以订单号OrderID作为连接字段。每当新增一份订单的时候,都必须修改库存表,将卖出的相应商品的数量从库存中减去。

  (2)程序框架说明

  下面是一段delphi程序的框架,大致说明了如何运用缓存更新的编程模式。读者可以自己将本程序的功能进一步的完善。

unit Order;
{单元名称}
interface
uses
{引用的模块}
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, ExtCtrls, DBCtrls, ToolWin, ActnMan, ActnCtrls,
ActnMenus, DB, DBTables;

Type
{声明的变量、添加的控件以及定义的方法和过程}
 TOrderForm = class(TForm)
 TBOrder: TTable;
 TBDetail: TTable;
 OrderDB: TDatabase;
 ActionMainMenuBar1: TActionMainMenuBar;
 DBNavigator1: TDBNavigator;
 DBGrid1: TDBGrid;
 procedure TBOrderAfterPost(DataSet: TDataSet);
 procedure TBDetailNewRecord(DataSet: TDataSet);
 procedure TBDetailUpdateRecord(DataSet: TDataSet;
 UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
 procedure TBDetailAfterPost(DataSet: TDataSet);
 procedure FormCreate(Sender: TObject);
 private
 { Private declarations }
  public
  { Public declarations }
  end;
 
 var
  OrderForm: TOrderForm;

  implementation

  {$R *.dfm}
  {下面的内容为主要的程序框架}

 procedure TOrderForm.FormCreate(Sender: TObject);
 {将主表与明细表的缓存更新选项设为true}
 begin
  TBOrder.CachedUpdates:=true;
  TBDetail.CachedUpdates:=true;
 end;

 procedure TOrderForm.TBOrderAfterPost(DataSet: TDataSet);
  {在提交Order表的更新后,执行本过程内容,本过程实现对主表和明细表的实际提交的事务。
   注意:如果一个数据集的cachedUpdates属性为true,
    那么post这个动作仅仅是在客户端缓冲区中进行一个提交动作,
    而不是真正的提交给实际的数据库。要实现真正的提交,
    需要用到applyUpdates语句。}
 begin
  OrderDB.StartTransaction;//更新事务开始执行
  try
   TBOrder.ApplyUpdates;//对主表进行实际的更新
   TBDetail.ApplyUpdates;//对明细表进行实际的更新
  except
   

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号