数据提交问题:一个统计的方法放在Post语句之前出错,而放在Table的BeforePost中就能通过,这是为什么?

Snakeguo 2002-03-27 11:55:38
我用ADO做了一个主子表的输入结构,首先打开事务,新增一条主表记录,然后新增多条子表记录,由于定义了数据库关系,(*所以子表新增之前主表必须有相关的记录,先Post了主表一次*),最后保存前统计子表中的金额到主表的相关字段,然后主表Post,提交事务。

...
SumSomething;(此过程只修改几个字段的值,并无Post主表)
MainTable.Post;//出错,错误是:无法为更新行集定位,一些值已在最后读取后改变。(两句代码之间并无执行任何别的操作)
...

然而只要把SumSomething放在MainTable的BeforPost事件中就能安全通过!而且这个错误只会在新增的时候出现,就是说与(**)中的操作有关,但我却百思不得其解,请大家赐教。谢谢!
...全文
24 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Snakeguo 2002-03-28
  • 打赏
  • 举报
回复
有谁遇到过同样的情况吗?
yixia 2002-03-27
  • 打赏
  • 举报
回复
post 主表后,的refresh 后在在细表里在增加纪录。

我做了一个是
先让客户在主表里添加纪录
然后在后面一个窗体中,显示主表内容,对应的向细表添加纪录。
用的query
你不妨也把两个添加做开。
chinajavis 2002-03-27
  • 打赏
  • 举报
回复
with MainTable do
begin
Open;
Last;
Append;
Edit;
FieldByName( '...' ).asstring := '...';
FieldByName( '...' ).asinteger := ...;
FieldByName( '...' ).asfloat := ...;
...
Post;
处理子表;
SumSomething;
Edit;
FieldByName( '...' ).asstring := '...';
FieldByName( '...' ).asinteger := ...;
FieldByName( '...' ).asfloat := ...;
...
Post;
Close;
end;
forgot 2002-03-27
  • 打赏
  • 举报
回复
你可能定义了主外键约束吧。其实你完全可以把SumSomething;放在Beforepost或者Beforeinsert中完成,事务处理中写if AdoQuery1.state is in [dsedit,dsinsert] then AdoQuery1.post就行了,SumSomething;自动会
调用,你根本不用担心。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧