Fórum ComboBox dependendo de outro #219521

10/03/2004

0

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


Fariasps

Fariasps

Responder

Posts

10/03/2004

Skaarj

Exato voce terá que pesquisar por SQL..
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


Responder

Gostei + 0

10/03/2004

Fariasps

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


Responder

Gostei + 0

10/03/2004

Pedro Bugim

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:

{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,


Responder

Gostei + 0

10/03/2004

Pedro Bugim

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?!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar