OnUpdateRecord事件出错(100分)

  • 主题发起人 主题发起人 zhyan
  • 开始时间 开始时间
Z

zhyan

Unregistered / Unconfirmed
GUEST, unregistred user!
有一主从表,提交主表正确,从表中有OnUpdateRecord事件,该事件中没有做任何处理,只有一行注释(//...... ),每次提交从表均提示错误信息:“Table is read only”,提交失败,若没有该事件,则主从表提交均正确。这是什么原因?
提交的语句如下:

database1.StartTransaction;
try
wwRecieved.ApplyUpdates;
wwRcvdDetail.ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
MessageDlg('数据提交失败,请重试!', mtInformation,[mbOk], 0);
raise;
end;
wwRecieved.CommitUpdates;
wwRcvdDetail.CommitUpdates;

环境如下:
Oracle 7.3 for NT + Delphi 4
 
看来只能算成Delphi的Bug了.
 
把你的代码用下面的试试:
database1.StartTransaction;
try
wwRecieved.ApplyUpdates;
wwRecieved.CommitUpdates;
wwRcvdDetail.ApplyUpdates;
wwRcvdDetail.CommitUpdates;
Database1.Commit;
except
Database1.Rollback;
MessageDlg('数据提交失败,请重试!', mtInformation,[mbOk], 0);
raise;
end;
 
真的没人遇到过这样的问题吗?
 
从表先Edit一下试试
 
呵呵, 应该是TBDEDataSet.OnUpdateRecord的bug:-(
 
trace for the status of the detail table
 
database1.StartTransaction;
try

wwRcvdDetail.ApplyUpdates;

///////////////^^^^^^^^^^^^^
// 是不是应该把DETAIL先APPLYUPDATES, 再UPDATE MASTER。
///////////////

wwRecieved.ApplyUpdates;

Database1.Commit;
except
Database1.Rollback;
MessageDlg('数据提交失败,请重试!', mtInformation,[mbOk], 0);
raise;
end;
wwRecieved.CommitUpdates;
wwRcvdDetail.CommitUpdates;
 
你定义了onupdaterecord(尽管你只写了一行注释), 这个过程替换了原先
向数据库中写的过程啦. 所以出错.
并不是bug.
delphi可以通过onupdaterecord事件定义复杂的修改关系. 比如可以实现
用DBGrid对多表query的只读结果集进行修改(针对query中一行的修改需要
运行多句update同时修改多个表).
 
呵呵, 是吗, 看来以后注释要少写了:-)
 
接受答案了.
 
后退
顶部