用Adodataset1+datasource+DbGrid
实现在DbGrid中的数据用户实时修改(含修改内容、增添多条记录)时并不能直接写入库中。只有当用户按一个命令按钮“保存“时才将数据写入表中。否则直接在表中修改的内容无效.
请高手给点代码,小弟是新手。

解决方案 »

  1.   

    是不是用所谓的啊?
    database1.StartTransaction;
      

  2.   

    刚开始的操作不与数据库连接,只对数据集进行操作,填充到数据集后一起入库procedure TWaterMgr.Add;
    begin
      with self.DataSet do
      begin
        append;
        FieldByName('yourfield').Value:=yourvalue;
        post;
      end;
    end;
    多次Add把要提交的数据填充到数据集里面,数据集与DBGrid相连
    然后UPdate数据集
    function TWaterMgr.Update: Integer;
    begin
      result:=self.UpdateDataSet('select * from yourtable','T_MonthWater',self.DataSet,[]);
    end;我的函数都是写好的,Update就是与数据库相连接一次
      

  3.   

    谢谢楼上的兄弟。
    可能我的过程要麻烦一些。对了,哪位高手能不告诉我用临时表怎么实现啊?
    是不是临时表的结构与相应的表结构一致啊!如果一致,怎样实现将当前对应的临时表中的内容保存到相应表中。用什么sql语句啊?
    我的库是Access 的。
      

  4.   

    将dataset的locktype设置为ltBatchOptimistic,相应的dbgrid就不能直接在表上进行增加和删除记录的操作,点击button以后统一post
      

  5.   

    可以用ADO控件的BatchUpdate模式。初始化:ADODataSet1控件CurSorType : KeySet ;
    LockType : BatchOptimistic ; 这样在修改完所有的数据库后并不立即保存到数据库。
    然后保存用 : ADODataSet1.UpdateBatch ; 取消用 :ADODataSet1.CancelBatch ;
      

  6.   

    按照上面说的应该没问题。如果还有疑问的话可以发邮件给我:[email protected]
    :)
      

  7.   

    创建临时表:
    adoquery1.sql.add(''select 字段1,字段2 ..., into #temp from 表名')
    adoquery1.ExecSQL
    查询时候:
    adoquery1.sql.add('select * from #temp');
      

  8.   

    没办法,级别低,提问题,没人顶,所以就您的话题,提一个自已的问题,别见怪,托福
    (2004-08-15 10:06:31)   星际飞尘(9024353)
    在Form中加入OpenPictureDialog对话框时,在程序设计阶段双击该控件能预Jpg览图像,而Run后确不能预览,而且死机?请问版主,这是为什么呢? 这是关于Delphi的问题
      

  9.   

    谢谢大家!按Delphinus(西瓜宝贝)兄弟的在取消当前输入的内容时出错!
    看来只有用临时表了。