如何把缓冲区中的输入数据立即写入磁盘上的表文件?(100分)

  • 主题发起人 主题发起人 liukt
  • 开始时间 开始时间
L

liukt

Unregistered / Unconfirmed
GUEST, unregistred user!
各位好!
我用DELPHI3写了一个数据管理程序,运行时发现,数据录入并且Post之后,并没有真正写入磁盘上的TABLE文件,而是暂存在内存中,直到退出程序时才会写入磁盘。我这里经常会突然停电,一停电就会把几个小时录入的东西全丢光。
请问DELPHI中有没有能把缓冲区中的数据立即写入磁盘上的表文件的指令?(类似FOX中的Flush)
多谢!
 
执行一下table.active:=false后数据才会真正写到磁盘上
即中断一下与数据库的连接后数据就会保存,但这样做操作的速度就慢了。
table1.post;
table1.active:=false;
table1.active:=true;
//后面你的操作。。。
 
www的方法是可行的,但是有没有什么其他强制刷新的方法?
 
看看 TTable或TTquery 的CachedUpdates是True or False.
 
和CachedUpdates没关系。
www说的对,不过你该写成
Table1.Close;
Table1.Open;
 
扯淡!

TBDEDataSet.ApplyUpdates 将BDEDataSet的Cache写到表中
TDatabase.ApplyUpdates 将整个数据库的Cache写到表中
 
感谢各位!
使用Table1.close/open的方法我是知道的,因为每次退出程序时都会真正存盘。
我现在是想在程序运行过程中每隔一段时间就用一条指令强行存一次盘,Fox 中
的Flush就是这样的指令。Delphi中也有一个 FlushBuffers,但有朋友说它只
对文本流操作有效,对 Table 流无效,不让我使用。请问各位有用过这个指令
的吗?英文好的朋友请看看Delphi 帮助中对这个指令的说明。此外还有没有更
好的方法?
多谢!
 
也就蚯蚓说的对。table。close;table。open 简直就是‘无赖’行为:)
database。cachedupdates:=true:设置缓存更新,即把数据写入缓存中
database。applyupdates; 把缓存中数据写到数据中
 
可以使用事务处理。
Database1.StartTransaction;
Try
with Table1 do
begin
Edit;
FieldByName('No').AsInteger:=2000;
Post;
end;
Database1.Commit;
Exception
Database1.Rollback;
End;
 
Boat兄的主意是可行的。在有database的情况下,table.close and open
就行不通了.似乎提交本次session中的修改内容只有通过commit方法。
愿意听到不同的办法
 
感谢各位!
我现在用
Table1.FlushBuffers;
已经搞定,只是又加了几句让它每隔5条存盘一次,相当好用。
多谢!
 
后退
顶部