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

Carlos H. Cantu (TeamFB) listas em warmboot.com.br
Qua Ago 9 11:03:03 -03 2006


WAIT e NOWAIT no seu caso não vai ajudar em nada.

Se vc quer travar o registro, use WITH LOCK no select, só que ao invés
de erro de PK, provavelmente vc vai começar a ter erros de deadlock.

Sugiro que vc implemente de forma diferente a sua rotina de geração de
números sequenciais. No site do IBO tem um paper que dá algumas dicas
sobre como fazer isso de forma correta.

[]s
Cantu (Membro do TeamFB - FireBase)
http://www.warmboot.com.br
FireBase - http://www.FireBase.com.br

D> 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)

D> Muito obrigado Cantu. Estou com um grande problema, vou tentar explicar
D> abaixo.

D> Na empresa onde trabalho temos um sistema que usa DBX (Delphi 6) para
D> conexão com o banco de dados. Como driver usamos o da UIB (porém eu não
D> instalei o driver no Delphi, somente usamos a DLL).

D> Esse sistema é para funcionar utilizando multi bancos, então temos um
D> método para buscar o valor de um campo PK (esse método é equivalente a
D> um Generator). Porém, ultimamente estamos um grande problema. Porque
D> temos clientes com vários usuários utilizando o sistema. Mais
D> especificamente, alguns usuários lançando notas de Entradas, outros
D> usuários lançando nostas de Saída e, mais alguns usuários fazendo
D> lançamentos contábeis.

D> Tanto no formulário de Entradas quanto no de Saídas, é gerado N
D> lançamentos contábeis automaticamente, conforme a nota que o usuário
D> esta lançamento.

D> Na tabela do Diário temos o campo IDDIARIO (PK) que recebe seu valor
D> através do método que mecionei acima. Porém, como temos usuários
D> solicitando valor pro campo IDDIARIO a todo momento, ocorre erro de
D> quebra de PK. Possivelmente porque o ID solicitado pelo usuário
D> lançando Entradas acabou sendo usado pelo usuário que esta fazendo
D> lançamentos contábeis, entende ?

D> Sei que no Firebird eu posso travar um registro, através dos parâmetros
D> WAIT/NO WAIT quando inicio a transação. Só que com DBX eu não sei onde
D> indico que para tal transação é necessário travar o registro.

D> Pro pessoal que usa o Driver da UIB, é possível indicar ao Driver que
D> para a transação X o modo é WAIT ?

D> Muito obrigado.





Mais detalhes sobre a lista de discussão lista