[firebase-br] Chamando Store Procedure FB252

Mário Reis mariodosreyx em gmail.com
Qua Nov 20 14:49:08 -03 2013


 Olá boa gente,

Nunca vi nada escrito acerca disto mas, se bem percebi(experimentando) é 
assim: quando temos uma store procedure e a chamamos através por exemplo, do 
D7 através do MDOStoreProc1 (ou, penso que será o mesmo IBO, IB etc), o 
pedido entra e sai logo no ***primeiro*** "Suspend" sem correr, top/down, a 
Procedure(que deverá processar um ficheiro de pagamento inteirinho 50000 
linhas).
Então, que processe todas aquelas linhas só deveremos deixar, apenas no fim, 
para qualquer eventualidade, um: ***When Any Do Begin ... OUT_PUT_PARMS... e 
Suspend End***. Certo? Sendo que assim só termos esta resposta em caso de 
erro.  E,  o commit control como ficaria. Assim?
If MDOStrProcPg.Transaction.InTransaction then
MDOStrProcPg.Transaction.Rollback;
Try MDOStrProcPg.Transaction.StartTransaction;
MDOStrProcPagaPs2.Close;
.ParamByName('IN_TRANSAC_ID').AsString:='42555' ;
.ParamByName('IN_DATA').AsDate:=MainForm.DtApp;
MDOStrProcPg.Prepare; 
MDOStrProcPg.ExecProc;
MDOStrProcPg.Transaction.CommitRetaining ; 
Except 
MDOStrProcPg.Transaction.RollbackRetaining ; 
End;

De contrário, o melhor será talvez, por exemplo, usar um MdoQry1(ou 
IBQUERY1) com um Select * from 
StoreProcedure_XPT(:IN_PARM1,:IN_PAMR2...) assim:
 MdoQry1.Close; 
with MdoQry1 do  begin             
 ParamByName('IN_CONTROLO').AsString := IntToStr(iControloID) ;
 ParamByName('IN_DATA').AsDate:=MainForm.DtApp;  
end;

E, de seguida procurar o controlo do commit e rollback assim:

If MdoQry1.Transaction.InTransaction then
 MdoQry1.Transaction.Rollback; 
Try 
 MdoQry1..Transaction.StartTransaction;
 MdoQry1.active := true; 
 MdoQry1.Transaction.CommitRetaining;
Except 
 MdoQry1.Transaction.RollbackRetaining ; 
End;

A questão é saber se para um processamento batch o melhor será fazermos uma 
Store Procedure ***sem*** "Suspend(s)", ou se, depois de processar de cada 
linha fazemos "Suspend" e despejamos para o utilizador tantas linhas e 
colunas quantos os tratamentos efectuados!? Obrigado
Mário






Mais detalhes sobre a lista de discussão lista