[firebase-br] Dígito verificador

Walter R. Ojeda Valiente sistemas2000profesional em gmail.com
Qua Jun 10 23:21:33 -03 2015


Si quieres aprender sobre los triggers, puedes leer los siguientes
artículos:

https://firebird21.wordpress.com/2013/03/17/entendiendo-a-los-triggers/

https://firebird21.wordpress.com/2014/03/14/escribiendo-un-trigger/

Saludos.

Walter.

2015-06-08 9:46 GMT-04:00 Fabio Cardoso <fabio em alcanceweb.com.br>:

> Olá Sandro,
>
> Eu concordo com a primeira saída, criar uma trigger. Porém, não sei como
> fazer isso, estou em busca de material na internet pra aprender, talvez
> você possa me dar uma dica da solução do problema.
>
> Boa semana.
>
> att,
> Fabio
>
>
> On 08/06/2015 09:24, Sandro Marcelo Pascoal wrote:
>
>> Fábio.
>> Vejo 2 saídas para isso.
>> 1) Vc cria um trigger para executar o código que calcula do DV (recomendo
>> essa).
>> 2) Vc cria uma dll com a função de cálculo do DV e usar ela no BD.
>>
>> Com relação a usar o generator dentro do trigger/procedure, é simples. Vc
>> usaria CODIGO = GEN_ID(NOME_DO_GEN, 1) e depois faria o cálculo do DV
>> usando a variável CODIGO.
>>
>> Não tenho certeza se é isso que você precisa. Talvez não tenha entendido.
>>
>> Sandro
>>
>> On 06/06/2015 16:56, Fabio Cardoso wrote:
>>
>>> Amigos,
>>>
>>> Estou criando uma tabela de clientes com o gerador automático de código
>>> para o campo CLIENTE_ID. O meu caso é que, em vez de usar o gerador padrão
>>> do firebird, onde ele gera o código sequencial (1, 2, 3,.....), eu quero
>>> gerar esse código sequencial adicionando um dígito verificador para ele.
>>>
>>> Assim, quando eu cadastrar três clientes, em vez de ficar assim
>>> CLIENTE_ID    -     CLIENTE_NOME
>>> 1    FABIO
>>> 2     JOÃO
>>> 3     CARLOS
>>>
>>> Ficaria assim:
>>> 19    FABIO
>>> 27    JOAO
>>> 35    CARLOS
>>>
>>> Onde, o código é composto do 1, que é o sequencial + 9, que é o dígito
>>> verificador desse 1. Eu baixei um código que calcula esse dígito
>>> verificador no Delphi, mas gostaria de fazer um generator do firebird pra
>>> realizar essa tarefa:
>>>
>>> function DvModulo11 ( str: String ): Char;
>>> var soma, fator, i: Integer;
>>>
>>>   function chInt ( ch: Char ): ShortInt;
>>>   begin
>>>     Result := Ord ( ch ) - Ord ( '0' );
>>>   end;
>>>
>>>   function intCh ( int: ShortInt ): Char;
>>>   begin
>>>     Result := Chr ( int + Ord ( '0' ) );
>>>   end;
>>>
>>> begin
>>>   soma := 0;
>>>   fator := 2;
>>>   for i := Length ( str ) downto 1 do
>>>   begin
>>>     soma := soma + chInt ( str[i] ) * fator;
>>>     Inc ( fator );
>>>     if fator = 10 then
>>>     fator := 2;
>>>   end;
>>>   soma := 11 - ( soma mod 11 );
>>>   if soma >= 10 then
>>>     Result := '1'
>>>   else
>>>   Result := intCh ( soma );
>>> end;
>>>
>>>
>>> um abraço,
>>> Fabio.
>>>
>>> ---
>>> Este email foi escaneado pelo Avast antivírus.
>>> https://www.avast.com/antivirus
>>>
>>>
>>> ______________________________________________
>>> 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
>>>
>>>
>>
>>
>
> ---
> Este email foi escaneado pelo Avast antivírus.
> https://www.avast.com/antivirus
>
>
> ______________________________________________
> 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