在ADOQuery1AfterPost事件里能否得到ADOQuery1更新前和更新后的值(目前更新项目都是数字),或者有什么其他的办法,因为我的程序在ADOQuery1.post后还要执行sql语句,如果后面的语句执行失败,就把ADOQuery1更新前的值再更新回去!!
解决方案 »
- 入门请教:交互式显示
- 如何开发客户/服务器式的程序
- 有检测数据库是否存在的函数么?
- 关于 TFrame 的一些古怪问题
- 我用fastRepot3.0為什麼,文件會這麼大?
- 如果已经安装打印机了,怎么检测打印机的出错信息呢??
- 在线等!有满意答案就散分!!!请各位大虾帮忙
- ADOConnection的问题
- 现在还有用DBASE或FOXPRO编程的吗?学校里还一直在考这些东西呢。请大家说一说。
- 拿到一本机械工业出版社出版的老外写的 delphi com深入编程,不知有没有看过这本书的?
- KeyPress事件中怎样写按CTRL+C键的代码
- 昨晚在东莞惨遭飞抢, 运气好没被抢到, 散400分消灾(1)
procedure(Sender: TField; const Text: string);Text是正在编辑的值,原值就直接FieldByName
ADOQuery.Connection.BeginTrans;
ADOQuery.Post;
ADOQuery.Connection.CommitTrans ;
except
ADOQuery.Connection.RollbackTrans;
end;
ADOQuery.Connection.BeginTrans;
try
ADOQuery.Post;
其它的数据操作;
ADOQuery.Connection.CommitTrans ;
except
ADOQuery.Connection.RollbackTrans;
end;如果这个不是你想要的,那么在Query(QA)进行Post前。你要使用SQL语句在另一个Query(QB)中取得与你的QA相同的数据。
如果失败,那么根据QB中的数据重新写入QA。
try
ADOQuery.Post;
其它的数据操作;
ADOQuery.Connection.CommitTrans ;
except
ADOQuery.Connection.RollbackTrans;
end;
raise Exception.create('看你能不能保存');
试试。
变通的方式就是在BeforePost中根据主键先从数据库取得这条记录的值暂时保存在客户端。或是直接使用变量保存。然后在AfterPost后做你的检查。如果失败,那么提示用户,根据主键定位这条错误的记录把你在BeforePost中保存的数据重新写回去,然后要求用户重新编辑。不过我现在有另一个感觉,就是你的数据库设计有问题,你并没有使用键的约束来处理表之间的关系。
http://book.csdn.net/bookfiles/155/1001556632.shtml