SQL语句中不能包含order by,group by等,否则会出错。 应该直接使用"delete from ..."
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('出现异常!');
TO lining_1977(李宁) 我已经用了!!! TO seasecond(海海) 您的代码已试过,还是不行!?(还是要谢谢您的参与) TO liu_she0068() 我要的是删除当前记录,而您的只能删除满足条件的记录! TO laomonster(老妖) 要是用TABLE的话,查询怎么办?! 真的谢谢大家了!虽然问题还没有解决!
大家都没找到问题的根源。 用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宽松了些罢了。
应该直接使用"delete from ..."
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('出现异常!');
TO seasecond(海海) 您的代码已试过,还是不行!?(还是要谢谢您的参与)
TO liu_she0068() 我要的是删除当前记录,而您的只能删除满足条件的记录!
TO laomonster(老妖) 要是用TABLE的话,查询怎么办?!
真的谢谢大家了!虽然问题还没有解决!
能不能具体一点?!:)
query1.cached := True
设置UPdateObject,在updateobject设置update\insert..的语句
但是要求query1的条件如liu_she0068所言: SQL语句中不能包含order by,group by等,且仅从一个表里取数据
用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宽松了些罢了。