Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com campo Lookup entre ClientDataSet e ADODataSet


danielrgoes

Pergunta

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.

Editado por danielrgoes
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...