当在数据库里增加或者删除记录时,怎么老是出现这样的错误呀?
错误提示为:  'Query2: Cannot modify a read-only dataset'
 'Query1:Cannot perform this operation on a close dataset'请问这是为什么呀?
我明明是已经打开数据库了,并且把数据库设为编辑状态!!
可是就是出现这样的错误!!!大家帮帮忙呀?谢谢了!!!

解决方案 »

  1.   

    dataset的问题,而不是数据库的问题吧,把dataset打开。
      

  2.   

    注意,把query的requestLive属性设置为true
      

  3.   

    代码:
       
     if RadioButton3.Checked = true then           //按年级删除!
      begin
        if edit3.Text = '' then
        begin
          showmessage('请输入年级名称!') ;
          abort ;
        end
        else
        begin
          query1.SQL.Add(' where s_grade = :para_s_grade') ;
          query1.ParamByName('para_s_grade').AsString := edit3.Text ;
          query1.Open ;
          if query1.RecordCount < 1 then
          begin
            showmessage('没有存在该年级!') ;
            abort ;
          end
          else
          begin
            while Not query1.Eof do
            begin
              query2.SQL.Clear ;
              query2.SQL.Add('select * From bed where s_no = :para_s_no') ;
              query2.ParamByName('para_s_no').AsString := query1.fieldByName('s_no').AsString ;
              query2.Open ;
              query2.Edit ;
              if query2.RecordCount >= 1 then
              begin
                query2.Edit ;
                query2.FieldByName('s_no').AsString := '' ;
                query2.Post ;
              end ;
              query1.Next ;
            end ;
            query1.SQL.Clear ;
            query1.Edit ;
            query1.SQL.Add('Delete from student where s_grade = :para_s_grade') ;
            query1.ParamByName('para_s_grade').AsString := edit3.Text ;
            query1.ExecSQL ;
         end ;
       end ;
     end ;
      

  4.   

    代码:
      
      procedure TAdmin_Operation_Form_Add.Button1Click(Sender: TObject);
    begin
      if edit1.Text = '' then
      begin
        showmessage('用户帐号不能为空!') ;
        abort ;
      end ;
      if edit2.Text = '' then
      begin
        showmessage('用户密码不能为空!') ;
        abort ;
      end ;
      query2.SQL.Add(' where user_no = :para_user_no') ;
      query2.ParamByName('para_user_no').AsString := edit1.Text ;
      query2.Open ;
      if query2.RecordCount >= 1 then
      begin
        showmessage('该用户已经存在!') ;
        abort ;
      end
      else
      begin
        query2.Edit ;
        query2.AppendRecord([edit1.Text , edit2.Text]);
     //   query2.SQL.Add('insert into user values         //用insert语句怎么用呀???
     //( :para_user_no , :para_user_password)') ;         //象我这样用对吗?
     //   query2.ParamByName('para_user_no').AsString := edit1.Text ;
     //   query2.ParamByName('para_user_password').AsString := edit2.Text ;
      end ;
     end ;
      

  5.   

    注意,把query的requestLive属性设置为true设置了吗???????楼主??????
      

  6.   

    搂住的代码,混乱不堪。先整理好了再说。
    query1还没有关闭就清空SQL?
    清空了SQL又query1.Edit?
    紧接着又query1.SQL.Add('Delete ……);
    query1不是这样用的,执行SQL语句和编辑数据集不能搅在一起。
          query1.SQL.Clear ;
            query1.Edit ;
            query1.SQL.Add('Delete from student where s_grade = :para_s_grade') ;
            query1.ParamByName('para_s_grade').AsString := edit3.Text ;
            query1.ExecSQL ;
         end ;
       end ;
     end ;
      

  7.   

    DateSet关闭了,把query的requestLive属性设置为true,报错,设不了的
      

  8.   

    开始的时候我没有编辑数据集,这样运行报错,但是我加上query1.Edit就不报错!!所以我
    就这样用!
      

  9.   

    先query2.close;
    再query2.SQL.Clear ;
      query2.SQL.Add('select * From bed where s_no = :para_s_no') ;
      query2.ParamByName('para_s_no').AsString := query1.fieldByName('s_no').AsString ;
      query2.Open ;你看你一直open啊open,连个close都没