delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
这到底是怎么回事呀? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061221085732195.html
怎么我写了一段程序,删除满足条件的记录!  
  怎么运行起来老是提示:   Table   is   read   only   !  
  我已经把RequestLive属性设计有True   ;怎么回事!!!  
  哪位大虾帮下忙!!非常感谢!!!  
   
   
  下面是程序的一小段代码:  
  //按栋删除学生!  
      if   RadioButton6.Checked   =   true   then  
      begin  
          if   edit6.Text   =   ''   then  
          begin  
              showmessage('请输入栋号!')   ;  
              abort   ;  
          end   ;  
          i   :=   0   ;  
          query1.Close   ;  
          query1.SQL.Clear   ;  
          query1.SQL.Add('select   *   from   building   ,   house   ,   bed')   ;  
          query1.SQL.Add('   where   building.building_no   =   house.building_no     AND   house.house_no   =   bed.house_no   ')   ;  
          query1.SQL.Add('   AND   building.building_no   =   :para_building_no')   ;  
          query1.ParamByName('para_building_no').AsString   :=   trim(edit6.Text)   ;  
          query1.Open   ;  
          if   query1.RecordCount   >=   1   then  
          begin  
              while   Not   query1.Eof   do  
              begin  
                  if   query1.FieldByName('s_no').AsString   <>   ''   then  
                  begin  
                      s_no[i]   :=   query1.fieldByName('s_no').AsString   ;  
                      i   :=   i   +   1   ;  
                      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   ;  
                      if   query2.RecordCount   >=   1   then  
                      begin  
                          query2.Edit   ;  
                          query2.FieldByName('s_no').AsString   :=   ''   ;  
                          query2.FieldByName('bed_state').AsString   :=   '不到'   ;  
                          query2.Post   ;  
                      end   ;  
                  end   ;  
                  query1.Next   ;  
              end   ;  
              i   :=   i   -   1   ;  
              while   i   >=   0   do  
              begin  
                  query1.Close   ;  
                  query1.SQL.Clear   ;  
                  query1.SQL.Add('select   *   from   student   where   s_no   =   :para_s_no')   ;  
                  query1.ParamByName('para_s_no').AsString   :=   s_no[i]   ;  
                  query1.Open   ;  
                  if   query2.RecordCount   >=   1   then  
                  begin  
                      query1.Edit   ;  
                      query1.Delete   ;  
                      query1.Post   ;  
                  end   ;  
                  i   :=   i   -   1   ;  
              end   ;  
              showmessage('删除操作成功!共删除'   +   inttostr(i+1)   +   '条记录!')   ;  
          end  
          else  
              showmessage(edit6.text   +   '栋不存在!')   ;  
    end   ;

query1.Edit   ;  
            query1.Delete   ;  
            query1.Post   ;  
   
   
  Delete   后不用POST

谢谢!  
  但是还是出现同样的错误!!!  
  奇怪,到底是哪里出现的问题?  
  真是找不出???   哪位大峡帮下???急呀!!!

query的readonly   的属性设为false看看  
 

query有readonly属性吗?  
  还是不行!

但是还是出现同样的错误!!!  
  奇怪,到底是哪里出现的问题?  
  真是找不出???   哪位大峡帮下???急呀!!!

你的数据库是只读的吧?  
  或者连接数据的用户名没有权限删除这个表.

应该不是这的原因!  
  我按照别的(比如说按照学号)就可以删除,所以不是你所说的那个原因!!!  
  真的不知道是什么缘故???  
  ??

怀疑是query1中的语句得到的视图,在你删除它中记录时,无法判断该删除的记录,所以会提示说只读的,你换一下方法,将你要删除的表放到query1中,其他的字段另想办法吧

怎么还是不行呀?  
  这是怎么回事呀?真搞不懂!!!

建议你的删除语句也用SQL语句写,这样就可以不必理会数据集的状态了。

我用了SQL语句写了,还是不行!!  
  哎!这是咋的?

如果用SQL语句写了都不行,应该是数据库自身的原因。

还是没有解决????

query1.RequestLive   设置为true   !

posted on 2008-12-11 10:08 delphi2007 阅读(50) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。