[firebase-br] RES: Pegar Código

Tecnobyte Informática temp2 em tecnobyte.com.br
Sáb Jul 28 00:34:21 -03 2012


Olá Francisco

Eu também faço do seu modo quando estou trabalhando com DataSets que recebem 
entradas de dados direto do usuário (aqueles ligados a DataSource e 
componentes DBWares). Mas quando estou inserindo via programação diretamente 
uso a cláusula RETURNING, pois assim faço todo o processo com um único 
tráfego entre cliente e servidor.

Atenciosamente.

Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br

-----Mensagem Original----- 
From: Felix - SOL Informática
Sent: Friday, July 27, 2012 9:16 PM
To: 'FireBase'
Subject: [firebase-br] RES: Pegar Código

Eu faço um "SELECT GEN_ID(Gen_Cliente_Codigo, 1) chave ..." e atribuo o
valor a uma variável; em seguida faço o insert já com esse valor - ou seja,
não uso uma trigger neste caso em específico. É nula a chance de retornar um
código errado.

Mas também gostei da solução do Daniel.

Francisco Felix
www.solsistemas.com

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Tecnobyte Informática
Enviada em: sexta-feira, 27 de julho de 2012 21:53
Para: FireBase
Assunto: Re: [firebase-br] Pegar Código

Boa noite Levy

Eu entendi a preocupação do Saulo e ele realmente tem razão em se preocupar
com isto. Embora possa ser pequena a probabilidade de inserir dois registros
na mesma tabela em uma fração de segundo, no dia em que isto acontecer
poderá gerar problema, que dependendo da lógica do sistema pode ser um
grande problema.

Veja uma hipótese do que pode acontecer:

USUÁRIO1: INSERT INTO Cliente ... (gerou código 500)
USUÁRIO2: INSERT INTO Cliente ... (gerou código 501)
USUÁRIO1: SELECT GEN_ID(Gen_Cliente_Codigo, 0) ... (pegou 501)
USUÁRIO2: SELECT GEN_ID(Gen_Cliente_Codigo, 0) ... (pegou 501)
USUÁRIO1: INSERT INTO ContaReceber... (grava conta a receber para o cliente
501, mas deveria ser do cliente 500)
USUÁRIO2: INSERT INTO ContaReceber... (grava conta a receber para o cliente
051, o que é correto para USUÁRIO2)

No final, foram gravadas duas contas a receber para o cliente 501, quando o
correto seria uma conta a receber para cada cliente.

Atenciosamente.

Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br

-----Mensagem Original-----
From: Levy Moreira
Sent: Friday, July 27, 2012 8:18 PM
To: FireBase
Subject: Re: [firebase-br] Pegar Código

Se logo após o post  você pegar o valor tipo.

TblClientes.Post;
Codigo := FunctionExecutaSQL('select COALESCE(gen_id(genClienteCodigo, 0),
1) from rdb$database');

Não resolve?
Estou usando assim, você já teve problemas com isso ou esta fazendo uma
hipótese?

Se alguém souber uma maneira melhor fico grato.

--
Levy Moreira
______________________________________________ 





Mais detalhes sobre a lista de discussão lista