为什么在ADOQUERY中执行DELETE报错?(50分)

  • 主题发起人 主题发起人 bfox
  • 开始时间 开始时间
B

bfox

Unregistered / Unconfirmed
GUEST, unregistred user!
我建了一个ADOQUERY ,SQL中的内容如下 {select * from person a,
(select pname,count(pname) as tmp from person group by pname) b
where a.pname=b.pname and b.tmp>1
order by a.pname
}
可是每当我在这个QUERY中执行DELETE方法时,就提示错误
insufficient key volumn information for update or refreshing
这是什么意思啊 ,是不是因为QUERY 不支持DELETE方法?
 
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('delete ....');
adoquery1.execsql;

把delete语句贴出来看看
 
关键看你的delete语句了
 
这样, 我想可能不行, 其问题不是你的delete有误, 我想你本不就是不用sql语句执行删除,
而是一执行adoquery的delete命令而已, ado还没有这么行, 你的子查中分组的, 它找不到
完全的键信息, 所以不能删除, 你不防多提改成这样试试
{select * from person a
where a.pname in (select b.pname from person b group by b.pname having count(b.pname)>0)
order by a.pname
}
 
netup说的对,不过Count(pname)是不能显示了,
如果要显示,那就非要用SQL语句删除不可,query不会支持组删除的。
 
用netup兄的办法解决了问题,想继续问问如果用SQL语句应该怎么写?
我用query1.close;
query1.sql.clear;
query1.sql.add(delete from person where pname =:pname);
query1.execsql;
结果运行后DBGRID里面的东西都没有了?是不是有什么写的不对的 ?
 
兄弟,组合查询的sql语句是不能用delete的,只能用delete from tablename where...
 
改造Netup兄的语句,应该可以的。
Delete * from person a
where a.pname in (select b.pname from person b group by b.pname having count(b.pname)>0)
 
你如果用的是同一个query,数据当然没了。要另用一个。
 
吃大锅饭了:)
 
对,发分吧,组合查询的sql语句是不能用delete的,你只能用另一个Query了,我遇到过这样的问题。
 
多人接受答案了。
 
后退
顶部