Como Filtrar dados usando o DBLoockup
Olá galera, estou programando em Delphi e estou usando o Firebird 2.5 como banco de dados. Utilizo o dbExpress como componente para a conexão. Estou desenvolvendo uma aplicação de cadastro de clientes e estou com uma duvida em filtrar alguns dados. O meu banco possui 4 tabelas:
1- TAB_CAD_CLI (Destinada para dados cadastrais do cliente como COD_CLI, NOME, CPF....)
2- TAB_UF (Destinada para cadastrar Estados)
3- TAB_CIDADE (Destinada para cadastrar Cidades)
4- TAB_BAIRRO (Destinada para cadastrar Bairros)
Como que eu faço para relacionar as tabelas (TAB_UF, TAB_CIDADE, TAB_BAIRRO) com a TAB_CAD_CLI?
A minha intenção é que quando eu estiver fazendo de algum cadastro de cliente, já apareça por exemplo todos estados cadastrados na TAB_UF para que eu possa escolher. E ainda mais, quando eu escolher um estado, na parte de CIDADE já apareça as cidades cadastradas na TAB_CIDADE pertencentes ao estado escolhido. O mesmo aconteceria com o bairro.
Ex.: Estou cadastrando um cliente, na parte referente aos dados de endereço, (no caso irei usar um Dropdown para aparecer as opções de UF, CIDADE, BAIRRO) seleciono o estado MG. Depois aparece todas as cidades cadastradas em MG. Escolho alguma cidade, por exemplo Belo Horizonte. Depois aparece todos os bairros cadastrados na cidade Divinópolis e escolho um.
Alguém tem uma idéia de como posso estar fazendo esse filtro?
Essa é a tela de cadastro.
Obrigado!!
1- TAB_CAD_CLI (Destinada para dados cadastrais do cliente como COD_CLI, NOME, CPF....)
2- TAB_UF (Destinada para cadastrar Estados)
3- TAB_CIDADE (Destinada para cadastrar Cidades)
4- TAB_BAIRRO (Destinada para cadastrar Bairros)
Como que eu faço para relacionar as tabelas (TAB_UF, TAB_CIDADE, TAB_BAIRRO) com a TAB_CAD_CLI?
A minha intenção é que quando eu estiver fazendo de algum cadastro de cliente, já apareça por exemplo todos estados cadastrados na TAB_UF para que eu possa escolher. E ainda mais, quando eu escolher um estado, na parte de CIDADE já apareça as cidades cadastradas na TAB_CIDADE pertencentes ao estado escolhido. O mesmo aconteceria com o bairro.
Ex.: Estou cadastrando um cliente, na parte referente aos dados de endereço, (no caso irei usar um Dropdown para aparecer as opções de UF, CIDADE, BAIRRO) seleciono o estado MG. Depois aparece todas as cidades cadastradas em MG. Escolho alguma cidade, por exemplo Belo Horizonte. Depois aparece todos os bairros cadastrados na cidade Divinópolis e escolho um.
Alguém tem uma idéia de como posso estar fazendo esse filtro?
Essa é a tela de cadastro.
Obrigado!!
Pedro Henrique
Curtidas 0
Respostas
Leonardo Xavier
14/09/2010
como esta o seu banco de dados para este seu formulario de cadastro? Pois pelo que pude perceber você terá que ter tres tabelas uma para bairro, outra para estado e outra para cidade, para que fique mais simples. Mas se voc6e quiser trabalhar com uma tabela somente da tambem. Como vai funcionar o seu banco de dados?
GOSTEI 0
Pedro Henrique
14/09/2010
O meu DER esta modelado da seguinte forma.
Como você comentou, meu banco possui as 3 tabelas. Uma tabela para Estado, Cidade, e Bairro.
Como você comentou, meu banco possui as 3 tabelas. Uma tabela para Estado, Cidade, e Bairro.
GOSTEI 0
Pietro Braga
14/09/2010
Pode tentar assim, lembrando que não testei mais a lógica deve ser esta:
dsxx = DataSource que vc usa no lookupcombobox xx.
lucbb = DbLookupComboBox
Tente isso depois que você selecionou o estado.
dscidades.filtered:= false;
dscidades.filter:= 'FK_Cod_Estado = ' + lucbbEstado.KeyField.Value.asString;
dsCidades.Filtered:= True;
dsxx = DataSource que vc usa no lookupcombobox xx.
lucbb = DbLookupComboBox
Tente isso depois que você selecionou o estado.
dscidades.filtered:= false;
dscidades.filter:= 'FK_Cod_Estado = ' + lucbbEstado.KeyField.Value.asString;
dsCidades.Filtered:= True;
GOSTEI 0
Leonardo Xavier
14/09/2010
O meu DER esta modelado da seguinte forma.
Como você comentou, meu banco possui as 3 tabelas. Uma tabela para Estado, Cidade, e Bairro.
Como você comentou, meu banco possui as 3 tabelas. Uma tabela para Estado, Cidade, e Bairro.
Cara eu faria assim, construiria uma consulta.
Ao terminar de selecionar o estado.
var
pais:string;
begin
pais:=inttostr(meulokupdopais.keyvalue);
minhatabela.close;
minhatabela.sql.clear;
minhatabela.sql.add('Select distintc sgl_estado,nom_estado,fk cod_pais from estado where cod_pais="'+pais+'"');
minhatabela.prepared;
minhatabela.open;
Faz um teste ai.
GOSTEI 0
Pedro Henrique
14/09/2010
Em qual evento eu devo colocar essas lógicas? Seria no evento "OnExit" do Loockup Estado ou no evento "OnEnter" do Loockup Cidade?
GOSTEI 0
Pietro Braga
14/09/2010
Cara, se for com o código que postei pode colocar no OnChange do lookup estado.
Só mude o KeyField.Value.asString para KeyValue.asString ou str(KeyValue)
Só mude o KeyField.Value.asString para KeyValue.asString ou str(KeyValue)
GOSTEI 0
Pedro Henrique
14/09/2010
Pietro e Leandro, muito obrigado pelas dicas que vcs me passaram
Estou tentando usar pelo modo que o Pietro me falou. Porem, quando eu insiro o código que você digitou no evento OnChange do Loockup estado (ja fazendo as alterações) me retorna o seguintes erros
Abaixo está o código que coloquei no evento OnChange
Tem algo errado no código? Tem alguma sugestão de como posso estar resolvendo esse problema?Obrigado pela compreensão.
Estou tentando usar pelo modo que o Pietro me falou. Porem, quando eu insiro o código que você digitou no evento OnChange do Loockup estado (ja fazendo as alterações) me retorna o seguintes erros
Abaixo está o código que coloquei no evento OnChange
procedure Tfrmcad.DSUFDataChange(Sender: TObject; Field: TField);begin DSCidade.DataSet.Filtered:= False; DSCidade.DataSet.Filter := 'FK_COD_ESTADO = ' + DB_LCB_UF.KeyValue.asString; DSCidade.DataSet.Filtered:= True;end;
Tem algo errado no código? Tem alguma sugestão de como posso estar resolvendo esse problema?Obrigado pela compreensão.
GOSTEI 0