我用ADO+sqlserver操作数据库...用adoquery 连接插入记录...把adoquery的 looktype 改为ltBatchOptimistic.但每次post 后.dbgrid只能显示最后一条post的记录,之前插入的就没见到了.是怎么回事呢????

解决方案 »

  1.   


    1.从表的数据控件改为存缓操作模式,即将ADODataSet控件的locktype属性设为:ltBatchOptimistic. 
    2.今后操作完资料要这样提交:ADODataSet1.UpdateBatch;或取消提交:ADODataSet1.CancelBatch; 
      其中两个方法是有参数的,以UpdateBatch举例,另一个自已领误 
      arCurrent 目前变动的记录更新回资料库 
      arFiltered 只能符合过滤条件并且有变动的资料更新回资料库 
      arAll 把所有变动的记录更新回资料库(默认参数) 
      arAllChapters 更新所有被影响的Chapters 
    3.要得到上次新增的记录,只要用以下方法: 
     ADODataSet1.Filtered:=true;
     ADODataSet1.FilterGroup:=fgAffectedRecords;4:其中FilterGroup值的说明以下: 
     fgUnassigned 还用过滤 
    fgNone 取消过滤条件 
    fgPendingRecords 有改动尚未提交的记录 
    fgAffectedRecords 显示上次更新回数据表的记录 
    fgFetchedRecords 显示目前有异动保存在内存中的记录 
    fgPredicate 显示被删除的资料 
    fgConflictingRecords 显示有改动在更新回资料表时发生错误的记录 5:建议与事务操作结合在一起,可以在发生错误时回滚数据. 
      

  2.   


    1.从表的数据控件改为存缓操作模式,即将ADODataSet控件的locktype属性设为:ltBatchOptimistic. 
    2.今后操作完资料要这样提交:ADODataSet1.UpdateBatch;或取消提交:ADODataSet1.CancelBatch; 
      其中两个方法是有参数的,以UpdateBatch举例,另一个自已领误 
      arCurrent 目前变动的记录更新回资料库 
      arFiltered 只能符合过滤条件并且有变动的资料更新回资料库 
      arAll 把所有变动的记录更新回资料库(默认参数) 
      arAllChapters 更新所有被影响的Chapters 
    3.要得到上次新增的记录,只要用以下方法: 
     ADODataSet1.Filtered:=true;
     ADODataSet1.FilterGroup:=fgAffectedRecords;4:其中FilterGroup值的说明以下: 
     fgUnassigned 还用过滤 
    fgNone 取消过滤条件 
    fgPendingRecords 有改动尚未提交的记录 
    fgAffectedRecords 显示上次更新回数据表的记录 
    fgFetchedRecords 显示目前有异动保存在内存中的记录 
    fgPredicate 显示被删除的资料 
    fgConflictingRecords 显示有改动在更新回资料表时发生错误的记录 
    5:建议与事务操作结合在一起,可以在发生错误时回滚数据. 
      

  3.   

    下一个adoquery1.UpdateBatch()就行了,
    然后,adoquery1.close;
         adoquqery1.open;
      

  4.   

    再重一次:procedure TForm1.Button1Click(Sender: TObject);
    begin
     {新增}
     ADOQuery1.Append;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
     {暂存}
    adoquery1.Post;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
     {保存到数据库}
     adoquery1.UpdateBatch();
      adoquery1.close; 
      adoquqery1.open;
    end;
      

  5.   

    当执行  adoquery1.updatebatch()的时候,该条记录已经被保存在了数据表了呀,,,不是我想要的结果,,,最好能一次性保存
      

  6.   

    晕!你这样操作:
    输入-->暂存-->输入-->暂存,到最后只按一次保存到数据库这样就是批量保存拉
      

  7.   


    你是指每次插入后都用暂存.post。dbgrid里面只能显示最后一条呀。
      

  8.   

    举例:
    1.我的ADQOQUERY控件的SQL句是:select * from x_eng 即显示表名为X_ENG的所有记录.
    2.然后我新增一条记录,输入完后,我按下暂存按钮,这条新的记录就会在dbgrid的最后行,当然之前的记录也会同时显示出来.
    3.当我发现有错,需要改动或删除记录时,我就修改记录,需要删除的我就删除.
    4.好了,我认为全部OK了,可以真正写到数据库了,我就按一下保存到数据的按钮,这样所有新增或修改的记录就会一次地保存到数据库.
      

  9.   


    现在主要的问题就是。新增了一条记录暂存,DBGRID显示的前一条记录就没了,也就是DBGRID里面只能显示一条记录。。真搞不懂。
      

  10.   

    那你详细说一说你的
    1.用了什么数据控件是ADOQUERY还是其它?
    2.如果是ADOQUERY那么SQL是什么?
    2.其它重要的属性设了些什么?
      

  11.   

    我用的是sqlserver 2000  adoquery1 里面的内容是:select * from  表  where 单号=:@dh
    adoquery1.Close;
    adoquery1.Parameters.ParamByName('@dh').Value:='888' ;
    adoquery1.Open;
    adoquery1.Insert;
    adoquery1.FieldByName('dh').Value:=DBEdtnum.Text;
    ...
    ...
    try
      adoquery1.post;
     except
       showmessage('保存失败');
    end;
      

  12.   

    1.感知控件DataSource1的DAtaset是指向adoquery12.DBEdtnum
       设好属性DataSource要连接的应知控件(DataSource1)
       然后设置DataField属性其相关连的字段为dh
    3.DATAGRID的DataSource设置为:DataSource1.4.新增的按钮写入代码:if not adoquery1.Active then begin
       adoquery1.Parameters.ParamByName('@dh').Value:='888' ;
       adoquery1.Open;
     end;
     adoquery1.Append;
    5.在DBEdtnum输入内容后,按下保存.
      

  13.   

    我想是我的程序出了点问题,我刚刚新建了一个项目,用access数据库来试着操作发现没问题 谢谢了~~~
      

  14.   

    呵呵。问题找到了。真的谢谢你了~~~每次在增加记录之前,我有一个adoquery1.close 后再打开adoquery1.open 所以之前的记录全没了