Fórum Transações no Interbase ****URGENTE***** #38902
23/09/2003
0
execute sp_1
execute sp_2
execute sp_3
execute sp_4
execute sp_5
Quero testar o sucesso das 5 SP´s caso qualquer uma delas falhe, todas SP´s quer foram executas (devem receber ROLLBACK).
Obrigado
Svaz
Curtir tópico
+ 0Posts
24/09/2003
Afarias
abra sua transação, execute os 5 SPs -- se tudo ocorrer OK dê um commit caso contrário, rollback
*não* há diferenças quanto a transações para qualquer operação no IB -- exceto manipulação de generators q não ocorrem no contexto de transações.
T+
Gostei + 0
24/09/2003
Svaz
estou executando estas SP´s da seguinte maneira
case 1
spProcessFiles.name := sp_1
case 2
spProcessFiles.name := sp_2
case 3
spProcessFiles.name := sp_3
case 3
spProcessFiles.name := sp_4
while not dstXML.Eof do begin
for intAux := 0 to dstXML.FieldCount - 1 do
spProcessFiles.Params.Items[intAux].Value := dstXML.Fields.Fields[intAux].Value;
onde dstXML é um clientDataset carregado com os paramentros para execução de cada SP, que depende do case anterior, portanto não tenho como iniciar um begin tran neste processo ou dá?
por exemplo, tenho a seguinte criação da SP a primeira a ser executada:
CREATE PROCEDURE SP_ATU_INDUSTRIAS (
CNPJINDUSTRIA VARCHAR(14),
NOMEINDUSTRIA VARCHAR(30),
APELIDOINDUSTRIA VARCHAR(30),
UFINDUSTRIA VARCHAR(2),
FONEINDUSTRIA VARCHAR(20),
FILIAL VARCHAR(20),
CIDADEINDUSTRIA VARCHAR(40)
) AS
BEGIN
UPDATE tbIndustrias SET
strNomeIndustria = :NomeIndustria,
strApelidoIndustria = :ApelidoIndustria,
strCidadeIndustria = :CidadeIndustria,
strUFIndustria = :UfIndustria,
strFoneIndustria = :FoneIndustria,
strFilial = :Filial
WHERE strCNPJIndustria = :CNPJIndustria;
Como colocar uma transação para esta SP e com If Erro <> 0 dar RoolBack? tentei fazer o seguinte:
CREATE PROCEDURE SP_ATU_INDUSTRIAS (
CNPJINDUSTRIA VARCHAR(14),
NOMEINDUSTRIA VARCHAR(30),
APELIDOINDUSTRIA VARCHAR(30),
UFINDUSTRIA VARCHAR(2),
FONEINDUSTRIA VARCHAR(20),
FILIAL VARCHAR(20),
CIDADEINDUSTRIA VARCHAR(40)
) AS
[b:a7636029d0]BEGIN TRAN[/b:a7636029d0]
UPDATE tbIndustrias SET
strNomeIndustria = :NomeIndustria,
strApelidoIndustria = :ApelidoIndustria,
strCidadeIndustria = :CidadeIndustria,
strUFIndustria = :UfIndustria,
strFoneIndustria = :FoneIndustria,
strFilial = :Filial
WHERE strCNPJIndustria = :CNPJIndustria;
[b:a7636029d0]IF @ERROR <> 0
ROOLBACK
ELSE
COMMIT TRAN[/b:a7636029d0]
END;
mas tb não funcionou, como posso colocar uma transação para este processo? como vc colocou antes de executar dar begin tran e depois se tudo deu certo commit senão rollback?
Obrigadopela ajuda
Gostei + 0
25/09/2003
Afarias
controle a transação no seu código, ex (usando IBX)::
{ ... }
IBTransaction1.StartTransaction;
try
while not dstXML.Eof do begin
for intAux := 0 to dstXML.FieldCount - 1 do
spProcessFiles.Params.Items[intAux].Value := dstXML.Fields.Fields[intAux].Value;
// execute o(s) procedimento(s)
IBTransaction1.Commit;
except
IBTransaction1.Rollback;
end;
Admitindo q vc configurou IBTransaction1 como a transação de TODOS os seus procedures.
T+
Gostei + 0
25/09/2003
Svaz
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)