修改了当前记录然后关闭了程序,为什么数据没有更新?如何在程序结束进行数据更新?(100分)

  • 主题发起人 主题发起人 DT
  • 开始时间 开始时间
D

DT

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么我在打开两个数据库,没有关联情况下,在对当前记录做了修改,然后关闭程序,当前的修改没有反映到数据库中?而我用table.modified判断或直接在table.beforeclose里用post都不能将当前修改反映到库中,两个库都是。而最后我在Beforeclose里用table.last,移动记录指针来让程序记录更新。请问如何在关闭库中将当前修改反映到库中?如果进行判断?
 
在窗体的onclose事件里判断
if 保存了 then canclose=true
else
begin
canclose =false;
//你保存的代码。。。
end;
 
这样:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Table1.State = dsEdit
table1.post;
end;
 
这些方法我算是都试过了,不行。
我在table的beforeclose里直接用POST都不行(不论是否异常)后来,我只好用last,
用移动记录指针激发事件来使记录更新,只有这样才行。
这是我的定义和源程序:
object myk: TTable
ObjectView = True
AfterOpen = mykAfterOpen
BeforeClose = mykBeforeClose
BeforePost = mykBeforePost
AfterScroll = mykAfterScroll
TableName = 'jyk.db'
Left = 42
Top = 176
.....

procedure Tform1.FormCreate(Sender: TObject);
begin
myk.Open;
end;

procedure Tforml.mykBeforeClose(DataSet: TDataSet);
begin
//这是我最后用来解决问题的方法,没办法不得已用这种自己也想不通的办法
if myk.active then myk.last;
if hydata.active then hydata.last;

end;

 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin

table1.Close;

end;


OK !!!!!!!!!!!!!!!!!!!!!!!!!
 
修改数据后在移动记录以前应判断是否将修改结果保存到数据表中,而不应该等到
关闭数据表时才处理。
 
Table.CachedUpdates:=false;
 
从你的源码来看,如果你前面没有myk.close,cancel之类的代码,把last换成post应该是没问题的。
要不换成myk.edit;myk.post试试


zwma说的有可能。
但如果是cachedupdates=true的话,last也不能存盘啊。
last的存盘原理是记录指针变动后自动触发post



不过,你的思路还是有点问题的,我建议每次改动后就显示post比较可靠一点。
 
上面的这些解决方案我都试过没有,就只有用last一下才可以解决问题,为什么会这样呢?
应该说直接POST就可以了吧
 
if table1.state in [dsedit,dsinsert] then table1.post;
 
>DT
Sory 上面写的小了then, 但你说不行这是没理由,的在FormClose中判断肯定可以
再贴一次
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Table1.State = dsEdit then
table1.post;
end;
 
if Table1.State in dsEditModes then Table1.Post;
 
没理由呀,真怪了!
 
dataset.flushbuffers;
 
post 方法应该有用。在修改关闭两个表之前,post。
 
dataset.flushbuffers;
是何意思?

我确实是在结尾直接用POST也不行!!!!我也感到 很奇怪。

不过,近来得知,用最后用Refresh是可以的。
 
如果使用了DATABASE和QUERY控件
ONCLOSE
BEGIN
try
database.StartTransaction;
query.CommitUpdates;
database.Commit;
except
database.Rollback;
end;
END
 
在程序设计中修改数据有时确实改不过来
不过如果你是直接运行执行程序,不是通过run来修改记录的,正常的post后都可保存下来的
 
这么久了,做个了结。:)有时,Delphi会出一些莫名其妙的问题,让人摸不着头脑
 
多人接受答案了。
 
后退
顶部