Sabemos que banco de dados nenhum, conseguira oferecer seus beneficios, em questao aqui sua velocidade de busca, se alem de nao for bem arquitetado, tambem for usado de forma incoerente, por um sistema mal projetado.No ORMBr, temos o recurso de paginacao para resolver isso, quando formos fazer um select de muitos registros, paginacao e um recurso fundamental para que o sistema reflita a velocidade de retorno, o qual o banco de dados nao faria sozinho, para definirmos esse recurso no ORMBr, usaremos um terceiro parametro na class de conexao.// DBExpress de 10 em 10oConnection := TFactoryDBExpress.Create(SQLConnection1, dnSQLite, 10); // ZeosLib de 50 em 50oConnection := TFactoryZeos.Create(ZConnection1, dnSQLite, 50);// FireDAC de 100 em 100oConnection := TFactoryFireDAC.Create(FDConnection1, dnSQLite, 100);Demostrei em cada tipo de fabrica que pode ser usado no ORMBr, um valor diferente, para ficar bem claro que voce e quem decidira a paginacao desejada, trazendo assim agilidade nos selects de seu sistema, principalmente se seu cliente tenha uma rede precaria. No delphi desde sempre existiu o lookup field, e como nao podemos deixar no ORMBr podemos criar lookup field de forma simples, e o que vamos mostrar nesse artigo de hoje.No nosso modelos teremos uma propriedade que recebera o ID da tabela lookup, ficando assim o exemplo: ... [Column('detail_lookup_id', ftInteger)] [Dictionary('detail_lookup_id','Mensagem de validacao','','','',taCenter)] property detail_lookup_id: Integer Index 0 read Flookup_id write Flookup_id; ...Continuando, teremos a tabela que ira receber o ID da tabela lookup que vou representa-la pela variavel oDetail, ela e quem tera a propriedade acima no seu modelo.Tambem teremos a tabela lookup, que mostrara todos os seus registros para que possamos selecionar um, vou representa-la pela variavel 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 variaveis oDetail e oLookup, foram instanciadas recebendo dois parametros, de conexao e um TClientDataset para fazer cache, ate ai normal como ja mostrado em outro artigo.O segredo esta aqui nessa linha: oDetail.DataSet.AddLookupField('lookup_field', 'detail_lookup_id', oLookup.DataSet, 'lookup_id', 'lookup_description');Como o campo ID sera recebida pela tabela oDetail como falei acima, o campo lookup sera criado nela, chamando o metodo AddLookupField, esse metodo recebera todos os parametros necessarios para configurar um TField do tipo Lookup, os parametros sao: procedure AddLookupField(AFieldName: string; AKeyFields: string; ALookupDataSet: TObject; ALookupKeyFields: string; ALookupResultField: string);AFieldName: Nome para o TField campo; AKeyFields: Nome do campo que recebera o valor do campo que sera definido em LookupKeyFields que vira da tabela lookup; ALookupDataSet: A variavel que foi instanciada e tera os registros lookup, no nosso caso oLookup; ALookupKeyFields: Nome do campo chave que sera o retorno da tabela lookup, para ser armazenado no AKeyFields; ALookupResultField: Nome do campo result para ser visualizado. Seja bem vindo a mais esse artigo, e boa leitura. Lancei hoje os drivers para gerenciamento de banco de dados para Interbase e PostgreSQL, ja estao disponiveis no repositorio, duvidas, perguntas, bugs, sugestoes, gentileza podem ser postados no Forum http://www.ormbr.com.br/forum e os fontes podem ser baixados no site http://www.ormbr.com.br no menu Download. Quero aqui deixar meus agradecimentos ao