No delphi desde sempre existiu o lookup field, e como não podemos deixar no ORMBr podemos criar lookup field de forma simples, é o que vamos mostrar nesse artigo de hoje.
No nosso modelos teremos uma propriedade que receberá o ID da tabela lookup, ficando assim o exemplo:
Também teremos a tabela lookup, que mostrará todos os seus registros para que possamos selecionar um, vou representa-la pela variável oLookup, ficando assim o exemplo:
AKeyFields: Nome do campo que receberá o valor do campo que será definido em LookupKeyFields que virá da tabela lookup;
ALookupDataSet: A variável que foi instanciada e terá os registros lookup, no nosso caso oLookup;
ALookupKeyFields: Nome do campo chave que será o retorno da tabela lookup, para ser armazenado no AKeyFields;
ALookupResultField: Nome do campo result para ser visualizado.
No nosso modelos teremos uma propriedade que receberá o ID da tabela lookup, ficando assim o exemplo:
...
[Column('detail_lookup_id', ftInteger)]
[Dictionary('detail_lookup_id','Mensagem de validação','','','',taCenter)]
property detail_lookup_id: Integer Index 0 read Flookup_id write Flookup_id;
...
Continuando, teremos a tabela que irá receber o ID da tabela lookup que vou representa-la pela variável oDetail, ela é quem terá a propriedade acima no seu modelo.Também teremos a tabela lookup, que mostrará todos os seus registros para que possamos selecionar um, vou representa-la pela variável oLookup, ficando assim o exemplo:
...
var
oLookup: IContainerDataSet< tlookup >;
oDetail: IContainerDataSet< tdetail >;
begin
oDetail := TContainerClientDataSet< tdetail >.Create(oConn, CDSDetail);
oLookup := TContainerClientDataSet< tlookup >.Create(oConn, CDSLookup);
oDetail.DataSet.AddLookupField('lookup_field',
'detail_lookup_id',
oLookup.DataSet,
'lookup_id',
'lookup_description');
...
Observe que as variáveis oDetail e oLookup, foram instanciadas recebendo dois parâmetros, de conexão e um TClientDataset para fazer cache, até ai normal como já mostrado em outro artigo.
O segredo está aqui nessa linha: oDetail.DataSet.AddLookupField('lookup_field',
'detail_lookup_id',
oLookup.DataSet,
'lookup_id',
'lookup_description');
Como o campo ID será recebida pela tabela oDetail como falei acima, o campo lookup será criado nela, chamando o método AddLookupField, esse método receberá todos os parâmetros necessários para configurar um TField do tipo Lookup, os parâmetros são:
procedure AddLookupField(AFieldName: string;
AKeyFields: string;
ALookupDataSet: TObject;
ALookupKeyFields: string;
ALookupResultField: string);
AFieldName: Nome para o TField campo; AKeyFields: Nome do campo que receberá o valor do campo que será definido em LookupKeyFields que virá da tabela lookup;
ALookupDataSet: A variável que foi instanciada e terá os registros lookup, no nosso caso oLookup;
ALookupKeyFields: Nome do campo chave que será o retorno da tabela lookup, para ser armazenado no AKeyFields;
ALookupResultField: Nome do campo result para ser visualizado.