Table的Post问题(100分)

  • 主题发起人 主题发起人 雁孤行
  • 开始时间 开始时间

雁孤行

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Edit;
Table1.FieldByName('Startdate').AsDateTime:=Date;
Table1.FieldByName('StartTime').AsDateTime:=Time;
Table1.Post;
end;
上面这段程序,Button1Click之后如果重启(注销也一样),
则所有新写入的数据都会丢失,但将程序正常关闭就没事,
我估计是Post之后,数据事实上还在缓存,没有实际上写到
数据库中,请问怎么解决。
 
应该不会的啊。另外你用的数据库是SQLSERVER类型的吧。
可以使用事务来帮助完成的啊。
 
是不是Table1.CachedUpdates被设为True了?
加上下面这句试试。
Table1.ApplyUpdates;
 
如果是用Oracle等大型数据库的话,你更改的结果一般都不是马上写到数据文件中,
而是先写到内存里的数据块缓冲区,然后等到了一定时间一起写到磁盘上,你说的情况
是可能出现的,在你的程序以外退出时,与数据库连接断开,这时数据库端会有进程
负责清理这种僵死进程,回收内存等,这时有可能将你更改的数据(内存中)也回收...
因此写不到硬盘上...
 
一般关键数据都会使用事务的方法,这样会保证数据安全写到数据库中...
 
什么叫事务的方法:(
 
你可以用以下的两种方法完成数据的同步更新
1。ApplyUpdates;
CommitUpdates;
2. Datamodule2.mydata.StartTransaction;
try
ApplyUpdates;
Datamodule2.mydata.Commit;
Except
Datamodule2.mydata.Rollback;
Raise;
end;
CommitUpdates;
 
to zengr:我用的是Paradox 7

to wangjerry:Table1.CachedUpdates是False,但我改成True后出错“Table1:Not
in cached update mode”,将Table1.CachedUpdates同时改为False编译时就出错
“Table is not indexed”。
 
多人接受答案了。
 
后退
顶部