Fórum Como Filtrar dados usando o DBLoockup #386310

14/09/2010

0

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


 
Pedro Henrique

Pedro Henrique

Responder

Posts

14/09/2010

Leonardo Xavier

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

Gostei + 0

14/09/2010

Pedro Henrique

O meu DER esta modelado da seguinte forma.


Como você comentou, meu banco possui as 3 tabelas. Uma tabela para Estado, Cidade, e Bairro.
Responder

Gostei + 0

14/09/2010

Pietro Braga

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;
Responder

Gostei + 0

14/09/2010

Leonardo Xavier

O meu DER esta modelado da seguinte forma.


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.
Responder

Gostei + 0

16/09/2010

Pedro Henrique

Em qual evento eu devo colocar essas lógicas? Seria no evento "OnExit" do Loockup Estado ou no evento "OnEnter" do Loockup Cidade?
Responder

Gostei + 0

16/09/2010

Pietro Braga

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)
Responder

Gostei + 0

17/09/2010

Pedro Henrique

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
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.



Responder

Gostei + 0

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

Aceitar