这个是我的原代码:
if edit2.Text=edit3.Text then
  begin
   if MessageDlg('你真的要修改你的密码吗?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
    begin
     ClientDataSet1.Close;
     ClientDataSet1.CommandText:='update tb_operatorinformation set pswd_log='+#39+trim(Edit2.Text)+#39+' where id='+user_id+';
     ClientDataSet1.Active;
     ClientDataSet1.Open;
     showmessage('更改完毕!');
     Edit1.Text:='';
     Edit2.Text:='';
     Edit3.Text:='';
    end;
  end;
程序运行后总是出错,出错的信息是“adoquery1:commandtext does not return a result set"
虽然出错了,没有出现showmessage,但是每次数据库里的数据也改过了,这是因为什么啊?/到底出错在什么地方啊??

解决方案 »

  1.   

    ClientDataSet1.Open;//把这行去掉试试
      

  2.   

    不对,是去了open吗?那样是没有错误了,但是好象没有执行update啊
      

  3.   

    ClientDataSet1.Active;//换成
    ClientDataSet1.Execute;
      

  4.   

    如果执行的sql会返回数据集如select就用open
    如果执行的sql不会返回数据集如update就用execute
      

  5.   

    可是换成execute就会出现错误“project1.exe raised exception class EOleException with message"灾难性故障"process stopped. ”这个就是上面的代码改成execute后出现的错误。
      

  6.   

    在这些代码前已经使用过一次ClientDataSet1做查询,这个有影响吗?不会只能传输一次数据吧!
      

  7.   

    注释掉ClientDataSet1.Close;这句。
      

  8.   

    但是我的程序已经写了啊!我的第一句就是这个ClientDataSet1.Close啊,但是为什么还是出了问题啊?
      

  9.   

    我把 sql语句改成select就是可以通过的,但是ClientDataSet1只能用open,要是改为EXECUTE也是会出同样的错误。
    这段程序到底是什么地方的问题啊?请高手指点。分可以另开帖子再给。