一个新手的问题,请帮帮忙吧!

westbulls 2003-10-05 03:12:28
我程序是c/s结构的,后台用的是sql server。我的一个录入界面上使用了两个TAdoQuery组件做为一对多录入的一方和多方,一方用的是dbedit,多方用的是dbgrid,现在我想自己控制修改,新增,删除等操作,但要求要有明确的触发才能进行相应操作,如保存必须要点击了保存按钮,而且前台数据符合要求才可以保存。我个人认为这可能要将前台数据加以缓冲,对事务要进行相应的commit及roolback操作,但是不知道在delphi中如何进行相应的操作才能加以实现。
(之所以用Tadoqery是因为我的表传到前台有参数限制,而且一方和多方都是多表连接形式的。)
...全文
31 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiflower 2003-10-05
  • 打赏
  • 举报
回复
我认为这是不可行的。
如果你的客户程序对这个自增字段很敏感,还是新增记录后就提交比较好。
如果不敏感,那就无所谓了,修改完成后一起提交
westbulls 2003-10-05
  • 打赏
  • 举报
回复
我想了想,如果我先从后台把自增字段的值取回来,并且用其将前台的主、从表都用取回的值加一进行更新,最后将其一次性写入后台中。但是其中有两个问题:
1、怎样保证如果主表或从表有任一方出问题,所有事务都roolback
2、怎样保证我从取值到完成回写这段时间内没有别的用户新增记录。
hiflower 2003-10-05
  • 打赏
  • 举报
回复
自增字段的值就没办法了,也只能提交到数据库后才能产生
westbulls 2003-10-05
  • 打赏
  • 举报
回复
to hiflower(花):您的意思是否是设置了缓冲后,所有的操作都是在本地的新增,删除,更新,如果要传送到后台,必须采用updatebatch(arall)或updatebatch(arall)
,这样的话,我的自增字段的值什么时候会产生呢?
DeltaCat 2003-10-05
  • 打赏
  • 举报
回复
是的。
另:
你看一下 TADOQuery 有没有 ChangedCount/ChangeCount属性?
有的话,可以通过该属性判断是否做过修改,以决定要不要保存或更新
hiflower 2003-10-05
  • 打赏
  • 举报
回复
照样 Post,只不过只 post 在本地
westbulls 2003-10-05
  • 打赏
  • 举报
回复
另外,如果我把一方更新后,我肯定要就多方与一方连接的关键字这要更新,有什么方法吗?
westbulls 2003-10-05
  • 打赏
  • 举报
回复
是不是设置了缓冲后,还是用edit做对相应表进行修改的开始呢?
westbulls 2003-10-05
  • 打赏
  • 举报
回复
是不是这样设置后,就只能够采用updatebatch及cancelbatch两种方式更新数据了,原来的post是不是就不行了.
我的数据集中有些数据要更新,有些只是为了连接上给用户显示的基础数据,用了updatbatch后,是不是所有都会更新?前台delphi是在那里设置key的,更新依据是delphi自己管理的吗?
hiflower 2003-10-05
  • 打赏
  • 举报
回复
ADOQuery1:
CursorLocation := clUseClient;
CursorType := ctStatic;
LockType := ltBatchOptimistic;

ADOQuery1.UpdateBatch(arAll);

ADOQuery1.CancelBatch(arAll);

5,388

社区成员

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

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