Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
RefPina Novato
Registrado: Quinta-Feira, 31 de Outubro de 2019 Mensagens: 43 Localização: São Paulo
|
Enviada: Qui Out 31, 2019 10:26 am Assunto: Não carregar registro selecionado em outro Combo (RESOLVIDO) |
|
|
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 |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Out 31, 2019 2:11 pm Assunto: |
|
|
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 |
|
|
RefPina Novato
Registrado: Quinta-Feira, 31 de Outubro de 2019 Mensagens: 43 Localização: São Paulo
|
Enviada: Qui Out 31, 2019 2:19 pm Assunto: |
|
|
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 |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Out 31, 2019 2:24 pm Assunto: |
|
|
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 |
|
|
RefPina Novato
Registrado: Quinta-Feira, 31 de Outubro de 2019 Mensagens: 43 Localização: São Paulo
|
Enviada: Qui Out 31, 2019 2:54 pm Assunto: |
|
|
Muito obrigado natanbh1 atendeu perfeitamente a minha necessidade. |
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Out 31, 2019 3:02 pm Assunto: |
|
|
Blz, amigo. Que bom que deu certo. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
RefPina Novato
Registrado: Quinta-Feira, 31 de Outubro de 2019 Mensagens: 43 Localização: São Paulo
|
Enviada: Qua Nov 06, 2019 2:18 pm Assunto: |
|
|
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 |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qua Nov 06, 2019 2:48 pm Assunto: |
|
|
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 |
|
|
RefPina Novato
Registrado: Quinta-Feira, 31 de Outubro de 2019 Mensagens: 43 Localização: São Paulo
|
Enviada: Qua Nov 06, 2019 4:35 pm Assunto: |
|
|
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 |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
|
Voltar ao Topo |
|
|
RefPina Novato
Registrado: Quinta-Feira, 31 de Outubro de 2019 Mensagens: 43 Localização: São Paulo
|
Enviada: Qui Nov 07, 2019 9:26 am Assunto: |
|
|
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 |
|
|
RefPina Novato
Registrado: Quinta-Feira, 31 de Outubro de 2019 Mensagens: 43 Localização: São Paulo
|
Enviada: Qui Nov 07, 2019 12:13 pm Assunto: |
|
|
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 |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Nov 07, 2019 12:31 pm Assunto: |
|
|
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 |
|
|
RefPina Novato
Registrado: Quinta-Feira, 31 de Outubro de 2019 Mensagens: 43 Localização: São Paulo
|
Enviada: Qui Nov 07, 2019 2:01 pm Assunto: |
|
|
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 |
|
|
|