我的完全代码如下,要求根据用户在picklist下拉框的不同选择,改变不同数据格里的值,注意不是只改当前纪录行,是任意行的记录。中间涉及到当前记录行的切换。前面代码都没问题了,就是要存库时报错!!我也知道要ADOQuery.edit,但还是总出错?
是不是ADOQuery.first,moveby,next等也要edit?我调试时发现post语句执行没有错,乃至DBGridEh_BijiaoColumnsUpdateData整个过程都执行完都没错,而且到sql里看数据库表里的值也都更改而且存了!!!但在这个过程执行完后,要调用DBGridEh里的UpdateValues时出错!!说‘dataset not in edit or insert’,肯定不是控件的错,但不知道错哪里了。帮帮忙!!
procedure TForm_Bijiao.DBGridEh_BijiaoColumnsUpdateData(Sender: TObject;
  var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var
  s:String;
  m,n,i:integer;
begin
  if DBGridEh_Bijiao.SelectedIndex > 0 then
  begin  for i:=0 to DBGridEh_Bijiao.ComponentCount-1 do
     if DBGridEh_Bijiao.Components[i] is TInplaceEdit then
       s:= TEdit(DBGridEh_Bijiao.Components[i]).Text;  m:=DBGridEh_Bijiao.Row-1;
  n:=DBGridEh_Bijiao.Col-1;
  n:=(n-1) DIV 2;  if s='极其重要' then
  begin    DBGridEh_Bijiao.SelectedField.Value:=s;   //将当前编辑格的值写进库    if n=0 then
      ADOQuery_Bijiao.First
    else   ADOQuery_Bijiao.MoveBy(n-m);     //移动当前记录到指定行
ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要';    //写指定格的值    if not (ADOQuery_Bijiao.State in [dsEdit, dsInsert]) then ADOQuery_Bijiao.Edit;
    
    ADOQuery_Bijiao.Post;  end;  end; {if DBGridEh_Bijiao.SelectedIndex > 0}
end;{procedure}

解决方案 »

  1.   

    别就知道笑啊,代码都在上面了,请说说具体怎么操作好吗?post后edit?晕。if not (ADOQuery_Bijiao.State in [dsEdit, dsInsert]) then ADOQuery_Bijiao.Edit;
        
        ADOQuery_Bijiao.Post;    ADOQuery_Bijiao.Edit;
    这样?
      

  2.   

    ADOQuery_Bijiao.Edit;
      ADOQuery_Bijiao.Post;
      

  3.   

    我晕,上面我说的很清楚啊,我知道要edit的,而且我的代码中有这一行啊:if not (ADOQuery_Bijiao.State in [dsEdit, dsInsert]) then     ADOQuery_Bijiao.Edit;
        
        ADOQuery_Bijiao.Post;
      

  4.   

    if not (ADOQuery_Bijiao.State in [dsEdit, dsInsert]) then ADOQuery_Bijiao.Edit;放在对ADOQuery_Bijiao修改之前。
      

  5.   

    for块里面
    ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要';    //写指定格的值这句话之前要先edit!再赋字段值
    楼主你太不仔细了!
      

  6.   

    赋字段值前先要edit,edit后立即附值,不要插入其他操作,赋字段值后立即在post.一定可以通过!
      

  7.   

    楼主试试先ADOQuery_Bijiao.Edit;
    然后再修改数据
    再:ADOQuery_Bijiao.Post;
      

  8.   

    if not (ADOQuery_Bijiao.State in [dsEdit, dsInsert]) then 
    begin 
        ADOQuery_Bijiao.Append;
        ADOQuery_Bijiao.Edit;
        ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要';
        .....
        ADOQuery_Bijiao.Post;
    end;
      

  9.   

    口合 口合 ! 78hgdong(蜗牛跑步) (:D
      

  10.   

    非常感谢大家的热心。我上面的代码是我将edit代码无数次移动中的一次,
    我的procedure TForm_Bijiao.DBGridEh_BijiaoColumnsUpdateData(Sender: TObject;
      var Text: String; var Value: Variant; var UseText, Handled: Boolean);
    var
      s:String;
      m,n,i:integer;
    begin
      if DBGridEh_Bijiao.SelectedIndex > 0 then
      begin  for i:=0 to DBGridEh_Bijiao.ComponentCount-1 do
         if DBGridEh_Bijiao.Components[i] is TInplaceEdit then
           s:= TEdit(DBGridEh_Bijiao.Components[i]).Text;  m:=DBGridEh_Bijiao.Row-1;
      n:=DBGridEh_Bijiao.Col-1;
      n:=(n-1) DIV 2;  if s='极其重要' then
      begin
    ADOQuery_Bijiao.Edit;    DBGridEh_Bijiao.SelectedField.Value:=s;   //将当前编辑格的值写进库    if n=0 then
          ADOQuery_Bijiao.First
        else   ADOQuery_Bijiao.MoveBy(n-m);     //移动当前记录到指定行
    ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要';    //写指定格的值    if not (ADOQuery_Bijiao.State in [dsEdit, dsInsert]) then ADOQuery_Bijiao.Edit;
        
        ADOQuery_Bijiao.Post;  end;  end; {if DBGridEh_Bijiao.SelectedIndex > 0}
    end;{procedure}
      

  11.   

    刚才点错了。非常感谢大家的热心。  
     
    我上面的代码是我将edit代码无数次移动中的一次,  
    我甚至在所有修改前都加过,也不行啊:  而且要特别指出的是,我在单步执行的时候都没有报错哦,只有在该过程执行完后,去DBGridEh里的ColumnsUpdateValues里才出错的!!
     
    procedure  TForm_Bijiao.DBGridEh_BijiaoColumnsUpdateData(Sender:  TObject;  
       var  Text:  String;  var  Value:  Variant;  var  UseText,  Handled:  Boolean);  
    var  
       s:String;  
       m,n,i:integer;  
    begin  
       if  DBGridEh_Bijiao.SelectedIndex    >  0  then  
       begin  
     
       for  i:=0  to  DBGridEh_Bijiao.ComponentCount-1  do  
             if  DBGridEh_Bijiao.Components[i]  is  TInplaceEdit  then  
                 s:=  TEdit(DBGridEh_Bijiao.Components[i]).Text;  
     
       m:=DBGridEh_Bijiao.Row-1;  
       n:=DBGridEh_Bijiao.Col-1;  
       n:=(n-1)  DIV  2;  
     
       if  s='极其重要'  then  
       begin         ADOQuery_Bijiao.Edit;   
           DBGridEh_Bijiao.SelectedField.Value:=s;      //将当前编辑格的值写进库  
     
           if  n=0  then  
               ADOQuery_Bijiao.First  
           else      ADOQuery_Bijiao.MoveBy(n-m);          //移动当前记录到指定行      ADOQuery_Bijiao.Edit;    
          ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要';        //写指定格的值  
     
           ADOQuery_Bijiao.Edit;  
             
           ADOQuery_Bijiao.Post;  
     
       end;  
     
       end;  {if  DBGridEh_Bijiao.SelectedIndex    >  0}  
    end;{procedure}  
      

  12.   

    procedure TForm_Bijiao.DBGridEh_BijiaoColumnsUpdateData(Sender: TObject;
      var Text: String; var Value: Variant; var UseText, Handled: Boolean);
    var
      s:String;
      m,n,i:integer;
    begin
      if DBGridEh_Bijiao.SelectedIndex > 0 then
      begin  for i:=0 to DBGridEh_Bijiao.ComponentCount-1 do
         if DBGridEh_Bijiao.Components[i] is TInplaceEdit then
           s:= TEdit(DBGridEh_Bijiao.Components[i]).Text;  m:=DBGridEh_Bijiao.Row-1;
      n:=DBGridEh_Bijiao.Col-1;
      n:=(n-1) DIV 2;  if s='极其重要' then
      begin
        ADOQuery_Bijiao.Edit;
        DBGridEh_Bijiao.SelectedField.Value:=s;   //将当前编辑格的值写进库
        ADOQuery_Bijiao.Post; //----post here     if n=0 then
          ADOQuery_Bijiao.First
        else   
          ADOQuery_Bijiao.MoveBy(n-m);     //移动当前记录到指定行    ADOQuery_Bijiao.Edit; //--edit here 
        ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要';    //写指定格的值 
        ADOQuery_Bijiao.Post; //----post here 
      end;  end; {if DBGridEh_Bijiao.SelectedIndex > 0}
    end;{procedure}
      

  13.   

    非常感谢skm(Mr.Bean.)兄的详细代码,刚刚试过了,还是同样的错误。单步调试时,完全正常,把这个过程都执行完了都正常,库里的数据也都改了,就是到DbGrideh里报错!!我要崩溃了。
      

  14.   

    感谢大家的关心,问题被我误打误撞的解决了,首先声明绝对是凑巧的,我也不知道为什么^_^上面我一再强调单步调试时,我的代码里都没有出现错误,只有到DBGridEh里才报错,呵呵,于是偶斗胆把DBGridEh里报错的那句代码屏蔽掉,居然没事了,运行了n多次都一切正常,功能完全符合要求,我晕,我都快不知道自己几斤几两了:)呵呵,好了,不管怎么样,问题解决了,再次感谢大家的热心帮助,如果有遇到类似情况或知道原因的,望不吝赐教。散分了。