[firebase-br] Controle de ID sem generator
Fabiano Segal
fabianosegal em gmail.com
Sex Out 31 10:04:32 -03 2008
Amigo,
Se voce estiver desenvolvendo aplicação com interface em Delphi,
Dentro da SQL onde voce vai inserir os dados na tabela coloque por exemplo
qConsulta_ID := ' Select genid( ' + tabela + ',1) from RDB$DATABASE ';
qInsert.SQL.Text := ' Insert into tabela (:id,:....... (campos a mais)) '
qInsert.exeqSQL;
Isso resolve o seu problema com generatos CASO voce precise retornar de
imediato o codigo gerado à interface.
Caso nao precise, voce cria o generator dentro do banco e trigueriza o cara,
no afterinsert da tabela. isso resolve pro resto da sua vida e a sua roda
vai rodar legal.
Espero ter ajudado.
*FABIANO SEGAL* – fabiano.almeida em montreal.com.br
Analista de Sistemas | Diretoria Regional MG
+ 55 31 3280-6000 – Ramal 7635
+ 55 31 9851-1119 – Celular
*MONTREAL INFORMÁTICA | MINAS GERAIS*
Integrando Tecnologia aos Negócios
www.montreal.com.br
2008/10/30 HPensador <hpensador em gmail.com>
> Boa tarde Colegas!
>
> Na thread do TClientDataSet + Generator respondi que não utilizava
> generator mais sim um método próprio que gerava a nova chave para mim. O
> colega Sandro levantou a questão de como eu estava fazendo o controle de
> insersões simultâneas. Eu não faço nenhum tratamento e para minha sorte até
> o presente momento não tive nenhum problema. Vou colocar abaixo o código do
> método (procedure) e a idéia por trás da mesma e caso algum colega tenha
> alguma idéia/sugestão de melhoria para o mesmo, manda aí..
>
> Tenho uma tabela (Controle_ID) com a seguinte estrutura:
>
> Controle_ID (
> Tabela varchar(30),
> id_atual integer
> )
>
> e a seguinte SP
>
> CREATE PROCEDURE NOVO_CODIGO (
> tabela varchar(30))
> returns (
> proximo_codigo integer)
> as
> declare variable codigo_atual integer;
> begin
> --Recupera o valor atual do código
> select id_atual from controle_id c
> where (c.tabela = :tabela)
> into :codigo_atual;
>
> --Verifica se o valor do código é nulo
> if (:codigo_atual is null) then
> begin
> proximo_codigo = 1;
> insert into controle_id (tabela, id_atual)
> values (:tabela, :proximo_codigo);
> end
> else
> begin
> proximo_codigo = codigo_atual + 1;
> update controle_id set id_atual = :proximo_codigo
> where (tabela = :tabela);
> end
> suspend;
> end
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista