采用缓存模式的Dataset如何一次性进行所有行的数据合法性校验?

NetCobra 2003-01-14 10:37:18
主从表结构,子表采用缓存更新模式,在保存前我想手工检查Detail中每一行的数据合法性(不能完全由数据库来进行检查,某些数据库中可以为空的字段在业务上不允许为空,但是数据库结构已经不可更改),但是现在有一个问题,我在保存中是这样写的:
if not DetailDataIsValid() then
Abort;

if AQryDetail.State in dsEditModes then //如果用户在没有修改子表则子表
//不需要Update
begin
AQryDetail.Post;
AQryDetail.UpdateBatch();
end;

在作Detail的数据合法性检验中我对AQryDetail进行了遍历,但是单步跟踪的结果发现,在作遍历的时候,只要改变了Dataset的当前行(First、Next等等),就会是AQryDetail的State变成dsBrowse,因此子表数据就不会保存了。

请问各位大虾有什么更好的办法没有?先谢过了!!!
...全文
47 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NetCobra 2003-01-14
  • 打赏
  • 举报
回复
原来如此,非常感谢!!!
TOMWLD 2003-01-14
  • 打赏
  • 举报
回复
Post只是将数据保存在内存中,UpdateBatch才是真正将数据保存到物理数据库中
NetCobra 2003-01-14
  • 打赏
  • 举报
回复
谢谢,在缓存更新模式下Post和UpdateBatch各做的什么操作?
TOMWLD 2003-01-14
  • 打赏
  • 举报
回复
那是post时出现的错误,不关UpdateBatch的事,代码改成如下这样就可以了:
if not DetailDataIsValid() then
Abort;

if AQryDetail.State in dsEditModes then //如果用户在没有修改子表则子表
//不需要Update
begin
AQryDetail.Post;

end;
AQryDetail.UpdateBatch();
NetCobra 2003-01-14
  • 打赏
  • 举报
回复
不行,如果没有修改,作提交的时候就会提示AQryDetail: Dataset not in edit or insert mode错误
TOMWLD 2003-01-14
  • 打赏
  • 举报
回复
不管有无修改,调用一次UpdateBatch并不会牺牲什么效率的

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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