Fórum ComboBox dependendo de outro #219521
10/03/2004
0
Estou desenvolvendo um programa em Delphi7 para controle patrimonial onde tenho as seguntes tabelas em Paradox:
T_Secretarias = Onde cadastro as secretarias.
T_Unidades = Onde cadastro as unidades de cada secretaria
T_Setores = Onde cadastro os setores de cada Unidade.
T_Bens = Onde cadastro os bens de cada Setor.
No Form de cadastro dos bens tenho um DBLookupComboBox1 para Secretaria, Unidades e setores.
Gostaria que o DBLookupComboBox1 das unidades só ficasse disponível quando o usuário selecionasse a secretaria e ele só mostrasse as unidades pertencentes a secretaria selecionada. Da mesma forma os setores só mostrasse os setores das unidades selecionadas.
Acho que tenho que usar SQL, ou não é o DBLookupComboBox1 que devo usar, tenho que inserir um Query e um DataSource.
Se não entendeu, por favor, pergunte que posso reformular a pergunta.
Desde já, obrigado...
Farias P. de Sousa
Fariasps
Curtir tópico
+ 0Posts
10/03/2004
Skaarj
Algo como:
[b:df14eaab4d]DbComboboxSecretariaOnExit[/b:df14eaab4d]
with query1 do begin sql.clear; sql.text:=´select nome from unidade where secretaria = :sSecretaria´ parambyname(´sSecretaria´).asstring:=dbcomboboxSecretaria.text; end;
[b:df14eaab4d]DbComboboxUnidadeOnExit[/b:df14eaab4d]
with query1 do begin sql.clear; sql.text:=´select nome from setores where unidade = :sUnidade´ parambyname(´sUnidade´).asstring:=dbcomboboxUnidade.text; end;
Mas nao sei como está sua estrutura de tabelas, mas acho que isso ae acima, serve pra clarear as ideas.. Boa sorte
Gostei + 0
10/03/2004
Fariasps
Dar pra dar um pouco mais mastigado, com as linhas comentadas...
As tabelas tem os seguintes campos:
T_Secretarias = NomeSecretaria, Secretário, DataFundacao, ...
T_Unidades = NomeUnidade, Secretaria, ResponsavelUnidade, DataFundacao, ...
T_Setores = NomeSetor, Unidade, Secretaria, ResponsavelSetor, ...
T_Bens = NomeBem, Secretaria, Unidade, Setor, DataAquisicao, ...
Acho que é pq meu curso de Delphi estar trancado a umas 3 semanas e ainda não vi nada de SQL, mas queria dar uma adiantada.
Obrigado,
Farias P. de Sousa
Gostei + 0
10/03/2004
Pedro Bugim
Crie uma Query, um dataSource e 3 ComboBox. Deixe apenas o primeiro combobox ativo. Ou seja: Dois deles estarão com a propriedade enabled=false;
No evento OnShow do form, faça o seginte:
{Carregando a Query}
With Query1 do
Begin
Close; //Fecha a Query
Sql.Clear; // Limpa o código sql da Query
Sql.Add(´Select * from TABELA1´); //Carrega a Query com os dados da tabela que vc quiser
Open; // Abre a Query para uso
end;
{Carregando o primeiro ComboBox}
Combobox1.Items.Clear; //Limpa os itens existentes no Combobox
Query1.First; //Vai para o primeiro registro da query
while not Query1.Eof do //Loop feito nos dados inseridos na query
begin
Combobox1.Items.add(Query1.FieldByName(´CAMPO´).Asstring); //Adiciona o registro do campo que quiser no ComboBox
Query1.Next; //passa para o próximo registro da tabela
end;Agora, o primeiro combobox estará com os registros da tabela e do campo que vc selecionou.
No evento OnChange do primeiro combobox, coloque:
If Combobox1.text<>´´ then
{caso o usuário tenha selecionado algo, então o segundo combobox será habilitado e carregado com os dados da outra tabela!}
begin
With Query1 do //Carregando a Query com os dados da segunda tabela
Begin
Close;
Sql.Clear;
Sql.Add(´Select * from TABELA2´);
Open;
end;
{Carregando o segundo ComboBox}
Combobox2.Items.Clear;
Query1.First;
while not Query1.Eof do
begin
Combobox2.Items.add(Query1.FieldByName(´CAMPO´).Asstring);
Query1.Next;
end;
Combobox2.Enabled:=True; //Ativa o copmbobox2, já com os dados carregados
end;Então, basta repetir a operação para o combobox3, e sua respectiva tabela. OK?!
Espero ter ajudado. Maiores dúvidas, escreva.
Abraços,
Gostei + 0
10/03/2004
Pedro Bugim
A segunda parte de código que enviei deve ficar no evento OnExit do ComboBox, e no segundo e terceiro ComboBox, o select deve ser diferente. Deve-se especificar o campo desejado.
ex. Sql.Add(´select * from TABELA2 where CAMPO=´+Quotedstr(Combobox1.text)+´´);
Desta forma, o segundo combobox somente mostrará registros aonde conste o texto selecionado no primeiro combobox.
Ok?!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)