ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Não carregar registro selecionado em outro Combo (RESOLVIDO)

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
RefPina
Novato
Novato


Registrado: Quinta-Feira, 31 de Outubro de 2019
Mensagens: 43
Localização: São Paulo

MensagemEnviada: Qui Out 31, 2019 10:26 am    Assunto: Não carregar registro selecionado em outro Combo (RESOLVIDO) Responder com Citação

Bom dia a todos,
Em um Form de consulta tenho dois ComboBox que listam registros da mesma tabela, esses Combos servem para um filtro com maior detalhamento. O que quero é que quando o usuário selecionar um registro no primeiro Combobox este registro selecionado não apareça no segundo ComboBox para evitar informações repetidas na consulta. Se alguém tiver alguma dica de como faço isso agradeço muito.


Editado pela última vez por RefPina em Qui Nov 07, 2019 2:03 pm, num total de 3 vezes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Out 31, 2019 2:11 pm    Assunto: Responder com Citação

Para fazer isso, basta no evento OnSelect do primeiro combobox carregar os dados do segundo combobox removendo o registro selecionado no primeiro combobox.

Se puder, poste o código que você usa para carregar o segundo combobox para que possamos esboçar um exemplo.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
RefPina
Novato
Novato


Registrado: Quinta-Feira, 31 de Outubro de 2019
Mensagens: 43
Localização: São Paulo

MensagemEnviada: Qui Out 31, 2019 2:19 pm    Assunto: Responder com Citação

Código:
function Tfrmwordsch.listaCamposidioma: TStringlist;
begin
 CDSidioma.Open;
 Result := Tstringlist.Create;
 Result.Clear;
 Result.BeginUpdate;
    With CDSidioma do
     begin
      First;
       while not CDSidioma.Eof do
         begin
          Result.Add(FieldByName('idioma').AsString);
          next;
         end;
     end;
 Result.EndUpdate;
end;


natanbh1 obrigado pela resposta. Este é o código que uso para carregar o ComboBox.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Out 31, 2019 2:24 pm    Assunto: Responder com Citação

Pensando melhor, não é necessário o seu código pois os 2 combobox's terão os mesmos dados com exceção de 1 item.

Teste o código abaixo, no evento OnSelect do combobox1 (considerando combobox1 o primeiro e combobox2 o segundo combobox).

Código:
var
  i: Integer;
begin
  ComboBox2.Items.Clear;

  for i := 0 to ComboBox1.Items.Count - 0 do
    if ComboBox1.Items[ComboBox1.ItemIndex] <> ComboBox1.Items[i] then
      ComboBox2.Items.Add(ComboBox1.Items[i]);
end;

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
RefPina
Novato
Novato


Registrado: Quinta-Feira, 31 de Outubro de 2019
Mensagens: 43
Localização: São Paulo

MensagemEnviada: Qui Out 31, 2019 2:54 pm    Assunto: Responder com Citação

Muito obrigado natanbh1 atendeu perfeitamente a minha necessidade.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Out 31, 2019 3:02 pm    Assunto: Responder com Citação

Blz, amigo. Que bom que deu certo.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
RefPina
Novato
Novato


Registrado: Quinta-Feira, 31 de Outubro de 2019
Mensagens: 43
Localização: São Paulo

MensagemEnviada: Qua Nov 06, 2019 2:18 pm    Assunto: Responder com Citação

Boa tarde amigos,
Retornei a este post, pois como minha duvida é parecida com a anterior já resolvida. Esta duvida é mais uma curiosidade. Se eu utilizar DBLookUpCombobox é possível implementar este mesmo método ou algo parecido? Quando selecionar um registro no primeiro DBLookUpCombobox não aparecer no segundo DBLookUpCombobox.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qua Nov 06, 2019 2:48 pm    Assunto: Responder com Citação

O DBLookupCombobox funciona de maneira de diferente sendo um espelho da sua consulta ao banco de dados.

Neste caso, vc pode fazer uma consulta SQL no Dataset ligado ao componente filtrando todos os registros com exceção do registro selecionado no primeiro dataset.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
RefPina
Novato
Novato


Registrado: Quinta-Feira, 31 de Outubro de 2019
Mensagens: 43
Localização: São Paulo

MensagemEnviada: Qua Nov 06, 2019 4:35 pm    Assunto: Responder com Citação

Se não for abusar da sua boa vontade. Poderia me mostrar um exemplo de como faço estas ligações para funcionar com 2 DBLookUpComboBox ligados a mesma tabela. Desculpe te incomodar, mas estou estudando Delphi e quero aprender o máximo possível e sua ajuda tem sido de grande valia. Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qua Nov 06, 2019 5:34 pm    Assunto: Responder com Citação

No seu caso, sugiro usar 2 dataset's diferentes sendo 1 para cada componente.

Veja se estes links ajudam na ligação do componente:

http://delphiparainiciantes.com.br/como-utilizar-o-dblookupcombobox-no-delphi/

https://www.devmedia.com.br/forum/configurar-dblookupcombobox/203584
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
RefPina
Novato
Novato


Registrado: Quinta-Feira, 31 de Outubro de 2019
Mensagens: 43
Localização: São Paulo

MensagemEnviada: Qui Nov 07, 2019 9:26 am    Assunto: Responder com Citação

Bom dia,
natanbh1 consegui carregar o DBLookUpComboBox1 com os artigos que me passou e agradeço pelas dicas. Mas no DBLookUpComboBox2 estou tentando carregar os mesmos valores do DBLookUpComboBox1 só que quando executo seleciono o registro no DBLookUpComboBox1 e o DBLookUpComboBox2 aparece vazio. No evento OnCloseUp estou usando o seguinte código:
Código:
with sqlquery3 do
begin
 close;
 sql.Clear;
 sql.Add('select * from tbl_cadidioma where cod_idioma = :pidi');
 ParamByName('pidi').Value:= qridioma.FieldByName('cod_idioma').AsInteger;
 open;
end;

Pode me dizer se este é o caminho certo, por favor?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
RefPina
Novato
Novato


Registrado: Quinta-Feira, 31 de Outubro de 2019
Mensagens: 43
Localização: São Paulo

MensagemEnviada: Qui Nov 07, 2019 12:13 pm    Assunto: Responder com Citação

Caro amigo,
fiz umas alterações no código e me deparei com outro problema. Quando seleciono o registro no DBLookUpComboBox1 ele carrega no DBLookUpComboBox2 somente o registro que foi selecionado e exclui os outros. Ainda no evento CloseUp do DBLookUpComboBox1 alterei para o seguinte código:
Código:
 procedure Tfrmwordsch.DBLookupComboBox1CloseUp(Sender: TObject);
begin
with CDSlc do
begin
  close;
  ParamByName('pidi').Value := CDSlp.FieldByName('idioma').AsString;
  open;


Passei os parametros no meu SQLQuery da seguinte maneira:
Código:
select * from tbl_cadidioma where idioma like :pidi

Estou usando select * pois se trata de uma tabela com apenas 6 registros.
Se puder me ajudar com esta parte, pois não achei nada na internet que me desse uma direção sobre este assunto.
Mais uma vez agradeço a ajuda de vocês.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Nov 07, 2019 12:31 pm    Assunto: Responder com Citação

No segundo DBLookupCombobox você deve mostrar todos os registros com exceção do selecionado então você deve usar o sinal de diferente no SQL.

Código:
select * from tbl_cadidioma where cod_idioma <> :pidi


Faça o filtro pelo código (cod_idioma) e não pelo campo texto (idioma).

E para filtrar faça:

Código:
procedure Tfrmwordsch.DBLookupComboBox1CloseUp(Sender: TObject);
begin
 with CDSlc do
 begin
  close;
  ParamByName('pidi').Value := CDSlp.FieldByName('cod_idioma').Value;
  open;
 end;
end;


Como citei antes, use datasets diferentes para cada DBLookupCombobox para que um componente não influencie no comportamento do outro.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
RefPina
Novato
Novato


Registrado: Quinta-Feira, 31 de Outubro de 2019
Mensagens: 43
Localização: São Paulo

MensagemEnviada: Qui Nov 07, 2019 2:01 pm    Assunto: Responder com Citação

Boa tarde natanbh1,
Muitíssimo obrigado pelas dicas foram extremamente assertivas, fiz os testes e está funcionando direitinho.
Agradeço pela sua disposição.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB