把要處理的代碼全部寫在存儲過程裡面,如果成功返回1,失敗返回0例好: CREATE PROC dbo.procInsert (@orderNo varchar(4),@orderName varchar(20),@orderNum numeric(10,2)) AS BEGIN TRAN SET NOCOUNT ON SET ANSI_WARNINGS OFFINSERT INTO dbo.TabX(order_no,order_name,order_num) VALUES(@OrderNo,@OrderName,@OrderNum) IF @@ERROR<>0 GOTO errhandleINSERT INTO opendatasource('sqloledb','data source=sprogram;user ID=develop;Password=12345').數據庫名.dbo.TabY(order_no,order_name,order_num) VALUES(@OrderNo,@OrderName,@OrderNum) IF @@ERROR<>0 GOTO errhandle COMMIT TRAN SELECT 1errhandle: IF @@ERROR<>0 BEGIN ROLLBACK TRAN SELECT 0 ENDGO--成功返回1,失敗返回0
AdoC.Open;
AdoC.beginTrans;
ADOQ.Connection:=ADOC //这句话别忘了
CREATE PROC dbo.procInsert
(@orderNo varchar(4),@orderName varchar(20),@orderNum numeric(10,2))
AS
BEGIN TRAN
SET NOCOUNT ON
SET ANSI_WARNINGS OFFINSERT INTO dbo.TabX(order_no,order_name,order_num)
VALUES(@OrderNo,@OrderName,@OrderNum)
IF @@ERROR<>0 GOTO errhandleINSERT INTO opendatasource('sqloledb','data source=sprogram;user ID=develop;Password=12345').數據庫名.dbo.TabY(order_no,order_name,order_num)
VALUES(@OrderNo,@OrderName,@OrderNum)
IF @@ERROR<>0 GOTO errhandle
COMMIT TRAN
SELECT 1errhandle:
IF @@ERROR<>0
BEGIN
ROLLBACK TRAN
SELECT 0
ENDGO--成功返回1,失敗返回0
不过,你的代码中似乎没有错误处理的代码,B表处理失败时,程序会跳到那里去执行呢? 会自动跳到回滚事务那块么? 如果不会,那你应该加错误处理代码(例如VB中就要用on error 控制错误跳转)
有个Open方法?ADOCOnnection1.Active := True;
ADOConnection1.BeginTran;
Try
...
ADOConnection1.CommitTran
Except
ADOConnection1.RollBack;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Try
Adoconnection1.Open;
Adoconnection1.BeginTrans;
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select top 1 * from test' );
adoquery1.Open;
adoquery1.Append;
adoquery1.FieldByName('A').AsInteger:=8888;
adoquery1.FieldByName('B').AsInteger:=4444;
adoquery1.Post;
end;
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select top 1 * from tt' );
adoquery1.Open;
adoquery1.Append;
adoquery1.FieldByName('A').AsInteger:=37;//违返主键约束
adoquery1.FieldByName('B').AsInteger:=44;
adoquery1.Post;
end;
adoconnection1.CommitTrans;
except
adoconnection1.RollbackTrans;
end;
end;
1、VB 的 ON ERROR GOTO,在DELPHI中是 TRY .. EXCEPT .. END
2、ADOC中有OPEN方法;谢谢大家了,大家太热心了,送分感谢!! :)