我程序是c/s结构的,后台用的是sql server。我的一个录入界面上使用了两个TAdoQuery组件做为一对多录入的一方和多方,一方用的是dbedit,多方用的是dbgrid,现在我想自己控制修改,新增,删除等操作,但要求要有明确的触发才能进行相应操作,如保存必须要点击了保存按钮,而且前台数据符合要求才可以保存。我个人认为这可能要将前台数据加以缓冲,对事务要进行相应的commit及roolback操作,但是不知道在delphi中如何进行相应的操作才能加以实现。
(之所以用Tadoqery是因为我的表传到前台有参数限制,而且一方和多方都是多表连接形式的。)

解决方案 »

  1.   

    ADOQuery1:
      CursorLocation := clUseClient;
      CursorType := ctStatic;
      LockType := ltBatchOptimistic;ADOQuery1.UpdateBatch(arAll);ADOQuery1.CancelBatch(arAll);
      

  2.   

    是不是这样设置后,就只能够采用updatebatch及cancelbatch两种方式更新数据了,原来的post是不是就不行了.
    我的数据集中有些数据要更新,有些只是为了连接上给用户显示的基础数据,用了updatbatch后,是不是所有都会更新?前台delphi是在那里设置key的,更新依据是delphi自己管理的吗?
      

  3.   

    是不是设置了缓冲后,还是用edit做对相应表进行修改的开始呢?
      

  4.   

    照样 Post,只不过只 post 在本地
      

  5.   

    是的。
    另:
    你看一下 TADOQuery 有没有 ChangedCount/ChangeCount属性?
    有的话,可以通过该属性判断是否做过修改,以决定要不要保存或更新
      

  6.   

    to hiflower(花):您的意思是否是设置了缓冲后,所有的操作都是在本地的新增,删除,更新,如果要传送到后台,必须采用updatebatch(arall)或updatebatch(arall)
    ,这样的话,我的自增字段的值什么时候会产生呢?
      

  7.   

    我想了想,如果我先从后台把自增字段的值取回来,并且用其将前台的主、从表都用取回的值加一进行更新,最后将其一次性写入后台中。但是其中有两个问题:
    1、怎样保证如果主表或从表有任一方出问题,所有事务都roolback
    2、怎样保证我从取值到完成回写这段时间内没有别的用户新增记录。