将query.requestlive:=true就可以了

解决方案 »

  1.   

    SQL语句中不能包含order by,group by等,否则会出错。
    应该直接使用"delete from ..."
      

  2.   

    try
    query1.RequestLive:=true;
    if not query1.Active then
                 query1.Open ;
                 query1.Edit ;
    if messagedlg('确定要删除?',mtconfirmation,[mbyes,mbno],0)=mryes then
                       begin
                       query1.active:=True;
                       query1.edit;
                       query1.Delete ;
                       query1.Post ;
                       end
                          else
                              query1.Cancel ;
    except
        on EDataBaseError do
               showmessage('出现异常!');
      

  3.   

    TO  lining_1977(李宁) 我已经用了!!!
    TO  seasecond(海海) 您的代码已试过,还是不行!?(还是要谢谢您的参与)
    TO  liu_she0068() 我要的是删除当前记录,而您的只能删除满足条件的记录!
    TO  laomonster(老妖) 要是用TABLE的话,查询怎么办?!
        真的谢谢大家了!虽然问题还没有解决!
      

  4.   

    TO yzykjh(yzykjh) 
       能不能具体一点?!:)
      

  5.   

    query1.requestlive:=true/False?记不清了
    query1.cached := True
     设置UPdateObject,在updateobject设置update\insert..的语句
    但是要求query1的条件如liu_she0068所言: SQL语句中不能包含order by,group by等,且仅从一个表里取数据 
      

  6.   

    大家都没找到问题的根源。
    用query得到是视图,不是表的本身,他的修改有着很多限制(可以参考数据库理论方面的数据),比如 select sum(a) from table1 这个查询,你说query.delete,删的是什么?
    这个现实对于不同的数据引擎是不同的,比如BDE就比较严格,现在ADO就比较松散。楼上说不能用order by 这个说法不对,应该是只能按照主键索引的字段才能用在order by里面,比如主键是ID,那么order by ID和order by ID desc 都不会影响视图的可修改性。使用 sql 的到一个视图,如果要修改(包括插入和删除),首先要判断
    query.CanMondify 是否为 ture,ture才表示这个视图可以编辑,然后才是
    query.requestlive= true; 否则requestlive 是设置不成true的。....
    query.open;
    if (query.CanMondiy = true) then begin
      Query.RequestLive:= true;
      query.delete;
      .....
    end;BDE的query为了解决这个问题,他提供了TUpdateSQL控件,可以对只读试图修改,你具体可以看帮助。ADO由于出色的sql解析能力,他能正确的分析出很多对视图的修改命令,转化成正确的sql命令,这是他比BDE进步的地方,但是不是说他对所有select 出来的视图都能修改,只是比BDE宽松了些罢了。