比如在一个简单的数据库引用中嘛,
    一个ttable,一个DATASOURSE,一个dbgrid
    我现在用table.delete删除一个记录,然后用post写回磁盘,提示not in edit mode, 我用Table1.ApplyUpdates  提示 :index in read only,也不能写回磁盘。
        用table.commitupdate也是一样。这应该这么改呢。
  index in read only是为什么呢,或者说用post可以吗,怎么修改。。
         谢谢。

解决方案 »

  1.   

    在table.delete 上面加一句table.edit;
    这样子嘛。
    table.edit;
    table.delete;
    table.post;
      

  2.   

    table.delete就可以了不用post
      

  3.   

    其实我觉得用updateBatch比较好.:) 楼主, 我还只一星给几分吧.
      

  4.   

    table.edit;
    table.delete;
    table.post;
    这样的结果是:dataset not in edit or insert mode
    这是怎么回事啊。。继续求解答
    搞定了一定给分啊。。
      

  5.   

    我也遇到过差不多的问题,我建议你最好不用TABLE组件,用QUERY删除你可以这样写with query do
    begin
       close;
       sql.clear;
       sql.add('delete from table_name where Id='+#39+edit1.text+#39);
       execsql;
    end;where id= ...
    这就是你的删除条件。这个方法一定不会错。
      

  6.   

    用query确实没的问题,不过我想学习一下table,看看究竟是怎么回事啊。
    我是将updatecache设为true,所以delete后不会写回磁盘吧。
    我的程序中,我是希望比如点击删除按钮后用table.delete直接删除,但是要等到
    点击Save按钮的时候才写回磁盘。我开始是希望用table.post,这个肯定不行嘛,
    后来又是在table.delete前加一个table.edit;这样也不行,也是说dataset not in edit mode;
    后来又用table.applyupdates和table.commitupdates这样也不行,提示是index in read only,
    这就搞的我郁闷惨了。
    希望哪位大虾给点意见。
      

  7.   

    : yu98041154(雕花溅泪) 说得对极了, table.delete后不用再使用Post.
      

  8.   

    table.delete删除一个记录
    不要Post;如果用缓存更新的话就要
    table.applyupdates;否则table.delete;
    就够了;
      

  9.   

    只需要:
      Table1.edit;
      Table1.delete;
    即可
      

  10.   

    DCT老兄,如用用applyupdates的话,会产生一个index is read only的错误,
    这个问题又怎么解决啊
      

  11.   

    下面就是我的代码:
    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.Edit;
      DataModule1.Table1.Delete;
      Change:=True;
    end;procedure TMainForm.Button_OkClick (Sender: TObject);
    begin
      if (DataModule1.Table1.Modified = true) or (Change = True) then
      //DataModule1.Table1.Post;
      MainForm.Close;
    end;
    procedure TMainForm.Button_AddClick(Sender: TObject);
    begin
      Application.CreateForm(TForm1, Form1);
    end;
    procedure TMainForm.Button_SaveClick(Sender: TObject);
    begin
      if (DataModule1.Table1.Modified = true) or (Change=True) then
      begin
       // DataModule1.Table1.Post;
       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.
      

  12.   

    table1.State:=dsEdit; //进入编辑姿态
      table1.Post;  //缓存更新
      table1.Active:=false;   //关闭再打开可确保写入磁盘了
      table1.Active:=true;
      

  13.   

    如果你用删除的话,就什么都不用了
    该怎么往下做就直接写别的代码就行了,它自动post