发信人: mengy (LEAR DLLS 命令时,将从内存中清除), 信区: BorlandDev
标  题: 用Delphi如何实现VFP中的Cache特性
发信站: 哈工大紫丁香 (2001年03月13日18:15:33 星期二), 转信

用Delphi如何实现VFP中的Cache特性 <<上一篇 下一篇>> 
  ---- 在VFP50中编程,因为其本身以数据库为核心的操作方式,Cache(数据缓冲
)工作方式是其本身固有的,当把一个VFP程序向Delphi中转移时,为提高数据处理
速度,应使用其在Delphi2.0以后版本增加的数据库缓冲机制。Delphi的缓冲机制
本身不仅提高了数据处理的性能,同时还带来了新的特性,增强了数据处理的灵活
性。 

---- 与缓冲机制有关的属性和方法如下,只有在缓冲机制下,即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; 
        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;
---- 这才是缓冲机制下存盘的正确方法。 
   
 
  如果你有什么好的资料,可以寄给我哟:) <<回到首页 <<上一篇 下一篇>> 



------------------------------------------------------------------------
--------
  Delphi 技巧集 
   
  Copyright 1999.11 by 东子 Mail to me! 
感谢广州视窗提供主页空间 


--

       大海无边天做岸
               山登绝顶我为风

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.185毫秒