RELACOES ENTRE TABELAS
Viva pessoal,
Estou a criar pela primeira vez uma base de dados em access usando tabelas relacionadas umas com as outras...ou seja.. (exemplo):
Tabela 1
Nome | Idade
Tabela 2
Nome | Morada
Ao alterar a morada na tabela 2, na tabela 1 tenho sempre os dados actualizados na tabela 2...
Ainda não percebi muito bem como isto dos relacionamentos funciona!!!
é que depois, vou querer aceder ao dados usando ADO e instruções SQL para extrair informação...
Mas não sei como posso, por exemplo, acedendo àtabela 1, importar também a informação da morada, ou até filtrar dados da tabela 1 consoante a morada (da tabela 2)...
Que confusão, alguém me ajude por favor...
Estou a criar pela primeira vez uma base de dados em access usando tabelas relacionadas umas com as outras...ou seja.. (exemplo):
Tabela 1
Nome | Idade
Tabela 2
Nome | Morada
Ao alterar a morada na tabela 2, na tabela 1 tenho sempre os dados actualizados na tabela 2...
Ainda não percebi muito bem como isto dos relacionamentos funciona!!!
é que depois, vou querer aceder ao dados usando ADO e instruções SQL para extrair informação...
Mas não sei como posso, por exemplo, acedendo àtabela 1, importar também a informação da morada, ou até filtrar dados da tabela 1 consoante a morada (da tabela 2)...
Que confusão, alguém me ajude por favor...
Amigo o seu SQL seria algo assim:
Traduzindo:
Selecione o nome e idade da tabela 1 e a morada da tabela 2 onde o nome da tabela 1 é igual ao nome da tabela 2 ordenado pelo nome.
Dessa forma todos os três dados distintos serão exibidos. Abraços.
Select Tabela1.Nome, Tabela1.Idade, Tabela2.Morada From Tabela1, Tabela2 where Tabela1.Nome = Tabela2.Nome Order By Tabela1.Nome
Traduzindo:
Selecione o nome e idade da tabela 1 e a morada da tabela 2 onde o nome da tabela 1 é igual ao nome da tabela 2 ordenado pelo nome.
Dessa forma todos os três dados distintos serão exibidos. Abraços.
Como você diz ser a primeira vez, vou tentar ser bem detalhista e explicativo.
Estas tabelas só terão sentido se o a pessoa do campo Nome tiver várias moradas, caso contrário seria uma única tabela e ficaria assim:
________________________________
Codigo | Nome | Idade | Morada|
é importante esse campo código(Pode ser Texto ou numerico) para definir uma chave primária. Isto é, Campo ÃÅ¡nico, que não aceita dois códigos iguais.Não use campo autonumeração.
Nesta Tabela ainda pode se anexar dados que não se repete na informação da Pessoa do campo nome como endereço, documentos em geral(Rg,Cpf, etc), Data Nascimento etc.
Agora imagine que esta tabela seja de um controle de Aluguel e temos que registrar os pagamentos feitos mensalmente. Esses dados não poderão está nesta tabela pois são repetidos. Cada mês tem um novo registro para o mesmo inquilino.Seria esta tabela
__________________________________
CodInquilono| DataPgto | VltPago | e outros campos sobre o pagamento como vencimento, desconto, etc.
O campo CodInquilino terá que ser do mesmo tipo e do mesmo tamanho do código da tabela anterior.Esses campos deverão ter um relacionamento do tipo Mestre-Detalhes ou Um-Para-Muitos (Uma pessoa pode ter varios pagamentos). PARA DEFINIR A CHAVE PRIMÃÂÂRIA CLICK COM O BUTÃO DIREITO EM CIMA DO CAMPO E EM CHAVE PRIMÃÂÂRIA OU SELECIONE O CAMPO E CLICK EM UMA CHAVE QUE APARECE NA BARRA DE FERRAMENTAS. ISSO EM MODO DESIGN(QUANDO ESTIVER CRIANDO OU ALTERANDO A TABELA. NOTE QUE NESTE CASO, SÓ A TABELA 1 TERàCHAVE PRIMÃÂÂRIA.
Para relacionar essas tabelas, click com o butão direito fora das tabelas no access e click em relacionamentos. agora na tela que se abre, se não aparecer nada, click butão direito novamente e mostrar Tabelas. Click duplo nas tabelas que serão relacionadas. NEste Caso, clicamos no campo codigo da tabela 1 (Se definiu a chave primária deverá está em negrito) e arraste até o campo CodInquilino da outra tabela. Agora marque impor Integridade referencial e Propagar Atualização e Propagar esclusão.Pronto, o relacionamento está criado.
AGORA QUANDO ABRIR A TABELA 1 VAI VÃÅ UM SINAL DE (+). CLICK NO SINAL E VERàA TABELA 2.
Essa é a estrutura que sua tabela relacionada deve ter.Aqui, não podemos gravar um pagamento que não esteja relacionado a um inquilino. Para pagar deve existir um inquilino e excluindo um inquilino da tabela exclui automaticamente seus pagamentos (Isso é a integridade referencial).
Agora saimos da guia TABELAS E VAMOS PARA GUIA CONSULTAS.Uma consulta não armazena dados, mas exibe (view) dados de tabelas relacionadas. Nas consultas, pegamos os campos que nos interessa das tabelas.
Cria uma consulta com o assistente com todos os campos, menos o campo CodInquilino da tabela 2. Esta consulta poderá ser usada no vb da mesma forma que você usa as tabelas.
[txt-color=#ff0000]DICA IMPORTANTE: Para aprender toda funcionalidade do Access, estude pela ajuda do programa. Procure por Tabelas para saber sobre tabelas, Consultas para saber sobre elas etc. Em modo design, aperte F1 para ajuda especÃÂÂfica sobre a ação que está fazendo.[/txt-color]
Estas tabelas só terão sentido se o a pessoa do campo Nome tiver várias moradas, caso contrário seria uma única tabela e ficaria assim:
________________________________
Codigo | Nome | Idade | Morada|
é importante esse campo código(Pode ser Texto ou numerico) para definir uma chave primária. Isto é, Campo ÃÅ¡nico, que não aceita dois códigos iguais.Não use campo autonumeração.
Nesta Tabela ainda pode se anexar dados que não se repete na informação da Pessoa do campo nome como endereço, documentos em geral(Rg,Cpf, etc), Data Nascimento etc.
Agora imagine que esta tabela seja de um controle de Aluguel e temos que registrar os pagamentos feitos mensalmente. Esses dados não poderão está nesta tabela pois são repetidos. Cada mês tem um novo registro para o mesmo inquilino.Seria esta tabela
__________________________________
CodInquilono| DataPgto | VltPago | e outros campos sobre o pagamento como vencimento, desconto, etc.
O campo CodInquilino terá que ser do mesmo tipo e do mesmo tamanho do código da tabela anterior.Esses campos deverão ter um relacionamento do tipo Mestre-Detalhes ou Um-Para-Muitos (Uma pessoa pode ter varios pagamentos). PARA DEFINIR A CHAVE PRIMÃÂÂRIA CLICK COM O BUTÃO DIREITO EM CIMA DO CAMPO E EM CHAVE PRIMÃÂÂRIA OU SELECIONE O CAMPO E CLICK EM UMA CHAVE QUE APARECE NA BARRA DE FERRAMENTAS. ISSO EM MODO DESIGN(QUANDO ESTIVER CRIANDO OU ALTERANDO A TABELA. NOTE QUE NESTE CASO, SÓ A TABELA 1 TERàCHAVE PRIMÃÂÂRIA.
Para relacionar essas tabelas, click com o butão direito fora das tabelas no access e click em relacionamentos. agora na tela que se abre, se não aparecer nada, click butão direito novamente e mostrar Tabelas. Click duplo nas tabelas que serão relacionadas. NEste Caso, clicamos no campo codigo da tabela 1 (Se definiu a chave primária deverá está em negrito) e arraste até o campo CodInquilino da outra tabela. Agora marque impor Integridade referencial e Propagar Atualização e Propagar esclusão.Pronto, o relacionamento está criado.
AGORA QUANDO ABRIR A TABELA 1 VAI VÃÅ UM SINAL DE (+). CLICK NO SINAL E VERàA TABELA 2.
Essa é a estrutura que sua tabela relacionada deve ter.Aqui, não podemos gravar um pagamento que não esteja relacionado a um inquilino. Para pagar deve existir um inquilino e excluindo um inquilino da tabela exclui automaticamente seus pagamentos (Isso é a integridade referencial).
Agora saimos da guia TABELAS E VAMOS PARA GUIA CONSULTAS.Uma consulta não armazena dados, mas exibe (view) dados de tabelas relacionadas. Nas consultas, pegamos os campos que nos interessa das tabelas.
Cria uma consulta com o assistente com todos os campos, menos o campo CodInquilino da tabela 2. Esta consulta poderá ser usada no vb da mesma forma que você usa as tabelas.
[txt-color=#ff0000]DICA IMPORTANTE: Para aprender toda funcionalidade do Access, estude pela ajuda do programa. Procure por Tabelas para saber sobre tabelas, Consultas para saber sobre elas etc. Em modo design, aperte F1 para ajuda especÃÂÂfica sobre a ação que está fazendo.[/txt-color]
Ouxe, MJAC, que eu saiba na instrução SELECT teria que usar o JOIN entre as tabelas já que elas são relacionadas... tem certeza que essa forma que tu fez dá certo?
"SELECT Tabela1.*, Tabela2.* INNER JOIN Tabela2 ON Tabela2.Nome = Tabela1.Nome"
Que eu saiba ficaria desse jeito a SQL... mass, bele
[]'s
"SELECT Tabela1.*, Tabela2.* INNER JOIN Tabela2 ON Tabela2.Nome = Tabela1.Nome"
Que eu saiba ficaria desse jeito a SQL... mass, bele
[]'s
Amigo CRANIOGRANDE tenho certeza absoluta, anexei um exemplo do que escrevi, isso serve tanto para DAO quanto ADO e o banco de dados também não importa funciona em access, mysql, sqlserver, oracle, etc...
Faz o download e testa. Abraços.
Faz o download e testa. Abraços.
Tópico encerrado , respostas não são mais permitidas