有关OnUpdateRecord和TUpdateSql的问题。(50分)

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

DancingAgain

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库:Paradox
对一个TQuery1进行修改,将TQuery1.updateobject设为UpdateSql1.
若不写其的OnUpdateRecord事件,则可正常修改。即自动执行了UpdateSql1的apply。
但现在由于要对两个表进行修改,所以需要另一个UpdateSql2.
并且要写OnUpdateRecord事件,
帮助上说由TQuery1.updateobject:=UpdateSql1.联系的UpdateSql1的sql语句自动执行,
但我的程序的结果却是没有执行。
(UpdateSql2在OnUpdateRecord事件中用apply执行了)
请问这是为甚麽?(是我没正确理解帮助?)
 
OnUpdateRecode 事件是自定义Update过程的事件,
如果OnUpdateRecode 事件如果为空, 则执行默认的Update方法。
如果OnUpdateRecode 事件如果不为空, 则执行自定义的Update方法。
 
但帮助中明明说在OnUpdateRecode 事件中
“If you use the dataset component抯 UpdateObject property to associate dataset and update object,
this method is called automatically.
do
not call Apply in a handler for the dataset component抯 OnUpdateRecord event
as this will result in a second attempt to apply the current record抯 update.”
是我理解有问题吗?
 
对不起, 忘了这个帖子, 我试了一下,发现是UpdateSql1更本上就没有执行。
你试着这样变更UpdateSql1中的SQL 语句, 使其如果执行一定会出错, 运行检测是否会报错, 结果是你如果有OnUpdateRecoderEvent, 进行断点和单步跟踪, 发现
更本就不会触发错误的SQL语句。 (总之, 多试几种方法)。

解决方法 :
OnUpdateRecordEvent :
procedure TForm1.Query1UpdateRecord(DataSet: TDataSet;
UpdateKind: TUpdateKind;
var UpdateAction: TUpdateAction);
begin
try
UpdateSQL1.DataSet:= Query1;
UpdateSQL1.Apply(UpdateKind);
UpdateSQL2.DataSet:= Query1;
UpdateSQL2.Apply(UpdateKind);
UpdateAction := uaApplied ;
except
UpdateAction := uaFail ;
end
end;

为什么这样一时半会也讲不清楚, 你先试一下.
 
帮助是为了对付使用单个UPDATESQL的更新,请看《DELPHI自入门到精通》
李维,提出在ONUPDATERECORD,全部更新UPDATESQL1,UPDATESQL2,不
理会AUTOMATED的APPLY
 
解决的怎么样了?
 
多人接受答案了。
 
后退
顶部