(cAKK、吴剑明,谢谢版主帮我看看)我用delpohi+win98开发程序。当程序非法操作或者系统突然掉电的时候,我再进入系统,程序中那些还没有来得急保存的数

  • 主题发起人 主题发起人 wanxu
  • 开始时间 开始时间
W

wanxu

Unregistered / Unconfirmed
GUEST, unregistred user!
(cAKK、吴剑明,谢谢版主帮我看看)我用delpohi+win98开发程序。当程序非法操作或者系统突然掉电的时候,我再进入系统,程序中那些还没有来得急保存的数据(存在*.DB数据库中)就丢失了,有没有办法当出现上述情况的时候我数据库中的数据还存在?只要方法可行,再加200大洋!(50分)<br />我觉得出现这个问题是因为虽然我对数据库中的数据进行了修改,但是程序还没有退出的
时候,对数据库本身而言所做的修改实际上还没有保存在数据库中,所以非法退出后就出
现上述情况!!!有没有办法让数据库中的数据随时保存,随时更新?或者是其他的原因?

我用的是datasource+table+dbgrid操作的数据库。
table1.edit;
//这里修改数据
table1.post;

我后来又用了table1.applyupdatas和Table1.CommitUpdates;
还有其它乱七八糟的东西。还是不行。
愿闻其详!!!!
只要方法可行,再加200大洋!
 
我来回答,这个问题太简单了:
1、如果数据很重要,装一个UPS
2、否则,坏就坏了吧,没什么大不了的
 
你使用的数据库是什么?
我想对于非桌面数据库不会存在这个问题。
同时即使对于桌面数据库,如果一旦提交,它也应该写到库里面了,虽然此时别的程序可能读不出来,但是应该没问题的。
如果是说要将没有UpdateBatch的数据恢复,那我觉得基本没有可能。[:(]
除非弄懂Delphi存储的那些临时文件的格式.db .mb,估计是Paradox数据库。[:)]
 
Paradox数据库有这种情况,关注!
 
yzhshi:
我用的是Paradox数据库。我仅仅想对数据库操作的时候,一当数据发生变动的时候就
直接写到数据库文件,而不是写到缓存中,这样即使突然掉电也没有关系。。。
麻烦了。。
 
paradox是有这个问题的,你这个问题以前有人问过很多遍了,你可以查查.
建议: 1 立即提交事务处理.
2 换用其他如access的数据库,对你的程序来说改动不大.
 
我给你看看,晚上给你测试结果。
 
将BDE中的SQLPASSTRUE MODE设置为SHARED AUTOCOMMIT(默认),
在执行Post后,数据库就已经COMMIT了,没有必要使用事务吧。

同样可以获取 WM_QUERYENDSESSION 消息,在关闭Windows之前,Commit 你的事务。

要捕获非法关机,可真的没折了![xx(][xx(][xx(]
 
吴剑明:
1。立即提交事务我已经试过了,不行;
2。是不是真的Paradox的有这个缺陷?如果换成ACCESS的会出现类似的情况吗?
 
如果真要保证掉电时,信息不丢失,(不可能不丢,将损失将到最小即可)
1。不要用批量提交方式。
2。如果常掉电,多用数据库事务。
 
uses bde;
procedure TForm1.Table1AfterPost(DataSet: TDataSet);
begin
dbiSaveChanges(Table1.Handle);
end;

 
你把CATCHUPDATES设为FALSE,当记录发生滚动时,自动存盘。
 
建议换用其他的数据库。
 
YB_unique:
如果换成ACCESS的会出现类似的情况吗?
 
whf:
你这种方法有效果吗????
 
FlushBuffers试一下
 
这个没有什么难阿
你不是用的bde的数据引擎吗?
那用bde的api函数直接保存不就可以了吗?
你看看有本叫版主答疑的书上就有列子
 
我也觉得换为ACCESS比较好,我使用ACCESS中没发现这样的问题
 
建议用时钟随时保存
 
抄来的:
BDE API Examples (DbiSaveChanges)
Forces all updated records associated with hCursor to disk.
--------------------------------------------------------------------------------
Save all changes to a TTable object whenever a post is made to the table
procedure TForm1.Table1AfterPost(DataSet: TDataSet);
begin
Check(DbiSaveChanges(Table1.Handle));
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部