错误提示
Project Project1.exe raised exception class EDatabaseError with message 'ADODataSet1:Cannot perform this operation on a closed dataset'. Process stopped.Use Step or Run to continue.
原代码
procedure TForm3.SpeedButton1Click(Sender: TObject);
begin
if (edit1.Text='')or(edit2.Text='')or(edit3.Text='') then
    showmessage('Data is not enough!')
else 
   begin
      with adodataset1 do
         begin
            insert;
             fieldbyname('楼盘编号').AsString:=edit1.Text;
             fieldbyname('楼盘名称').AsString:=edit1.Text;
             post;
             refresh;
             end;
         end;end;求解

解决方案 »

  1.   

    下断点,看看哪句出错,是post处,还是refresh处,post完了,为什么要refresh
      

  2.   

    提示的好像是这个地方有问题 fieldbyname('楼盘编号').AsString:=edit1.Text;
    不明白为什么
      

  3.   

    Insert以前,数据要处于打开状态。
      

  4.   

    加上adodataset1.active:=true;
    或用adodataset1.open;
      

  5.   

    'ADODataSet1:Cannot perform this operation on a closed dataset',理解下这个英文意思就明白了,ADODataSet1 不能将这种操作用于一个关闭的记录集。
    所以:应该有
    with adodataset1 do
      begin
      adodataset1.Open();//在这里加上,其中adodataset1.Sql.Text不能为空
      insert;
      fieldbyname('楼盘编号').AsString:=edit1.Text;
      fieldbyname('楼盘名称').AsString:=edit1.Text;
      post;
      refresh;
      end;
      

  6.   

    楼主,DataSet在进行操作前应该先写入Sql语句,然后Open。
    在执行这个事件前应该先打开DataSet,比如:
    ADODataSet.Sql.Text:='Select XXX from XXX Where XXX';
    ADODataSet.Open;
    然后
    procedure TForm3.SpeedButton1Click(Sender: TObject);
    begin
    if (edit1.Text='')or(edit2.Text='')or(edit3.Text='') then
      showmessage('Data is not enough!')
    else  
      begin
      with adodataset1 do
      begin
      insert;
      fieldbyname('楼盘编号').AsString:=edit1.Text;
      fieldbyname('楼盘名称').AsString:=edit1.Text;
      post;
      refresh;
      end;
      end;end;
    这样就可以了。
      

  7.   

    修改成
    fieldbyname('楼盘编号').AsString:=trim(edit1.Text);
      

  8.   

    要改变的话,首先要先进行adodataset.edit,你要先把他设置成可以编辑才可以改变
      

  9.   

    错误提示很明显,数据集没有打开,先open一下就行了。