Meu modelo de dados esta certo ou errado?

Modelagem

14/10/2006

[color=blue:ba0439b99a]Olá pessoal, minha duvida eh a seguinte

Minhas tabelas

tb_estado

sigla_estado
nome_estado

tb_cidades

cod_cidade
sigla_estado
nome_cidade

tb_cleientes

cod_cliente
cod_cidade
nome_cliente
...

Poderia colocar cidade e estado na mesma tabela mas prefiro modelar dessa forma porém estou com uma duvida.


NO FORMULARIO DE CLIENTE QUERO UM COMBOBOX ESTADO Q CARREGA AS CIDADES APOS O EVENTO ONEXIT DO COMBO ESTADO.

SE EU TENHO NA TABELA CLIENTE A CHAVE COD_CIDADE PARA, O CAMPO CIDADE COMO DEVO FAZER PRA LIGAR O ESTADO???

OBS.: O PROBLEMA EH Q QUANDO PERCORRO OS REGISTROS GRAVADOS COM O DBNAVIGATOR ELE ALTERA AS CIDADES MAS COMO OS ESTADOS NAO ESTAO LIGADOS NA TABELA CLIENTE ELE SEMPRE FICA NO Q ESTA SELECIONADO.

Acho q eh isso, vcs entenderam???

Obrigado!!![/color:ba0439b99a]



O principal problema é que não existe um relacionamento entre as tabelas, então, sempre que vc for percorrer os registros isso vai ocorrer...

deveria ter mais ou nome essas estrutura:

Citação:
tbEstados
Cod_Estado - Chave Primaria PK
Sigla
Nome


Citação:
tbCidades
Cod_Cidade - Chave Primaria PK
Cod_Estado - Chave Estrangeira FK
Nome


Citação:
tbClientes
Cod_Cliente - Chave Primaria PK
Cod_Cidade - Chave Estrangeira FK
Cod_Estado - Chave Estrangeira FK
Nome
Fone
...


e para ficar tudo amarado vc poderia usar o componente DbLockupComboBox para filtra dados da tabela cidades de acordo com estado selecionado

no evento OnCloseUp do DBLookupComboBox Estados vc faz:
Código:
...
with SqlCidades do
begin
Close;
CommanText := ´Select * From Cidades where Cod_Estados =´+SqlEstadosCod_Estado.AsString + ´ Order by Nome;
Open;
Sql
end;

[color=red:ba0439b99a]
eu posso criar uma consulta que va de cliente ate estado?????????????


select * from
tb_clientes a
left outer join
tb_cidades b
on a.cod_cidade=b.cod_cidade
left outer join
tb_estado c
on b.sigla_estado=c.sigla_estado[/color:ba0439b99a]


Souzaaguiar

Souzaaguiar

Curtidas 0

Respostas

Vanius

Vanius

14/10/2006

Um certo autor diz que um modelo de dados sempre necessita de revisao. Se o seu nao precisa, é q vc nao enxergou onde esta o erro.

Bem, seu modelo esta correto.
O problema que vc esta tendo é com o desenvolvimento da aplicação.

Vc pode fazer o seguinte:
Em sua querie de cidades, coloque
SELECT
sigla_estado,
nome_cidade
FROM
tb_cidades

No DBLOOKUPCOMBOBOX vc pode colocar na propriedade ´listfield´ (acho q é isto... é o campo q exibe os valores..) NOME_CIDADE;SIGLA_ESTADO
o ´;´ deixa vc exibir mais de 1 valor.

Acho q a solução seria por ai.

Espero q te ajude.

Abraços,

Vanius Girodo


GOSTEI 0
Souzaaguiar

Souzaaguiar

14/10/2006

No DBLOOKUPCOMBOBOX vc pode colocar na propriedade ´listfield´ (acho q é isto... é o campo q exibe os valores..) NOME_CIDADE;SIGLA_ESTADO o ´;´ deixa vc exibir mais de 1 valor.


Mas dessa forma vou exibir no mesmo loockup a cidade e o estado. Eu quero clicar comboestado e ele carrega o lookup cidade.

Obrigado!!!!!!!!


GOSTEI 0
Vanius

Vanius

14/10/2006

entao vc pode colocar 3 Tquery, 1 relacionado com o outro.

select * from tb_estado

select * from tb_cidade where uf = :UF -- receber o parametro do Tquery anterior

select * fom tb_cliente where uf = :uf and Cidade = :cidade -- receber os parametros da tquery anterior


Tem um certo tempo q nao desenvolvo em Delphi, mas é algo assim.
Espero ter ajudado.


GOSTEI 0
Souzaaguiar

Souzaaguiar

14/10/2006

select * from tb_estado select * from tb_cidade where uf = :UF -- receber o parametro do Tquery anterior select * fom tb_cliente where uf = :uf and Cidade = :cidade -- receber os parametros da tquery anterior


Opa, Ajudou mt, salvou meu dia... pode ateh nao dah certo mas a ideia eh exatamente essa.

Obrigado vanius
Vo testar agora!!!


GOSTEI 0
Raserafim

Raserafim

14/10/2006

na tabela clientes vc não precisa colocar o código da cidade e o código do estado,
basta apenas o código da cidade, já que na tabela cidades vc já tem o estado.

além disso vc pode dispensar o cod_estado na tabela estados e utilizar como PK a própria Sigla (já que são apenas dois dígitos).

no form vc pode fazer o seguinte. em um combo lista todos os estados.
e ao escolher o estado vc abre uma outra query, onde estarão as cidades, e passa como parâmetro o código do estado. assim só serão retornados as cidades do estado que foi selecionado.


GOSTEI 0
Souzaaguiar

Souzaaguiar

14/10/2006

na tabela clientes vc não precisa colocar o código da cidade e o código do estado, basta apenas o código da cidade, já que na tabela cidades vc já tem o estado. além disso vc pode dispensar o cod_estado na tabela estados e utilizar como PK a própria Sigla (já que são apenas dois dígitos). no form vc pode fazer o seguinte. em um combo lista todos os estados. e ao escolher o estado vc abre uma outra query, onde estarão as cidades, e passa como parâmetro o código do estado. assim só serão retornados as cidades do estado que foi selecionado.


Excelente, sem duvidas essa eh a forma ideal porem estou com um problema. tenho um combobox pra estado e um pra cidade. O de cidade tem q salvar na tabela cidades o codigo, porem deve exibir o nome da mesma forma q trabalha um lookup.
Como resolver isso???

Fazer de um combobox um lookupcombobox?

Obrigado


GOSTEI 0
Souzaaguiar

Souzaaguiar

14/10/2006

na tabela clientes vc não precisa colocar o código da cidade e o código do estado, basta apenas o código da cidade, já que na tabela cidades vc já tem o estado. além disso vc pode dispensar o cod_estado na tabela estados e utilizar como PK a própria Sigla (já que são apenas dois dígitos). no form vc pode fazer o seguinte. em um combo lista todos os estados. e ao escolher o estado vc abre uma outra query, onde estarão as cidades, e passa como parâmetro o código do estado. assim só serão retornados as cidades do estado que foi selecionado.


Excelente, sem duvidas essa eh a forma ideal porem estou com um problema. tenho um combobox pra estado e um pra cidade. O de cidade tem q salvar na tabela cidades o codigo, porem deve exibir o nome da mesma forma q trabalha um lookup.
Como resolver isso???

Fazer de um combobox um lookupcombobox?

Obrigado


GOSTEI 0
Souzaaguiar

Souzaaguiar

14/10/2006

na tabela clientes vc não precisa colocar o código da cidade e o código do estado, basta apenas o código da cidade, já que na tabela cidades vc já tem o estado. além disso vc pode dispensar o cod_estado na tabela estados e utilizar como PK a própria Sigla (já que são apenas dois dígitos). no form vc pode fazer o seguinte. em um combo lista todos os estados. e ao escolher o estado vc abre uma outra query, onde estarão as cidades, e passa como parâmetro o código do estado. assim só serão retornados as cidades do estado que foi selecionado.



GOSTEI 0
POSTAR