特急﹐關于ADO問題(200分)

  • 主题发起人 simonlai
  • 开始时间
S

simonlai

Unregistered / Unconfirmed
GUEST, unregistred user!
我在SQL2000的數據庫的表里寫了一觸發器(保証100%沒錯)﹐
我在SQL里更新不會出錯
我用DELPHI6.0里﹐如果用BDE接連到該表﹐更新也不會出錯﹐
但用ADO接連就出現如下錯誤﹕
Project Project1.exe raised exception class EOLeException with message
'Key column information is insufficient or incorrrect.
Too many rows were affected by update'.
Process stopped. Use Step or Run to continue.
為什么?不知各位高手有沒有碰過﹐知情者請速幫我解答﹐謝先﹗
 
表有没有主关键字?
ado和bde在post时候update一个表的方式不一样

-----
http://www.8421.org
 
你是不是在数据感知控件中修改或添加数据的.
这种情况不少,解决方法:
1.不在数据感知控件中直接修改,在编辑框中修改后用SQL语句或添加到数据库中.
2.在修改完成以后,刷新数据集,
 
是否有主键存在。
是否升级了ADO。
 
你的触发器支持一句sql更新多条记录吗?
 
你见过的这种情况可能和我以前碰到过的一样,详细说说你的触发器都干了些什么工作,
也许我能帮你解决
 
......
As
Set Nocount On
.......
....
Set Nocount off

保证你的问题解决

 
觸發器如下﹔
CREATE TRIGGER provide_update ON [dbo].[provide]
FOR UPDATE
AS
declare @mypro_numdel varchar(3),@mypro_numins varchar(3)
declare provide_del cursor for Select pro_num from Deleted
declare provide_ins cursor for Select pro_num from inserted
open provide_del
open provide_ins
Fetch Next from provide_del into @myPro_numdel
While @@Fetch_status=0
begin
Fetch Next from provide_ins into @myPro_numins
update materiel set ma_providernum= @mypro_numins
where ma_providernum=@mypro_numdel
Fetch Next from provide_del into @myPro_numdel
end
Deallocate provide_del
Deallocate provide_ins

 
这是delphi里的一个BUG,如果你在触发器里更新了其他表里超过一条纪录,delphi
就会出错。看来现在只能在触发器语句的开始加一句set nocount on,不让它返回
影响的行数,欺骗一下delphi
 
還有沒有更好的方法?
 
不有何高見?????
急盼﹗﹗﹗﹗﹗﹗@$%@#
 
你的provide表有主键吗?
如果有, trigger里只要一句sql就达到目的了.

CREATE TRIGGER provide_update ON [dbo].[provide]
FOR UPDATE
AS
update materiel set ma_providernum=inserted.pro_num from inserted, deleted where inserted.id=deleted.id and materiel.ma_providernum=deleted.pronum

如果是这样的语句,ado肯定不会报错(我原来遇到的问题是这种trigger里有错的话sql不更新表也不报错,客户端根本不知道更新失败了)
 
多人接受答案了。
 
顶部