提示:  ADOStoredProc1:DataSet not in edit or insert mode怎么办,怎么办?急,在线等待~~`

解决方案 »

  1.   

    我只是想修改本地数据源怎么办啊?过了2天都没人回答现在csdn怎么了?
      

  2.   

    ReadOnly 为TRue了,应为False
      

  3.   

    认真检查下,看是不是因为ADO的属性中ACTIVE是不是到该执行的时候还没有在打开状态。
      你可以在出错的地方上加上
      if adoQuery.active then
      showmessage('1');
      

  4.   

    先ADOStoredProc1.Open然后再修改就行了.
      

  5.   

    我前两天刚遇到这个问题,其实上面的语句翻译出来就是说DataSet 没有在编辑的插入的状态,你这样设置就行。
      DataSource1.DataSet:=adoquery1;
      DataSource1.DataSet.Edit;
      

  6.   

    你為什麼用store控件呀,不能用adoquery,嗎
      

  7.   

    if not DataSource1.DateSet.edit
    then DataSource1.DateSet.edit
      

  8.   

    if not DataSource.Dateset.State in [deedit,dsinsert] then
     DataSource.Dateset.Edit;
      

  9.   

    insert or edit ... ...
      

  10.   

    各位大大
    我使用DataSource1.DateSet.edit以后已经能够解决哪个问题了但是还是不能修改数据源.错误提示是:错误:field 'XXXX' cannot be modified
    其中XXXX是我想修改的字段名
    怎么办?惨~
      

  11.   

    你查看字段属性是不是ReadOnly
      

  12.   

    procedure TMainForm.ToolButton1Click(Sender: TObject);
    var Mc: String;
        Tc,SXz,Bl: integer;
    begin
      ADOStoredProc1.Parameters.Clear;
      ADOStoredProc1.ProcedureName:='rep_zy_DoctorTj';
    with ADOStoredProc1.Parameters.AddParameter do //追加入参数
    begin
      Name := '@BeginTime';
      DataType := ftDateTime;
      Direction := pdInput;  //in
      Value:=DateTimePicker1.DateTime;
    end;
    with ADOStoredProc1.Parameters.AddParameter do //追加入参数
    begin
      Name := '@EndTime';
      DataType := ftDateTime;
      Direction := pdInput;  //in
      Value:=DateTimePicker2.DateTime;
    end;
        ADOStoredProc1.Prepared;
        ADOStoredProc1.ExecProc;
        ADOStoredProc1.Open;
        ADOQuery1.SQL.Clear;
        ADOQuery1.Close;
        ADOQuery1.SQL.Add('select * from XzBtcbl order by Tcdm');
        ADOQuery1.Open;
        DataSource3.DataSet.Edit;
        if not DataSource1.DataSet.Eof then
        begin
          if not ADOQuery1.Eof then
          begin
            Mc := Trim(ADOQuery1.FieldByName('Tcmc').AsString);
            Bl := ADOQuery1.FieldByName('Tcbl').AsInteger;
            Sxz := DataSource1.DataSet.FieldByName(Mc).AsInteger;    
            Edit1.Text := Mc;
            Edit2.Text := IntToStr(Sxz);
            Tc := SXz*Bl;
            Edit3.Text := IntToStr(Tc);
            DataSource3.DataSet.FieldByName(Mc).AsInteger := Tc;
            ADOQuery1.Next;
          end;
          ADOQuery1.First;
          DataSource1.DataSet.Next;
        end;
        DBGrid4.DataSource := DataSource3;
        DBGrid4.Refresh;
    end;
    这是我的代码啦
    不可能是ReadOnly的啊
      

  13.   

    DataSource3.DataSet.FieldByName(Mc).AsInteger := Tc;前面加上DataSource3.DataSet.FieldByName(Mc).ReadOnly := False;
      

  14.   

    还有就是你修改的字段在数据库中是否是一个常量,如果是在你的SQL再封装一次
    比如:select * from (select * from XzBtcbl order by Tcdm)
      

  15.   

    非常感谢兄弟们的支持小弟刚学Deiphi  多谢大家哦