我要进行数据的增加和保存,但保存数据时总是提示如下错误 :
    ads1:not in edit or insert mode.
我的程序情况如下:
    一、TADODataSet属性如下:    
        name的值为:ads1;  
        CursorType的值为:ctStatic;  
        LockType的值为:ltbatchOptimistidc;  
        CommandText的值为:
           SELECT F_CFGL.HH, F_CFGL.RQ_CF, F_CFGL.RQ_TD,F_CFGL.RQ_FD,   F_CFGL.BZ_CF, F_CFGL.B_LC, G_DAYH.HM, G_DAYH.DZ, G_DAYH.CBD  
FROM F_CFGL, G_DAYH  
WHERE F_CFGL.HH = G_DAYH.HH   
Order by  F_CFGL.HH  asc,G_DAYH.CBD  asc
  
        Commandtype的值为:cmdText
   二、一个TdataSource和TDBGrid(TDBGrid有5列,即5个字段)
   三、两个TSpeedButton,分别为“增加”、“保存”,它们的单击时间代码如下:
      1、“增加”
         If ads1.Active then
            ads1.Insert;
      2、“保存”
         If not ads1.Active then Exit;
         try
           ads1.UpdateBatch();
         Except
           ads1.CancelUpdates;
           Msgbox('提示信息','该用户已存在!');
         end;
   说明:我单击“增加”按扭时,TDBGrid列表中自动增加一空白行,我在各字段输入相应的值后,单击“保存”按钮时,便出现刚才所说的错误!
   请问这是个问题应该怎么解决?

解决方案 »

  1.   

    其它的属性没告诉我们,你先增加一条记录不急着按保存先post 一下,  再保存看一看
      

  2.   

    给你个例子参照一下:
     with SaveQry do
        begin
          Connection := FrmDm.AdoStandard;
          Close;
          Sql.Clear;
          Sql.Add('Select * From TestInfo Order By AutoID');
          Prepared;
          Open;
          Last;
          Edit;
          FieldByName('Photo').AsString := BlobContentToString(TmpPhotoFileName);
          Post;
        end;
      end;
      

  3.   

    我把“增加”按钮的代码由  
             If ads1.Active then
                ads1.Insert;
       改为       
             If ads1.Active then
               begin
                 ads1.Insert;
                 ads1.Post;
               end;
    则,我一点击“增加按钮”,TDBGrid列表中还没有增加一空白行就出现如下错误:
       ads1:not in edit or insert mode.      
      

  4.   

    TO:GoldShield(金盾) 
      你代码中的Sql是某个控件的名称吗?
      

  5.   

    ads1:not in edit or insert mode.
    //////////////
    说明你还没处于编辑状态.
    你要先把他设为EDIT
      

  6.   

    在保存之前进行状态检测.
    大概代码为:
       if ads1.State=dsEdit then
          ads1.Post;
      

  7.   

    TO:GoldShield(金盾) 
       怎么个改为EDIT?我把“增加”和“保存”按钮的代码分别改成如下,但是提示同样的错误。
    增加
    If ads1.Active then
        begin
          ads1.edit;
          ads1.Insert;
        end;
    保存:
      try
         ads1.Edit;
         ads1.UpdateBatch();
      Except
         ads1.CancelUpdates;
         Msgbox('提示信息','该用户已存在!');
      end;
      

  8.   

    TO:: luofs(土王曰)  
        问题还没搞定啊,大哥!
      

  9.   

    我发现你的问题了,你的DATASET数据是一个视图,牵涉到两个表.你用本身的update就不知道更新哪个表
      

  10.   

    要修改数据库的内容最好不要通过视图修改,你直接把结果修改你要更新的目标表,宁愿新建一个ADOQUER用于更新相关数据
      

  11.   

    DATASET数据不是视图,不过确实是牵涉到两个表,你说的有点道理,我试下
      

  12.   

    ADODataSet1.Edit;
      ADODataSet1.Post;
      ADODataSet1.UpdateBatch();