用Delphi如何实现VFP中的Cache特性
点击次数:56 次 发布日期:2008-11-09 08:38:18 作者:源代码网
|
源代码网推荐 源代码网推荐 ---- 与缓冲机制有关的属性和方法如下,只有在缓冲机制下,即CachedUpdates:=True时,以下属性和方法才有效: 源代码网推荐 源代码网推荐 ---- CachedUpdates(属性):为True时,打开缓冲机制。 源代码网推荐 ---- UpdatesObject(属性):可以放置一个TUpdateSql组件的SQL语句,并可自动执行,也可以由OnUpdateRecord事件处理程序调用。 源代码网推荐 ---- UpdatesPending(属性):缓存中数据是否改变,True:改变。 源代码网推荐 ---- ApplyUpdates(方法):将缓冲数据存盘。 源代码网推荐 ---- CommitUpdates(方法):与ApplyUpdates合作,紧跟之后,将缓冲数据存盘。 源代码网推荐 ---- CancelUpdates(方法):取消缓存中的所有更新。 源代码网推荐 ---- RevertRecord(方法):恢复当前记录的原有数据,取消数据更改。 源代码网推荐 ---- UpdateRecord(方法):将缓冲数据存盘。 源代码网推荐 ---- UpdateStatus(函数):返回记录的更新状态,共有四种状态,usUnmodified,usModified,usInserted,usDeleted,可供查询。 源代码网推荐 源代码网推荐 ---- 了解缓冲机制的属性和方法后,用一个电话管理程序来说明。如图1(略) 源代码网推荐 源代码网推荐 ---- 东西不多,一个TDBGrid,三个Button,四个CheckBox,一个Table和一个DataSource,一个Navigator。将Table.ChacedUpdates属性设置为True,加入三个字段,其中一个State字段是一个计算字段,字段值在DhbTable的OnCalcFields事件中定义,如下: 源代码网推荐 源代码网推荐 procedure TForm1.DhbTableCalcFields(DataSet: TDataSet); begin 源代码网推荐 If DhbTable.UpdateStatus =usUnmodified Then DhbTableState.Value:="原有记录"; 源代码网推荐 //这两种访问字段的方式是等价的 If DhbTable.UpdateStatus =usModified Then DhbTable.FieldByName("State").asString:="已修改记录"; 源代码网推荐 If DhbTable.UpdateStatus =usInserted Then DhbTable.FieldByName("State").asString:="新增记录"; 源代码网推荐 If DhbTable.UpdateStatus =usDeleted Then DhbTable.FieldbyName("State").asstring:="已删除记录"; 源代码网推荐 end; 源代码网推荐 ---- 这个在DhbTable中定义的计算字段表达了每个记录现有的状态,而如何在DBGrid中显示这些字段由四个CheckBox控制,它们共享了一个事件句柄,如下: 源代码网推荐 procedure TForm1.CheckBox1Click(Sender: TObject); var UpdataTypes:TUpdateRecordTypes; 源代码网推荐 begin UpdataTypes:=[]; If CheckBox1.Checked then Include(UpdataTypes,rtUnModified); 源代码网推荐 If CheckBox2.Checked then Include(UpdataTypes,rtModified); If 源代码网推荐 CheckBox3.Checked then Include(UpdataTypes,rtInserted); If CheckBox4.Checked 源代码网推荐 then Include(UpdataTypes,rtDeleted); DhbTable.UpdateRecordTypes 源代码网推荐 :=UpdataTypes; end; 源代码网推荐 源代码网推荐 ---- rtModified, rtInserted, rtDeleted, rtUnmodified这四个常量分别定义了缓冲状态下的四种显示状态。若四种都没有选择,默认状态是除了rtDeleted以外的三种状态集合。DhbTable根据其属性UpdateRecordType集合中的值自动显示相应的记录。 源代码网推荐 源代码网推荐 ---- 三个按钮首先判断缓冲中是否有变化,若有,分别执行缓冲操作指令。OKButton是存盘,CancelAllButton是取消所有更新,RevertThisButton是恢复当前记录的改变(如果有变化)。代码如下: 源代码网推荐 源代码网推荐 procedure TForm1.OKButtonClick(Sender: TObject); begin If 源代码网推荐 DhbTable.UpdatesPending then DhbTable.ApplyUpdates; DhbTable.CommitUpdates; 源代码网推荐 end; procedure TForm1.CancelAllButtonClick (Sender: TObject); 源代码网推荐 begin If DhbTable.UpdatesPending then DhbTable.CancelUpdates; 软件开发网 www.mscto.com 源代码网推荐 end; procedure TForm1.RevertThisButtonClick (Sender: TObject); 源代码网推荐 begin If DhbTable.UpdatesPending then DhbTable.RevertRecord; end; 源代码网推荐 ---- 然后,运行这个小程序,感觉一下缓冲的效果,先增加一批记录,修改一批记录,再删除几个记录,单击四个CheckBox,看一看不同选择下的显示方式,试着恢复删除或修改的记录,绝对错不了。 源代码网推荐 源代码网推荐 ---- 要注意的是,在缓冲机制下,如果用POST,或Refresh或用: 源代码网推荐 源代码网推荐 Table.Close Table.Open 源代码网推荐 源代码网推荐 ---- 后,修改的数据并没有存入到数据库中,如果要存盘,必须使用: 源代码网推荐 源代码网推荐 Table.ApplyUpdates; 源代码网推荐 Table.CommitUpdates; 源代码网推荐 ---- 这才是缓冲机制下存盘的正确方法。 软件开发网 www.mscto.com
源代码网推荐 源代码网供稿. |
