ComboBox dependendo de outro
Oi pessoal, sou [b:a73ff5975f]novato[/b:a73ff5975f] na programação.
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
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
Curtidas 0
Respostas
Skaarj
10/03/2004
Exato voce terá que pesquisar por SQL..
Algo como:
[b:df14eaab4d]DbComboboxSecretariaOnExit[/b:df14eaab4d]
[b:df14eaab4d]DbComboboxUnidadeOnExit[/b:df14eaab4d]
Mas nao sei como está sua estrutura de tabelas, mas acho que isso ae acima, serve pra clarear as ideas.. Boa sorte
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
Fariasps
10/03/2004
Ainda não estou conseguindo.
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
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
Pedro Bugim
10/03/2004
Vc pode fazer de uma maneira diferente, que acho beeeem melhor. Em primeiro lugar, o DbLookUpComboBox deixa a tabela aberta, com os dados expostos. Prefiro utilizar um combobox comum e carregar os dados que necessito no mesmo.
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:
Agora, o primeiro combobox estará com os registros da tabela e do campo que vc selecionou.
No evento OnChange do primeiro combobox, coloque:
Então, basta repetir a operação para o combobox3, e sua respectiva tabela. OK?!
Espero ter ajudado. Maiores dúvidas, escreva.
Abraços,
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
Pedro Bugim
10/03/2004
putz, esqueci!
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?!
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