
{"id":445,"date":"2018-03-26T12:42:10","date_gmt":"2018-03-26T15:42:10","guid":{"rendered":"http:\/\/eliezerladeira.com.br\/blog\/?p=445"},"modified":"2018-08-31T22:06:57","modified_gmt":"2018-09-01T01:06:57","slug":"construa-consultas-com-duas-tabelas-usando-o-access","status":"publish","type":"post","link":"https:\/\/eliezerladeira.com.br\/blog\/construa-consultas-com-duas-tabelas-usando-o-access\/","title":{"rendered":"Construa consultas com duas tabelas usando o Access"},"content":{"rendered":"<p>[ratings]<\/p>\n<p><span class=\"entry-excerpt\">Admita a seguinte situa\u00e7\u00e3o: Voc\u00ea tem um banco de dados Access no qual existem duas tabelas, uma com a lista de todos os seus arquivos de m\u00fasica MP3 e a outra com uma lista de letras das can\u00e7\u00f5es. <\/span><\/p>\n<p>Seu problema \u00e9 o seguinte: como gerar uma consulta que d\u00ea como resultado somente as m\u00fasicas e letras comuns \u00e0s duas tabelas? Em outras palavras: como obter uma lista das m\u00fasicas em MP3 cujas letras tamb\u00e9m existam no banco de dados?<\/p>\n<p>A solu\u00e7\u00e3o pode ser encontrada no Access apenas a um toque do mouse, sem nenhuma necessidade de programa\u00e7\u00e3o. Trata-se de construir uma consulta simples com o objetivo de identificar em duas tabelas de dados quais registros cont\u00eam as mesmas informa\u00e7\u00f5es em dois campos indicados: um em cada tabela. Essa solu\u00e7\u00e3o pode ser aplicada em muitas outras situa\u00e7\u00f5es.<\/p>\n<p>Em termos bem simples, o problema pode ser representado por um diagrama que mostra dois conjuntos de dados, um para cada tabela envolvida. O xis do problema \u00e9 identificar a por\u00e7\u00e3o comum \u00e0s duas tabelas \u2014 correspondente \u00e0 \u00e1rea em que os dois conjuntos se sobrep\u00f5em. Agora que j\u00e1 caracterizamos o problema, vamos \u00e0 solu\u00e7\u00e3o, passo a passo.<\/p>\n<p><strong>1. <\/strong>Para acompanhar o exemplo, crie uma tabela com os campos Int\u00e9rprete e T\u00edtulo, ambos do tipo Texto. Salve-a com o nome tabMP3. Essa tabela, claro, vai conter a lista das m\u00fasicas.<\/p>\n<p><strong>2. <\/strong>Crie outra tabela com os campos Int\u00e9rprete, T\u00edtulo e Letra. Este \u00faltimo deve ser do tipo Memorando para abrigar a letra da m\u00fasica. O campo do tipo Texto tem capacidade m\u00e1xima para somente 255 caracteres. A letra n\u00e3o caberia nele. Por sua vez, o campo de memorando suporta at\u00e9 65.536 caracteres. Naturalmente, as duas tabelas, aqui, est\u00e3o reduzidas aos campos que nos interessam para a solu\u00e7\u00e3o do problema. Voc\u00ea pode incluir outros dados que achar convenientes: autor da m\u00fasica, autor da letra, ano de grava\u00e7\u00e3o etc. D\u00ea \u00e0 segunda tabela o nome tabLetras. Tamb\u00e9m n\u00e3o haveria nenhum problema se o campo T\u00edtulo, que \u00e9 o ponto comum entre as tabelas, tivesse nome diferente nas duas. No entanto, para facilitar a compreens\u00e3o, \u00e9 mais c\u00f4modo usar o mesmo nome.<\/p>\n<p><strong>3. <\/strong>Para ter condi\u00e7\u00f5es de executar o teste, alimente as duas tabelas com alguns registros, tendo o cuidado de incluir m\u00fasicas comuns aos dois conjuntos de dados.<\/p>\n<p><strong>4. <\/strong>Na janela Banco de Dados, clique na orelha Consulta. D\u00ea um duplo clique no comando Criar Consulta no Modo Design para projetar um objeto desse tipo a partir do zero. O Access abre duas janelas: Mostrar Tabela e Consulta1. Selecione (mouse mais a tecla Ctrl) o nome das duas tabelas \u2014 tabMP3 e tabLetras \u2014 na primeira janela e clique no bot\u00e3o Adicionar.<\/p>\n<p><strong>5. <\/strong>Dois quadros com os campos das tabelas aparecem na \u00e1rea superior de Consulta1. Se as duas tabelas tiverem chaves prim\u00e1rias chamadas C\u00f3digo (nome-padr\u00e3o), o Access vai mostrar uma linha negra ligando esses dois campos. Clique nessa linha e acione a tecla Del para apag\u00e1-la. Isso porque o valor C\u00f3digo numa tabela n\u00e3o tem nenhum parentesco com seu hom\u00f4nimo na outra.<\/p>\n<p><strong>6. <\/strong>Agora o pulo-do-gato. Com o mouse, clique no campo T\u00edtulo de uma tabela e arraste-o para o campo de mesmo nome na outra tabela. Uma linha passa a ligar os dois campos indicando que a consulta deve procurar neles informa\u00e7\u00f5es iguais. Dica: o procedimento tamb\u00e9m funciona quando o nome dos dois campos n\u00e3o \u00e9 o mesmo.<\/p>\n<p><strong>7. <\/strong>No quadro tabLetras, arraste para a linha Campo, embaixo, os campos T\u00edtulo e Int\u00e9rprete. Opcionalmente, indique que o campo Int\u00e9rprete seja apresentado em ordem alfab\u00e9tica. Para isso, na linha Classifica\u00e7\u00e3o, escolha Crescente.<\/p>\n<p><strong>8. <\/strong>Salve a consulta (com um nome amig\u00e1vel que ajude a identific\u00e1-la depois \u2014 exemplo: cnsMP3comLetras1) e execute-a. Veja que ela exibe exatamente os t\u00edtulos comuns \u00e0s duas tabelas. A solu\u00e7\u00e3o descrita acima aparentemente resolve o problema apresentado no in\u00edcio deste tutorial.<\/p>\n<p><strong>9. <\/strong>Fa\u00e7a, agora, uma experi\u00eancia importante. Inclua na tabela MP3 uma m\u00fasica cujo t\u00edtulo j\u00e1 existe em tabLetras, mas registre a\u00ed outro int\u00e9rprete. Escolha, de prop\u00f3sito, uma can\u00e7\u00e3o que n\u00e3o faz parte do n\u00facleo comum entre as duas tabelas. Execute novamente a consulta. O que ocorre? A nova m\u00fasica n\u00e3o aparece. Isso porque a consulta est\u00e1 sendo feita com base na tabela tabLetras.<\/p>\n<p><strong>10. <\/strong>Agora, na janela Banco de Dados, selecione a consulta cnsMP3comLetras1 e copie-a. Cole-a no mesmo lugar com o nome de cnsMP3comLetras2. Selecione essa nova consulta e clique no bot\u00e3o Design. Na janela da consulta, linha Tabela, escolha, nos dois campos, tabMP3 em vez de tabLetras. Salve a consulta. Em outras palavras, estamos fazendo a mesma consulta, s\u00f3 que agora a outra tabela \u00e9 nosso ponto de partida. Execute essa consulta modificada. O que ocorre? A m\u00fasica aparece, mas com outro int\u00e9rprete. Para comparar, abra as duas consultas lado a lado.<\/p>\n<p><strong>11. <\/strong>Sempre que se trabalha com bancos de dados \u00e9 preciso pensar em coisas desse tipo. O problema \u00e9 que duas can\u00e7\u00f5es com o mesmo t\u00edtulo e int\u00e9rpretes diferentes podem ser a mesma m\u00fasica, ou n\u00e3o. Assim, se voc\u00ea quiser garantir a identidade total de t\u00edtulo e de int\u00e9rprete, precisa construir uma consulta ligeiramente diferente.<\/p>\n<p><strong>12. <\/strong>Experimente mais. Copie a primeira consulta e cole-a como cnsMP3comLetras11. Abra-a em modo Design e arraste o campo Int\u00e9rprete de uma tabela para o mesmo campo na outra. Com isso, estamos dizendo que tanto o t\u00edtulo como o int\u00e9rprete devem coincidir nas duas tabelas.<\/p>\n<p><strong>13. <\/strong>Agora, copie a tabela cnsMP3comLetras2 e cole-a como cnsMP3comLetras22. Arraste o campo Int\u00e9rprete da mesma forma.<\/p>\n<p><strong>14. <\/strong>Execute, lado a lado, as consultas 11 e 22. Embora se baseiem em tabelas diferentes elas d\u00e3o os mesm\u00edssimos resultados. A diferen\u00e7a, claro, est\u00e1 na busca de dupla identidade: de t\u00edtulo e de int\u00e9rprete. Embora se trate de consulta simples, um pequeno detalhe pode alterar consideravelmente os resultados.<\/p>\n<p><strong>15. <\/strong>O Access, nos bastidores, trabalha com a linguagem SQL. Trata-se de uma linguagem declarativa, espec\u00edfica para a manipula\u00e7\u00e3o de bancos de dados. Quando voc\u00ea monta uma pesquisa na janela gr\u00e1fica de consulta, o programa vai criando internamente uma declara\u00e7\u00e3o SQL. Para v\u00ea-la, abra uma consulta e em seguida d\u00ea o comando Exibir\/Modo SQL.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ratings] Admita a seguinte situa\u00e7\u00e3o: Voc\u00ea tem um banco de dados Access no qual existem duas tabelas, uma com a<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_layout":"default_layout","_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"ngg_post_thumbnail":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[15],"tags":[106,83,85],"class_list":["post-445","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-access","tag-banco-de-dados","tag-microsoft"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":2875,"url":"https:\/\/eliezerladeira.com.br\/blog\/construa-consultas-com-duas-tabelas-usando-o-access-2\/","url_meta":{"origin":445,"position":0},"title":"Construa consultas com duas tabelas usando o Access","author":"admin","date":"","format":false,"excerpt":"Admita a seguinte situa\u00e7\u00e3o: Voc\u00ea tem um banco de dados Access no qual existem duas tabelas, uma com a lista de todos os seus arquivos de m\u00fasica MP3 e a outra com uma lista de letras das can\u00e7\u00f5es. Seu problema \u00e9 o seguinte: como gerar uma consulta que d\u00ea como\u2026","rel":"","context":"Em &quot;Software&quot;","block_context":{"text":"Software","link":"https:\/\/eliezerladeira.com.br\/blog\/category\/tecnologia\/software\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3604,"url":"https:\/\/eliezerladeira.com.br\/blog\/banco-de-dados-introducao\/","url_meta":{"origin":445,"position":1},"title":"Banco de Dados:\u00a0Introdu\u00e7\u00e3o","author":"admin","date":"","format":false,"excerpt":"Podemos entender por\u00a0banco de dados\u00a0qualquer sistema que re\u00fana e mantenha organizada uma s\u00e9rie de informa\u00e7\u00f5es relacionadas a um determinado assunto em uma determinada ordem.","rel":"","context":"Em &quot;Programa\u00e7\u00e3o&quot;","block_context":{"text":"Programa\u00e7\u00e3o","link":"https:\/\/eliezerladeira.com.br\/blog\/category\/tecnologia\/programacao\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3609,"url":"https:\/\/eliezerladeira.com.br\/blog\/data-manager-banco-de-dados-tabelas-indices-relacionamentos-e-chaves-primarias\/","url_meta":{"origin":445,"position":2},"title":"Data Manager \u2013 Banco de Dados, Tabelas, \u00cdndices, Relacionamentos e Chaves\u00a0Prim\u00e1rias","author":"admin","date":"","format":false,"excerpt":"Criando um Banco de Dados Para criar um banco de dados com o Data Manager, execute o Data Manager e selecione a op\u00e7\u00e3o\u00a0File\/New Database\u00a0no menu principal. Um di\u00e1logo no padr\u00e3o\u00a0Salvar Como\u00a0ser\u00e1 aberto solicitando o nome do arquivo. Informe o nome do banco de dados que deseja criar, por exemplo Controle.\u2026","rel":"","context":"Em &quot;Programa\u00e7\u00e3o&quot;","block_context":{"text":"Programa\u00e7\u00e3o","link":"https:\/\/eliezerladeira.com.br\/blog\/category\/tecnologia\/programacao\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/netsysoft.wordpress.com\/wp-content\/uploads\/2010\/03\/datam9.gif?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":3602,"url":"https:\/\/eliezerladeira.com.br\/blog\/o-poder-da-sql\/","url_meta":{"origin":445,"position":3},"title":"O poder da\u00a0SQL","author":"admin","date":"","format":false,"excerpt":"A linguaguem SQL (Structured Query Language) \u00e9 uma linguagem de alto n\u00edvel para manipula\u00e7\u00e3o de dados dentro do modelo relacional. Seu objetivo \u00e9 fornecer uma interface de alto n\u00edvel ao usu\u00e1rio. \u00c9 uma linguagem n\u00e3o procedural e n\u00e3o cabe ao usu\u00e1rio definir como o gerenciador de banco de dados executar\u00e1\u2026","rel":"","context":"Em &quot;Programa\u00e7\u00e3o&quot;","block_context":{"text":"Programa\u00e7\u00e3o","link":"https:\/\/eliezerladeira.com.br\/blog\/category\/tecnologia\/programacao\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3594,"url":"https:\/\/eliezerladeira.com.br\/blog\/ado-localizando-informacoes\/","url_meta":{"origin":445,"position":4},"title":"ADO \u2013 Localizando\u00a0informa\u00e7\u00f5es","author":"admin","date":"","format":false,"excerpt":"Quando falamos a n\u00edvel de dados (campos e registros), estamos tratando com o objeto\u00a0Recordset. Vamos mostrar como encontrar dados espec\u00edficos em um\u00a0Recordset ADO. Lembrando que um objeto\u00a0Recordset\u00a0possui muitas fun\u00e7\u00f5es \u00fateis. Entre elas podemos citar as mais usadas:\u00a0Bookmark, Find, Seek, Filter. Usando Bookmarks (marcadores) Um bookmark de um recordset \u00e9 como\u2026","rel":"","context":"Em &quot;Programa\u00e7\u00e3o&quot;","block_context":{"text":"Programa\u00e7\u00e3o","link":"https:\/\/eliezerladeira.com.br\/blog\/category\/tecnologia\/programacao\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/netsysoft.wordpress.com\/wp-content\/uploads\/2010\/02\/ado_sek3.gif?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2882,"url":"https:\/\/eliezerladeira.com.br\/blog\/o-excel-funciona-como-um-bd-2\/","url_meta":{"origin":445,"position":5},"title":"O Excel funciona como um\u00a0BD","author":"admin","date":"","format":false,"excerpt":"Como usar planilhas do Excel 97\/2000\/XP como bancos de dados? Se voc\u00ea precisa manter uma lista de contatos pessoais, ou mesmo o cadastro de sua cole\u00e7\u00e3o de CDs ou DVDs, use os recursos de banco de dados do Excel. Crie uma tabela, com os campos de dados indicados na primeira\u2026","rel":"","context":"Em &quot;Software&quot;","block_context":{"text":"Software","link":"https:\/\/eliezerladeira.com.br\/blog\/category\/tecnologia\/software\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/eliezerladeira.com.br\/blog\/wp-json\/wp\/v2\/posts\/445","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eliezerladeira.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eliezerladeira.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eliezerladeira.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eliezerladeira.com.br\/blog\/wp-json\/wp\/v2\/comments?post=445"}],"version-history":[{"count":1,"href":"https:\/\/eliezerladeira.com.br\/blog\/wp-json\/wp\/v2\/posts\/445\/revisions"}],"predecessor-version":[{"id":446,"href":"https:\/\/eliezerladeira.com.br\/blog\/wp-json\/wp\/v2\/posts\/445\/revisions\/446"}],"wp:attachment":[{"href":"https:\/\/eliezerladeira.com.br\/blog\/wp-json\/wp\/v2\/media?parent=445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eliezerladeira.com.br\/blog\/wp-json\/wp\/v2\/categories?post=445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eliezerladeira.com.br\/blog\/wp-json\/wp\/v2\/tags?post=445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}