数据库编程中使用table控件将cacheupdate设为true;
   当使用  table1.delete;后
   再调用  table1.post;就会发生一个错误。
提示是dataset不是在edit状态,这里应该怎么设置呢
应该怎么修改才能使post正常呢,或者说怎么是delete操作后,能够写回磁盘啊

解决方案 »

  1.   

    delete后不要post
    直接提交就可以了commit;
      

  2.   

    直接delete不用post
    edit,append,insert后才用post
      

  3.   

    delete不要post
    直接用delete就行了
      

  4.   

    不行啊,cacheupdate设为true,直接delete不能写回磁盘的。
    commit怎么用啊。不行啊。
      

  5.   

    帮助的一段procedure TForm1.ApplyButtonClick(Sender: TObject);begin
      with CustomerQuery do
      begin
      Database1.StartTransaction;
        try
          ApplyUpdates; {try to write the updates to the database};
          Database1.Commit; {on success, commit the changes};
        except
          Database1.Rollback; {on failure, undo the changes};
        raise; {raise the exception to prevent a call to CommitUpdates!}
        end;
      CommitUpdates; {on success, clear the cache}
      end;end;
      

  6.   

    纳闷,搂住为什么delete后非要post?
      

  7.   

    你大概刚用delphi吧,请记住不管你在任何情况下执行post请一定检查它的状态:if table1.state in [dsInsert, dsEdit] then
        table.post;
      

  8.   

    并且你这个问题而言,post是没有用的,缓存更新要执applyupdate才能真正提交更改和删除。
      

  9.   

    呵呵。都知道啊。
    不用post。
      

  10.   

    下面就是小弟的部分代码:一run他就提示index is read only,郁闷ing
    unit main;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, DB, DBTables, StdCtrls,Addnew,DATAModle;type
      TMainForm = class(TForm)
        DBGrid1: TDBGrid;
        Button_Add: TButton;
        Button_Del: TButton;
        Button_Ok: TButton;
        Button_Find: TButton;
        Button_Save: TButton;
        procedure Button_DelClick(Sender: TObject);
        procedure Button_OkClick(Sender: TObject);
        procedure Button_AddClick(Sender: TObject);
        procedure Button_SaveClick(Sender: TObject);
        procedure Button_FindClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      MainForm: TMainForm;
      Change:Boolean;implementationuses Search;{$R *.dfm}procedure TMainForm.Button_DelClick(Sender: TObject);
    begin
      if DataModule1.Table1.IsEmpty=true then
        exit
      else
      DataModule1.Table1.Delete;
      Change:=True;
    end;procedure TMainForm.Button_OkClick (Sender: TObject);
    begin
      if DataModule1.table1.state in [dsInsert, dsEdit] then
        DataModule1.table1.post;
      if Change=True then
      begin
        DataModule1.Table1.ApplyUpdates;
        Change:=False;
      end;
    end;
    procedure TMainForm.Button_AddClick(Sender: TObject);
    begin
      Application.CreateForm(TForm1, Form1);
    end;
    procedure TMainForm.Button_SaveClick(Sender: TObject);
    begin
      if DataModule1.table1.state in [dsInsert, dsEdit] then
        DataModule1.table1.post;
      if Change=True then
      begin
        DataModule1.Table1.ApplyUpdates;
        Change:=False;
      end;
    end;procedure TMainForm.Button_FindClick(Sender: TObject);
    begin
      Application.CreateForm(TSearchForm, SearchForm);
    end;procedure TMainForm.FormCreate(Sender: TObject);
    begin
      Change:=False;
    end;end.
      

  11.   

    delete后不要post
    直接提交就可以commit;
    还有,一般post前面对应的是edit
      

  12.   

    delete 后不用post 
    post一定要在insert 或edit 状态下。post之前要先检查是否处于这两种状态
      

  13.   

    非常同意思楼上各位高手的建议!!!楼主COME ON !!!DO it!!