Meu modelo de dados esta certo ou errado?
[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]
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
Curtidas 0
Respostas
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
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
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
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.
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
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
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.
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
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
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
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