Parâmetros do tipo Bytes (representando um GUID) dá erro em relacionamento Master/Detail.
Descrição do bug Parâmetros do tipo Bytes (representando um GUID) dá erro em relacionamento Master/Detail.
Criei um campo CHAR(16) com charset OCTETS no Firebird para armazenar as PKs em formato GUID. No Delphi, estes campos são do tipo TBytesField.
Ao adicioná-los como parâmetros ou em RelationsFields, o parâmetro, por padrão, fica como TBytes.
Na hora de dar um Post no Mestre, ocorre o erro abaixo.

Mesmo modificando o tipo do parâmetro para TGuid, o erro ainda ocorre. Debugando, identifiquei que o problema está na unit uRESTDWPoolerDB, na validação feita em CloneDetails (linhas 10413 a 10416 e 10444 e 10448) (TRESTDWClientSQL.PrepareDetails). Retirando estas linhas, o erro não ocorre.
Esta mesma validação também é feita na CloneDetails de TRESTDWTable.PrepareDetails. (Aqui não fiz o teste).
Comportamento esperado
Informações técnicas:
- OS: Windows 10
- Versão do RDW: 1.4.3-2923 SVN
- Plataforma de destino de compilação: Windows 10 32 bits
ByteArray e Integer não são compatíveis porque o ByteArray pode ser maior que o Integer. Se for uma sequência numérica de 16 dígitos como você especificou com CHAR(16), daí isso daí teria que ser Int64 porque o integer só aceita 10 dígitos.
Se tratando de um GUID, considerando que ele tem um formato próprio alfanumérico, o correto seria usar o tipo String e não TBytes.
Confere esses passos e se ainda sim persistir o problema a gente dá uma analisada no código e modifica as validações se precisar.
A escolha por CHAR(16) e charset OCTETS seguiu a orientação do próprio Firebird de armazenamento de GUIDs. E quando adicionado os fields nos DataSets, automaticamente eles vêm como TBytesField.
O problema, como mencionei, ocorre numa validação que é feita apenas para verificar se os parâmetros possuem o mesmo valor e caso possuam, sair da rotina.
Poderia confirmar se o erro persiste na versão nova por gentileza?
Tarefa encerrada por falta de interação, caso problema persista abrir novamente.