[firebase-br] Chave primaria Guid

Marcelo - MK Softwares marcelo em mksoftwares.com.br
Sexta Março 12 15:57:09 -03 2021


Aqui usamos C# e para resolver os problemas com guid, criamos esse 
domain, e funciona bem tranquilo.

CREATE DOMAIN UUID AS CHAR(16) CHARACTER SET OCTETS COLLATE OCTETS;


Em 12/03/2021 15:44, Carlos Wilson via lista escreveu:
> Boa tarde a todos,
>
> Atravessei a madrugada pesquisando e não achei solução para o meu 
> problema. Utilizo o Unidac.
>
> Devido a tantos problemas com replicação e outros em sincronizar 
> bancos de várias filiais estou tentando migrar minhas PK para GUID
>
> depois de estudar em alguns lugares vi que a pk tem que ser criada 
> como Char(16) Octates. Dessa maneira a pk é gravada como bytes 
> binarios e o desempenho fica melhor ao indexar e usar como FK.
>
> No delphi fiz essa função para preenchimento da chave.
>
> function Tdm.IncUUID: TBytes;
> var
>   qry: TUniQuery;
> begin
>   qry := TUniQuery.Create(Self);
>   qry.Connection := DBConn1;
>   qry.SQL.Clear;
>   qry.SQL.Add('select GEN_UUID() from RDB$DATABASE');
>   qry.Open;
>   Result := qry.Fields[0].AsBytes;
>   qry.Free;
> end;
>
> Ao fazer o append ele chama essa função e parece que está preenchendo. 
> porém ao dar um post, acontece a excessao:
>
> Could not convert variant of type (array byte) into type (integer).
>
> Atualizei o Unidac mas o erro persiste, mas não sei mais o que posso 
> fazer. Alguém, por favor, pode me dar uma luz?
>
> Grato.
>


Mais detalhes sobre a lista de discussão lista