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.
Isaque, como funciona os Select, Consultas onde tenho que fazer Select complexos,
ResponderExcluirexiste alguma classe Critéria?
Bom dia existe sim, na unit ormbr.criteria.interface.pas.
Excluirpara usar usa assim:
var
oSQL: ICriteria;
begin
oSQL := ICriteria.SQL.Select('lista de campos').From('tablename')
e por diante.
Veja mais sintaxe no link : http://www.thedelphigeek.com/2015/04/runtime-sql-query-builder.html