有关SQL的Update问题(50分)

  • 主题发起人 主题发起人 plwei
  • 开始时间 开始时间
P

plwei

Unregistered / Unconfirmed
GUEST, unregistred user!
sub:=query1.Fieldbyname('porder').asstring;
if application.messagebox('确实在删除该纪录吗?','提示框',
mb_YesNo+mb_iconinformation)=idyes then
begin
sqlsub:='update partyman.db'+#13+#10+
'set porder=porder-1'+#13+#10+
'where porder>'+sub;
with query1do
begin
Delete;
close;
sql.Clear;
sql.add(sqlsub);
try
execSQL;
except
open;
end;
end;
end;
在表中porder是关键字.当程序执行到execsql时系统提示如下错误:
“key violation”。
请指教。
我用这段代吗的主要目的是,想在删除掉一个纪录后自动将该纪录后的纪录
上移.即将后面纪录的关键字porder依次减1.
有没有更简便的方法?
 
是Query不是Table,用法不一样。
修改了主键,无法用UpdateSQL,再也不能写回Table。
 
sqlsub:='update partyman.db'+#13+#10+
'set porder=porder-1'+#13+#10+
'where porder>'+sub;
换为:
sqlsub:='update partyman.db'
+' set porder=porder-1'
+' where porder>'+sub;
是否好多了?
@_@
(偏题了!)
1,察看你的表的关联情况.是否有外健.
2,作Index,BTW你用什么库?
 
(不好意思,安错见了)
3,你的实现目的最好分两段写!
 
用下在的句子代替你程序中的delete试试看:
query1.sql.clear;
query1.sql.add('delete from partyman.db where porder = '+sub);
query1.execsql;
 
我试一试如何回答问题.
 
用SQL Monitor监视一下你的SQL语句,看看究竟执行的什么。
 
接受答案了。
 
在Query中是删除了,但Table中呢?非得用UpdateSQL.
 
后退
顶部