我用ADOQuery查询表a ,并将表a放连到dbgrid中,然后在dbgrid中添加记录后在ADOQury.edit后用Aupdatebatch或post进行保存时总是提示‘Insuficient base table information for updating or refreshing’,如何解决?请各位帮助,谢谢!

解决方案 »

  1.   

    用这个:
        ADOQuery.UpdateBatch(arall);
      

  2.   

    ADOQuery之LockType设为ltBatchOptimistic试一下
      

  3.   

    你添加试试
    ADOQuery.Append;
    ...
    ADOQuery.Post;
    ADOQuery.UpdateBatch
      

  4.   

    你的操作顺序有错误吧
    dbgrid中添加记录后在ADOQury.edit后??
    应该是先ADOQury.edit,再在dbgrid中添加记录,然后POST,就OK了
      

  5.   

    真是不行啊,无奈之下,将ADOQuery2改为ADOTable1后,是可以实现记录添加和保存,但是在选择表时,总是出数据类型错误提示,意思为“不能将'NULL'转为'string'”。现将代码贴出,请各位朋友继续帮助,非常感谢大家的帮助,小弟在线等了。ADOQuery2.connection:=mainform.ADOConnection;
    ADOQuery2.CursorType:=Ctkeyset;
    ADOQuery2.LockTYPE:=ltBatchOptimistic;
     
    procedure Twsbzform.bzbbtnClick(Sender: TObject); //创建表格
    var
      bm,sqlstr:string;
      vtblf:boolean;
    begin
      if messagedlg('创建卫生标准表吗?',mtInformation,[mbYes,mbNo],0)=mrYes then
      begin
      tembm:=wsbzform.ADODataSet1.FieldValues['wb_dh'];
      vtblf:=wsbzform.ADODataSet1.FieldValues['wb_table'];
      bm:=wbdhconve(tembm);
      if vtblf =true then
        begin
          Application.MessageBox('要创建的表格已存在!','提示信息',MB_OK);;
          Exit;
        end
      else
        begin
          sqlstr:='create table'+' '+bm+'(wb_xm text(40) NOT NULL, wb_fh text(2) NOT NULL, wb_zb text(80) NOT NULL, wb_bz text(80) NOT NULL )';
          wsbzform.ADOQuery1.Close;
          wsbzform.ADOQuery1.SQL.Clear;
          wsbzform.ADOQuery1.SQL.Add(sqlstr);
          try
            wsbzform.ADOQuery1.ExecSQL;
            wsbzform.ADODataSet1.Edit;
            wsbzform.ADODataSet1.FieldByName('wb_table').AsBoolean:=true;
            wsbzform.ADODataSet1.UpdateBatch;
            Application.MessageBox('创建表格成功!','提示信息',MB_OK);
          except
            Application.MessageBox('创建表格失败!','提示信息',MB_OK);
            Exit;
          end;
        end;
      end;
    end;procedure Twsbzform.Button1Click(Sender: TObject);   //选择表格
    var
      vbm1:widestring;
    begin
      tembm:=wsbzform.ADODataSet1.FieldValues['wb_dh'];
      vbm1:=wbdhconve(tembm);
      wsbzform.ADOQuery2.Close;
      wsbzform.ADOQuery2.SQL.Clear;
      wsbzform.ADOQuery2.SQL.Add('select*from'+' '+vbm1 );
      wsbzform.ADOQuery2.Open;
      wsbzform.DataSource2.DataSet:=wsbzform.ADOQuery2;
      wsbzform.DBGrid2.DataSource:=wsbzform.DataSource2;
      WSBZFORM.DBNavigator1.DataSource:=WSBZFORM.DataSource2;
    end;procedure Twsbzform.btn1Click(Sender: TObject); //添加记录
    begin
      with wsbzform do
        begin
          btn1.Enabled:=false;
          btn2.Enabled:=false;
          btn3.Enabled:=false;
          btn4.Enabled:=true;
          btn5.Enabled:=true;
          DBNavigator1.Enabled:=false;
          ADOQuery2.Edit;
          ADOQuery2.Append;
        end;
    end;procedure Twsbzform.btn5Click(Sender: TObject); //取消
    begin
      with wsbzform do
        begin
          btn1.Enabled:=true;
          btn2.Enabled:=true;
          btn3.Enabled:=true;
          btn4.Enabled:=false;
          btn5.Enabled:=false;
          DBNavigator1.Enabled:=true;
          ADOQuery2.CancelBatch(arAll);
        end;
    end;end.
      

  6.   

    您的代码写的很混乱, 转换异常可能出现在bm:=wbdhconve(tembm)处. 另外, 我用ADO的Batch Update功能, 都是设CursorType = ctStatic的.
      

  7.   

    sqlstr:='create table'+' '+bm+'(wb_xm text(40) NOT NULL, wb_fh text(2) NOT NULL, wb_zb text(80) NOT NULL, wb_bz text(80) NOT NULL )';里面的NULL可能有问题!      ADOQuery2.Edit;
          ADOQuery2.Append;换一下位置:      ADOQuery2.Append;
          ADOQuery2.Edit;呵呵,最好你单步跟踪试试
      

  8.   

    bm:=wbdhconve(tembm)没出错的,函数返回的是一个正确的表名(bm)。以上只是在保存时出错误提示,CursorType = ctStatic也是试过的,postt 和Next都试过的还是不行呀。单步跟踪到
    ADOQuery2.Updatebatch(arAll);时出错误提示。
      

  9.   

    是不是在这儿翻一下:wsbzform.ADOQuery1.ExecSQL;wsbzform.ADODataSet1.Edit;换成:
    wsbzform.ADODataSet1.Edit;
    wsbzform.ADOQuery1.ExecSQL;
      

  10.   

    对了上面代码漏了‘保存’现贴上。
    procedure Twsbzform.btn4Click(Sender: TObject); //保存记录
    begin
      with wsbzform do
        begin
          btn1.Enabled:=true;
          btn2.Enabled:=true;
          btn3.Enabled:=true;
          btn4.Enabled:=false;
          btn5.Enabled:=false;
          DBNavigator1.Enabled:=true;
          ADOQuery2.UpdateBatch(arAll);
      

  11.   

    试过了,没有用。ADOQuery1应该与ADOQuery2没有牵制吧。
      

  12.   

    ADOQuery2.Edit;
          ADOQuery2.Append;
    不知道为什么你要写两个,添加直接用ADOQuery2.Append;
    不就可以了,为什么要ADOQuery2.Edit;???