[firebase-br] Registros duplicados e Demora para Incrementar....

eduardo eduardo em icontroller.com.br
Qua Dez 21 02:23:09 -03 2005


Olá

A única maneira segura de se obter números únicos é através de 
generators. Se vc já usou e "nada". Revise sua lógica, generators são 
extremamente seguros e rápidos.

Experimente fazer assim:

1. Crie o Generator e atribua seu valor para começar

CREATE GENERATOR PEDIDOVENDAS

SET GENERATOR PEDIDOVENDAS TO (SELECT MAX(NM) AS GERAL FROM PEDIDOVENDAS')

2. Obtenha o valor incrementado quando necessário
    Dm.Qy_033.Close;
    Dm.Qy_033.SQL.Clear;
    Dm.Qy_033.SQL.Add('SELECT GEN_ID(PEDIDO_VENDAS,1) FROM RDB$DATABASE');
    Dm.Qy_033.Open;

Observe que GEN_ID(PEDIDO_VENDAS,1) traz o valor já incrementado.
Se vc quiser saber o valor sem incrementar, utilize GEN_ID(PEDIDO_VENDAS,0)

Aposto um fusca que vc vai dormir tranqüilo daqui para frente :-)

[]s Eduardo

Alcistemas Informática wrote:
> Prezados amigos, estou com o seguinte problema:
> 
> uso firebird 1.5, componentes de acesso da paleta Interbase do Delphi 7
> 
> preciso gerar  o proxímo número de pedidos, em uma base dados com 102.000 pedidos já gravados e uma média de 400.000 itens relacionados no total
> tem uns 2000 clientes, o problema é:
> 
> para gerar o número do proximo número do pedido faço assim:
> 
> 
>          Dm.Qy_033.Close;
>          Dm.Qy_033.SQL.Clear;
>          Dm.Qy_033.SQL.Add('SELECT MAX(NM) AS GERAL FROM PEDIDOVENDAS');
>          Dm.Qy_033.Open;
> 
>          if Dm.Qy_033.Fields[0].Text <> '' then
>             EditNm.Text :=  IntToStr(StrToInt(Dm.Qy_033.Fields[0].Value)+1)
>          else
>             EditNm.Text := '1';
>         end;
> 
> 
> Tenho então 2 problemas:
> 
> 
> 1) quando se tem um outro usuario fazendo o gravar no mesmo momento os números de pedidos se repetem nas duas máquinas.
> 
> 2) Quando o gravar é sozinho, mesmo sem ninguem gravando ao mesmo tempo a demora é muito grande.
> 
> as vezes da erro de DEADLOCK ?????
> 
> Criei indice e nada, usei um Generator e nada também.... alguém poderia me dar uma ajudinha ?
> 
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 





Mais detalhes sobre a lista de discussão lista