DBGrid1--DataSource1--ADODataSet1--通过adoConnect组件联到一个普通的表
设置DBGrid1.Options可选择多行(dgMultiRows、dgEditing....)程序运行时可以手动对DBGrid1中的字段值进行修改,并自动更新到数据表中
但是当选择了多行后,在程序中进行如下操作
就会在//@处报错:'DataSet not in Edit or Insert mode'那么:1、为什么这句没起作用 DBGrid1.DataSource.DataSet.Edit ;      2、有什么方法可在DBGrid1中选择了多行后,对其中的字段修改后更新到表中?或者是由于有Book的原因不能这样做?if DBGrid1.SelectedRows.Count>0 then
    with DBGrid1.DataSource.DataSet do
    begin
      Edit ;      for i:=0 to DBGrid1.SelectedRows.Count-1 do
      begin
        GotoBook(pointer(DBGrid1.SelectedRows.Itemsi])); 
        //***方法一:
        DBGrid1.Fields[2].Value := DBGrid1.Fields[2].AsInteger + 2; //@
        //***方法二:
        temp := FieldByName('myField').AsInteger;
        FieldByName('myField').AsInteger := temp + 2;           //@
       
      end;//for
    end;//withDBGrid1.DataSource.DataSet.Post;

解决方案 »

  1.   

    1、每一次gotobook都会引起记录的移动,并且原来的修改系统默认自动存盘,状态改为DsBrowse,因此,每一次移动后,都要有新的edit命令
     for i:=0 to DBGrid1.SelectedRows.Count-1 do
          begin
            GotoBook(pointer(DBGrid1.SelectedRows.Itemsi]));
            DBGrid1.DataSource.DataSet.Edit;//这句是必需的
            //***方法一:
            DBGrid1.Fields[2].Value := DBGrid1.Fields[2].AsInteger + 2; //@