[firebase-br] Transação + Stored Procedure

Renan Cruz de Almeida renan.aju em terra.com.br
Qua Ago 9 11:16:57 -03 2006


Se está usando mais de um banco de dados, então é uma situação de acesso 
concorrente.
Você precisa implementar um semáforo.
Para reservar a tabela no IBX você pode usar o seguinte, supondo o 
componente padrão IBTransaction :
    ParamFLock.Add('isc_tpb_write');
    ParamFLock.Add('isc_tpb_consistency');
    ParamFLock.Add('isc_tpb_nowait');
    ParamFLock.Add('isc_tpb_shared');
    ParamFLock.Add('isc_tpb_lock_write=DIARIO');
    IBTransaction.Params.Assign(ParamFLock);
Quando iniciar a transação a tabela DIARIO será reservada até que haja 
um commit ou rollback.
Atenção : bastante cuidado pois poderão surgir muitas mensagens de 
conflito de lock e o sistema ficar inoperante.

[]'s
Renan




>Carlos H. Cantu (TeamFB) escreveu:
>
>  
>
>>Não é possível GERENCIAR transações de dentro de SPs e Triggers. Isso
>>deve ser feito na aplicação que disparou a SP ou o trigger.
>>
>>Cantu (Membro do TeamFB - FireBase)
>>    
>>
>
>Muito obrigado Cantu. Estou com um grande problema, vou tentar explicar
>abaixo.
>
>Na empresa onde trabalho temos um sistema que usa DBX (Delphi 6) para
>conexão com o banco de dados. Como driver usamos o da UIB (porém eu não
>instalei o driver no Delphi, somente usamos a DLL).
>
>Esse sistema é para funcionar utilizando multi bancos, então temos um
>método para buscar o valor de um campo PK (esse método é equivalente a
>um Generator). Porém, ultimamente estamos um grande problema. Porque
>temos clientes com vários usuários utilizando o sistema. Mais
>especificamente, alguns usuários lançando notas de Entradas, outros
>usuários lançando nostas de Saída e, mais alguns usuários fazendo
>lançamentos contábeis.
>
>Tanto no formulário de Entradas quanto no de Saídas, é gerado N
>lançamentos contábeis automaticamente, conforme a nota que o usuário
>esta lançamento.
>
>Na tabela do Diário temos o campo IDDIARIO (PK) que recebe seu valor
>através do método que mecionei acima. Porém, como temos usuários
>solicitando valor pro campo IDDIARIO a todo momento, ocorre erro de
>quebra de PK. Possivelmente porque o ID solicitado pelo usuário
>lançando Entradas acabou sendo usado pelo usuário que esta fazendo
>lançamentos contábeis, entende ?
>
>Sei que no Firebird eu posso travar um registro, através dos parâmetros
>WAIT/NO WAIT quando inicio a transação. Só que com DBX eu não sei onde
>indico que para tal transação é necessário travar o registro.
>
>Pro pessoal que usa o Driver da UIB, é possível indicar ao Driver que
>para a transação X o modo é WAIT ?
>
>Muito obrigado.
>  
>




Mais detalhes sobre a lista de discussão lista