Jump to content
Fórum Script Brasil
  • 0

Problema com campo Lookup entre ClientDataSet e ADODataSet


danielrgoes

Question

Boa tarde!

Tenho um banco de dados Firebird e um banco de dados Progress 11.7 que precisam ser acessados por um mesmo programa. Consegui fazer as conexões corretamente e ambos os bancos são acessados.

Porém, preciso criar um campo Lookup no meu ClientDataSet buscando dados do meu ADODataSet e isto está me causando problemas.

Por exemplo:

Tenho a tabela COMPUTADOR no meu banco Firebird que contém a chave estrangeira COD_FUNCIONARIO e tenho a tabela FUNCIONARIO no meu banco Progress 11.7 que contém a chave primária COD_FUNCIONARIO e o campo NOME. Preciso criar um campo Lookup com o NOME do funcionário no ClientDataSet da tabela COMPUTADOR.

Porém, o que acontece é que em alguns registros o nome é mostrado corretamente no campo Lookup, mas em outros registros não mostra.

Acredito que seja algum tipo de incompatibilidade entre os componentes ADO e CDS.

Alguém já viu isso acontecer? Pode me ajudar, por favor?

Obrigado.

Edited by danielrgoes
Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Use o componente DBLookupComboBox

Propriedades:

Configurar Tabela1

ListSource => coloque o DataSource  da Tabela1 que voce quer pesquisar

ListField => coloque o nome do campo de pesquisa

KeyField => coloque o nome do campo chave

 

Configurar Tabela2

DataField => coloque o nome do campo da Tabela2 que vai receber o resultado da Tabela1

DataSource => coloque o DataSource  da Tabela2

abraço

 

 

Link to comment
Share on other sites

  • 0
  • 0

Bom dia, Jhonas.

Obrigado pela resposta.

Mas como eu disse no primeiro post do problema, eu sei como criar o campo lookup e já o fiz, porém como utilizo dados de bancos diferentes, ele está se perdendo e não traz alguns registros, que quando utilizo DBLookupComboBox traz.

Como posso resolver isso?

Obrigado.

Link to comment
Share on other sites

  • 0

Bom dia, Jhonas.

Sobre o primeiro link, eu já fiz isso e acontece de alguns valores serem mostrados e outros não, mesmo com os registros existindo corretamente.

Sobre o segundo link, também já tentei, mas não atende à minha necessidade, porque ele irá colocar um DBLookupComboBox somente na linha selecionada do DBGrid, porém, meu DBGrid é para visualização e seleção do registro e não edição, então preciso que todas as linhas mostrem os valores.

Existe essa incompatibilidade entre ADODataSet e ClientDataSet?

Você já viu acontecer problema utilizando bancos diferentes?

Link to comment
Share on other sites

  • 0

Acho que,  o Dbgrid não aceita muito bem voce trabalhar com com bancos diferentes.

entretanto, acho que voce pode colocar 2 Dbgrids :  um para o ADODataSet e o outro para o ClientDataSet  ( lado a lado ) e durante a navegação do cursor em um, automaticamente moveria o cursor no outro.

Já vi acontecer esses problemas com Bancos diferentes, mesmo porque isso não é usual.

Porque voce não migra as tabelas de um banco para o outro e fica tudo num só ?

abraço   

Link to comment
Share on other sites

  • 0

Bom dia, Jhonas.

A migração das tabelas neste caso é inviável, porque um dos bancos é do ERP da empresa e o outro é de um sistema paralelo que consulta alguns dados.

Mas a ideia dos DBGrids lado a lado pode ser que sirva como solução para meu problema.

Como você sugere que eu faça a ligação entre eles?

Visualmente, ficaria da seguinte maneira:

image.png.a0c21e29fadb2836e37a44b53a5ee8e2.png

A tabela Computador tem o ID do funcionário e a tabela do Funcionário tem o campo Login AD.

Pensei em criar um RXMemoryData para o DBGrid da tabela Funcionário, mas fica muito lento e quando realizo buscas na tabela Computador, fica muito complexo manter o vínculo entre os dois DBGrids.

O que você sugere?

Obrigado.

Link to comment
Share on other sites

  • 0

Amigo, a muito tempo atrás ( 2009 ) fiz algo parecido com o que voce esta querendo

veja esse link

veja o que consegue fazer

outra sugestão possivel

https://stackoverflow.com/questions/32916374/add-dblookupcombobox-to-delphi-dbgrid/32935706

OBS: Não sei vai funcionar, mas tente isso

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin

   DBGrid2.SelectedIndex := DBGrid1.SelectedIndex;
   DBGrid2.DataSource := DBGrid1.DataSource;

end;

 

abraço

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.8k
×
×
  • Create New...