处理了数据库后是否就更新了?以后会不会丢失?? (急)(50分)

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

wabb

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi4 c/s sp3 win98se
-------------------------
我的程序是将两个原始DBF文件中的数据进行分类统计并计算后再将得出的数据分别
保存到几个Paradox7的数据文件中。
 使用中发现在处理完了数据后(即将DBF分离到几个Paradox7中),如果不关闭整个应用
程序就用查询、浏览、输出报表,这些都正常。但是关闭程序后有时就会丢失刚刚处理
的数据。但如果是在处理完了数据后立刻关闭程序的话就不会丢失数据。why?
 
没有人可以回答吗?
 
有POST了吗?
 
POST之后在OPEN,就不会丢失数据了
 
问题在于你没有FlushBuffers,在Table1->AfterPost之后Table1.FlushBuffers即可。

或者启动事务,修改一批数据后,FlushBuffers,再提交事务。Paradox7支持基本的事务。
 
to xygz: 就是有PoSt才在这里提出问题的呀

to kals: 那还不是要先关闭整个应用程序吗???(数据库多不可能全部先Close再Open)

to WiseAnt: 我是用在单机上的。用的是BDE

另外我不单是只用了Table(用的很少,一般是连到那几个DBF),还大量的用了Query、For语句作计算,作报表

还请各位多多教导我 谢谢以上几位的回答
 
能不能附上程序看看?
 
table,query的如果是ltOptimistic post即可保存
table,query的如果是ltBatchOptimistic post 后要updatebatch()即可保存

 
是不是使用了缓冲
 
一般的说,只有当Table被关闭时修改的数据才被数据库引擎存进硬盘,系统掉电或者崩
溃都会导致数据丢失!为了避免数据丢失,可调用BDE函数(DbiUseIdleTime,DbiSaveChan
ges)强制存盘。

1.DbiSaveChanges(hDBICur):
==========================

DbiSaveChanges 保存所有的数据更新,可以随时调用。例如你可以在一个纪录更新后立
即存盘:

procedure TForm1.Table1AfterPost(DataSet: TDataSet);
begin
DbiSaveChanges(Table1.handle);
end;


注:该方法并不适用于SQL数据表。


2.DbiUseIdleTime:
==========================

DbiUseIdleTime 可以在WINDOWS消息队列为空时调用,使BDE能够保存缓冲区中的数据。

换句话说,他完成DbiSaveChanges的所有功能,而且是保存所有更新过的表格。

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.onIdle := UseIdle;
end;

procedure Tform1.UseIdle(Sender: TObject; var Done: Boolean);
begin
DbiUseIdleTime;
end;


 
还有指教吗?
我真的想多知道一点

谢谢
 
明天我将结束这个贴子

再次感谢!
 

Similar threads

后退
顶部