在数据库中有如下两张表:
CREATE TABLE t1 (a int PRIMARY KEY)CREATE TABLE t2 (a int REFERENCES t1(a))INSERT INTO t1 VALUES (1)
INSERT INTO t1 VALUES (3)
INSERT INTO t1 VALUES (4)
INSERT INTO t1 VALUES (6)我有个存储过程如下:
create procedure sp_add
asSET XACT_ABORT ONINSERT INTO t2 VALUES (1)
INSERT INTO t2 VALUES (2) /* Foreign key error */
INSERT INTO t2 VALUES (3)
在前台的BUTTON1中有如下代码: ADOConnection1.BeginTrans;
try
ADOSp_InsertData.ExecProc;
showmessage('成功添加数据!');
except
ADOConnection1.RollbackTrans;
showmessage('在往服务器传输数据时出错');
end;
当点击BUTTON1之后,但sp_add这个存储过程虽然有回滚,但并没有弹出:
'在往服务器传输数据时出错'的提示,而是出现了"成功添加数据"的提示,请问当添加数据出现错误时,数据回滚的同时,怎样才能出现'在往服务器传输数据时出错'的提示呢?
谢谢!
CREATE TABLE t1 (a int PRIMARY KEY)CREATE TABLE t2 (a int REFERENCES t1(a))INSERT INTO t1 VALUES (1)
INSERT INTO t1 VALUES (3)
INSERT INTO t1 VALUES (4)
INSERT INTO t1 VALUES (6)我有个存储过程如下:
create procedure sp_add
asSET XACT_ABORT ONINSERT INTO t2 VALUES (1)
INSERT INTO t2 VALUES (2) /* Foreign key error */
INSERT INTO t2 VALUES (3)
在前台的BUTTON1中有如下代码: ADOConnection1.BeginTrans;
try
ADOSp_InsertData.ExecProc;
showmessage('成功添加数据!');
except
ADOConnection1.RollbackTrans;
showmessage('在往服务器传输数据时出错');
end;
当点击BUTTON1之后,但sp_add这个存储过程虽然有回滚,但并没有弹出:
'在往服务器传输数据时出错'的提示,而是出现了"成功添加数据"的提示,请问当添加数据出现错误时,数据回滚的同时,怎样才能出现'在往服务器传输数据时出错'的提示呢?
谢谢!
你可以用ADOConnection.ERRORS 来抓判断一下。貌似。~~~
drop procedure sp_add
goCREATE procedure sp_add
asDECLARE @ins_error int
set @ins_error=0--SET XACT_ABORT ON /*要设为OFF,如果设为ON,即使出错,@@error仍然为0,因为事务会自动回滚,就不存在出错*/
BEGIN TRANINSERT INTO t2 VALUES (1)
if @@error<>0
select @ins_error=1INSERT INTO t2 VALUES (2) /* Foreign key error */
if @@error<>0
select @ins_error=2INSERT INTO t2 VALUES (3)
if @@error<>0
select @ins_error=3if @ins_error=0
commit tran
else
begin
ROLLBACK TRAN
RETURN(@ins_error) /*采用存贮过程自身返回值来判断*/
endGODELPHI的代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
myResult,mid : Integer;
begin
ADOStoredProc1.ExecProc;
mid := ADOStoredProc1.Parameters.ParamValues['@RETURN_VALUE'];
showmessage(inttostr(mid));
if mid=0 then
showmessage('成功添加数据!')
else
Showmessage('在往服务器传输数据时出错');
end;