[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