Post与ApplyUpdates的问题(20分)

  • 主题发起人 主题发起人 searoom
  • 开始时间 开始时间
S

searoom

Unregistered / Unconfirmed
GUEST, unregistred user!
我想知道的是:

设置CachedUpdates为cancel时用post
和 CachedUpdates为true时 用ApplyUpdates

两者之间有什么区别
 
当CachedUpdates为False时, 通过POST直接把数据写入数据库中,
若把CachedUpdates设置为TRUE,调用POST方法后并没有把数据写入库中, 而是存在缓冲区里,
此时,你可以通过CANCEL取消数据的更新,要把数据完全写入库中需用ApplyUpdates.
 
如果當CachedUpdates為true時,直接使用ApplyUpdates行不行?
 
我現在的問題有點奇怪,我使用applyUpdates,更新時,常常有某個記錄提示更新不成功,
而其他的又沒什麽問題,實在是找不出什麽原因,下面是我用applyUpdates出的代碼:

------------------------------------
procedure TBankSavingExchangeModifyFrm.Button1Click(Sender: TObject);
begin
SysSetupDM.CTDb.StartTransaction;
with BankDM3.DataQ4 do
begin
edit;
FieldbyName('ExchangeDate').AsDateTime:=dtp_billdate.Date;
FieldbyName('Handlers').AsString:=leftstr(cmb_handlers.Text,pos('-',cmb_handlers.Text)-1);
FieldbyName('Summary').AsString:=trim(Ed_summary.Text);
try
post;
ApplyUpdates;
SysSetupDM.CTDb.Commit;
except
CancelUpdates;
SysSetupDM.CTDb.Rollback;
showmessage('更新出錯');
end;
end;
self.Close;
end;
 
不知道我問的問題太幼稚了,竟然沒人理會
 
CachedUpdates为cancel时用post 可以直接保存到数据库中,而且此时不能用ApplyUpdates
否则会出错。
CachedUpdates为true时 用ApplyUpdates可以直接保存到数据库中,但用Post只能保存
到本机的内存中,当在次执行ApplyUpdates以后就可以保存到数据库中。
 
SysSetupDM,SysSetupDM.CTDb分别是什么?
 
SysSetupDM 是一个DataModal
CTDB 是一个TDatabase控件

我详细描述一下我碰到的问题吧:
在一个窗口中有一个DBGrid控件,我双击该DBGrid控件会调出一个用来修改记录的窗口
在修改窗口中通过'确认'按钮来修改数据 (上面的代码就是在这个按钮里面的)
在那个DBGrid控件里有好几条记录,我发现,当我修改了几条之后,
再继续修改,程序会提示修改不成功‘Update failed’,始终不知道是什么原因
 
简单的原理就是你想用cached update模式的话你的更新数据都在你
的内存里,没有提交到数据库中,而你更改的数据,在此时有可能被别人更改了,
这就导致你在提交数据的时候有些数据不可以更新,我想如果你经常遇到这种情况的话,
你就不要cached update了.
 
现在肯定不会存在别人修改了我刚刚修改的记录的情况
因为只有我一个人在用

会不会是我post之后,再修改,再post的问题?
 
我现在发现了什么情况下会出现这种错误

属性设置:
Query1.CachedUpdates=true

当我对某个记录修改后,第一次可以post成功,post之后接着ApplyUpdates也可以成功
但是如果我没有重新打开Query1的话,再post之后ApplyUpdates时就会出错
有点像刚刚 苦瓜 说的那种情况

但问题是:我既然都ApplyUpdates了,那为什么不重新打开Query的话就不能进行下一次的ApplyUpdates呢?
(post是没问题的,我试过了)
 
偶只知道:在Delphi IDE内尽量不要调试太多关于Cache的事,包括文件操作,
在IDE外直接Run程序
 
单看你的代码好像没有什么错误的样子
 
我也觉得奇怪,代码肯定没错的,因为第一次是可以修改的
 
多人接受答案了。
 
还有,为什么使用cached update后,我用post会很慢呢(前300条还算可以,之后就慢下来了,到700条时简直无法忍受)
 
后退
顶部