将 LockType设置成ltBatchOptimistic就可以了!

解决方案 »

  1.   

    而且ADOTABLE根本就没有CACHEUPDATE这个属性!
      

  2.   

    是的,我刚才说错了,对不起,
    我就是将 LockType设置成ltBatchOptimistic,可是不灵
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Buttons, Db, Grids, DBGrids, ADODB;type
      TForm1 = class(TForm)
        ADOTable1: TADOTable;
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        BitBtnAdd: TBitBtn;
        BitBtnSave: TBitBtn;
        procedure BitBtnAddClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure BitBtnSaveClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.BitBtnAddClick(Sender: TObject);
    begin
      ADOTable1.Append;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      ADOTable1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=YourDBName;Data Source=SERVER';
      ADOTable1.TableName := 'YourTableNanme';
      ADOTable1.Open;
    end;procedure TForm1.BitBtnSaveClick(Sender: TObject);
    begin
      ADOTable1.UpdateBatch;
    end;end.
      

  4.   

      谢谢peacock的回答,我的问题没有写清楚,对不起,
    我在DBGRID的列离开事件里,有TABLE.EDIT,有这段代码后,上下左右反复移动记录,记录就会消失,重新输入一条记录,以前记录又会显示出来。
      希望高手在百忙中帮忙给予解答,小弟万分感激!!!
      

  5.   

    你在DBGRID的列离开事件里,用TABLE.EDIT干嘛?
      

  6.   

    你用Edit是多余的,在Append事件后,就可以修改和添加记录了!
      

  7.   

    我的程序如下,我需要在列离开时,用HAVE函数判断输入的编码是否存在,不存在时返回空赋到当前字段,所以必须用EDIT,如果不用,总提示DATASET不处于修改和插入状态!procedure TFrmGetpayment.DBGrid1ColExit(Sender: TObject);
    begin
      DM.TblGetpayment.Edit;
      if DBGrid1.SelectedField.FieldName = 'InOutMode' then
        DBGrid1.SelectedField.Value := Have('InOutFile','InOutCode',DBGrid1.SelectedField.Value,'And InOutType=''InOutMode'' And StopFlag = False');
    end;
      

  8.   

    我的问题自己解决了,谢谢peacock的答复!
     我把程序修改如下
     procedure TFrmGetpayment.DBGrid1ColExit(Sender: TObject);
    begin
      if( DBGrid1.SelectedField.FieldName = 'InOutMode')And (TblGetPayment.Stat = dsInsert or TblGetPayment.Stat = dsEdit) then
        DBGrid1.SelectedField.Value := Have('InOutFile','InOutCode',DBGrid1.SelectedField.Value,'And InOutType=''InOutMode'' And StopFlag = False');
    end;