Meu modelo de dados esta certo ou errado?

14/10/2006

0

[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

Responder

Posts

17/10/2006

Vanius

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


Responder

18/10/2006

Souzaaguiar

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


Responder

18/10/2006

Vanius

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.


Responder

19/10/2006

Souzaaguiar

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


Responder

19/10/2006

Raserafim

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.


Responder

05/11/2006

Souzaaguiar

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


Responder

05/11/2006

Souzaaguiar

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


Responder

05/11/2006

Souzaaguiar

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.



Responder

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

Aceitar