CONSULTA ACCESS

ALANTB 06/06/2016 10:31:51
#463100
Olá, estou tentando gerar um relatório do DataReport (vb6/access formato 2003) através da criação de uma consulta entre várias tabelas. O que ocorre é o seguinte: o sistema faz insert, update, delete, recuperação de dados, para listview por exemplo, normalmente, mas, quando tento criar a Consulta para exibir dados no relatório, ao executa-la não retorna nada. As tabelas estão relacionadas.
Qual o cuidado que devo ter ao criar consultas?
Deve ser feito algum tipo de relacionamento específico entre tabelas?

Alan
JCM0867 06/06/2016 12:01:59
#463106
Muito raro usar relacionamentos, muita mão de obra a manutenção
Faço tudo dentro do Select com wheres, Joins, Groups, etc.
tente fazer sem usar os relacionamentos para testar
ACCIOLLY 06/06/2016 22:16:05
#463124
Resposta escolhida
Citação:

:
Muito raro usar relacionamentos, muita mão de obra a manutenção
Faço tudo dentro do Select com wheres, Joins, Groups, etc.
tente fazer sem usar os relacionamentos para testar



Bom, cada um faz do jeito que achar melhor, no meu ponto de vista não tem jeito errado de se desenvolver um produto individualmente. Quer use OOP ou POG, se o resultado final alcançou as expectativas solicitadas quem sou eu pra julgar né!
Mas pra mim os relacionamentos servem pra dar mais consistência a informação. Imagine você desenvolvendo uma agenda telefonica com duas tabelas, uma pessoa e outra número. E que a relação seja de um para muitos, ou seja uma pessoa para muitos números. O que aconteceria se você tentasse apagar uma pessoa cuja mesma tenha dez números cadastrados? Erro ou simplesmente [Ô]dar pau[Ô] na gíria popular! rsrsrsrs. E a pessoa não seria excluida da tabela. Agora se esse relacionamento não existisse a pessoa seria apagada normalmente deixando dez registros na tabela números [Ô]órfãos[Ô]. Nesse caso você teria um banco completamente inconsistente.
Portanto a mão de obra no meu ponto de vista seria muito menor se eu criasse um banco bem relacionado na terceira forma normal, e na codificação trabalhar de forma correta com [Ô]Exceptions[Ô].

ALANTB, quando trabalhamos com bancos de dados relacionais, para evitarmos muita codificação no desenvolvimento da aplicação, criamos Views no access chamamos isso de consulta. Tente criar uma consulta com os dados que deseja recuperar no próprio access, depois crie seu relatório com essa consulta apenas e não com todas as tabelas.
Fica a Dica.
Té Mais
ALANTB 07/06/2016 09:36:25
#463149
ACCIOLLY, a consulta que estou tentando criar é dentro do Access. Antes de fazer o SQL no vb para carregar os dados, estou montando a consulta e executando para ver se vai dar certo. Veja bem: se faço a consulta com a tabela principal de cadastro (tbCrianca) ela executa e exibe dados; se adiciono mais algumas tabelas: tbEndereco, tbCidade, tbBairro, também funciona. O problema ocorre quando tento inserir dados de uma tabela chamada tbEscola, onde puxa o nome da escola. Quando executo com essa ultima tabela a consulta não carrega registro nenhum, mas se eu refazer sem essa tabela funciona....Estranho é que a estrutura dessa tabela não é tão diferente das outras. Tem apenas código, descrição, codendereco, telefone e só. Vou me virando por aqui!!!!

ALAN
XLEGENDARY 07/06/2016 09:59:55
#463151
veja se no seu inner join está comparando a PK e a FK corretamente, ou ainda, verifique se as tabelas contém o mesmo dado que quer verificar

ALANTB 07/06/2016 11:55:23
#463154
O SQL Nº1 (copiei da Consulta do Access) é sem a tbEscola e carrega dados ao executar dentro do ACCESS. Já o SQL Nº2 botei pra exibir a tabela tbEscola em modo DESIGN da consulta; adicionei o campo [Ô]desCola[Ô], que exibe o nome da Escola e ao executar não carrega nada...

SQL Nº1:
SELECT tbCrianca.*, tbUF.siglaUF, tbCidade.desCidade, tbBairro.descBairro, tbEndereco.descEnd, tbPai.NomePai, tbMae.NomeMae
FROM tbUF INNER JOIN (tbEndereco INNER JOIN (tbCidade INNER JOIN (((tbBairro INNER JOIN tbCrianca ON tbBairro.codBairro = tbCrianca.codBairro) INNER JOIN tbMae ON (tbMae.codMae = tbCrianca.codMae) AND (tbBairro.codBairro = tbMae.codBairro)) INNER JOIN tbPai ON (tbPai.codPai = tbCrianca.codPai) AND (tbBairro.codBairro = tbPai.codBairro)) ON (tbCidade.codCidade = tbPai.codCidade) AND (tbCidade.codCidade = tbMae.codCidade) AND (tbCidade.codCidade = tbCrianca.codCidade) AND (tbCidade.codCidade = tbBairro.codCidade)) ON (tbEndereco.codEnd = tbPai.codEnd) AND (tbEndereco.codEnd = tbMae.codEnd) AND (tbEndereco.codEnd = tbCrianca.codEnd)) ON (tbUF.codUF = tbCrianca.codUF) AND (tbUF.codUF = tbCidade.codUF);

SQL Nº2

SELECT tbCrianca.*, tbUF.siglaUF, tbCidade.desCidade, tbBairro.descBairro, tbEndereco.descEnd, tbPai.NomePai, tbMae.NomeMae, tbEscola.desCola
FROM (tbUF INNER JOIN (tbEndereco INNER JOIN (tbCidade INNER JOIN (((tbBairro INNER JOIN tbCrianca ON tbBairro.codBairro = tbCrianca.codBairro) INNER JOIN tbMae ON (tbMae.codMae = tbCrianca.codMae) AND (tbBairro.codBairro = tbMae.codBairro)) INNER JOIN tbPai ON (tbPai.codPai = tbCrianca.codPai) AND (tbBairro.codBairro = tbPai.codBairro)) ON (tbCidade.codCidade = tbPai.codCidade) AND (tbCidade.codCidade = tbMae.codCidade) AND (tbCidade.codCidade = tbCrianca.codCidade) AND (tbCidade.codCidade = tbBairro.codCidade)) ON (tbEndereco.codEnd = tbPai.codEnd) AND (tbEndereco.codEnd = tbMae.codEnd) AND (tbEndereco.codEnd = tbCrianca.codEnd)) ON (tbUF.codUF = tbCrianca.codUF) AND (tbUF.codUF = tbCidade.codUF)) INNER JOIN tbEscola ON (tbEscola.codEscola = tbCrianca.codEscola) AND (tbEndereco.codEnd = tbEscola.codEnd) AND (tbCidade.codCidade = tbEscola.codCidade) AND (tbBairro.codBairro = tbEscola.codBairro);

ACCIOLLY 07/06/2016 16:13:48
#463166
Coloca seu banco em anexo pra gente dar uma olhada
ALANTB 08/06/2016 07:41:24
#463177
Segue copia zip do bd..
ALANTB 09/06/2016 13:17:50
#463251
Pessoal, tive pesquisando sobre bancos de dados e vi que existe algo chamado [Ô]redundância[Ô] e que pode ocasionar inconscistência nos dados. Olhando o layout de relacionamento das tabelas do banco que coloquei em anexo na mensagem anterior, pude perceber que o relacionamento feito a partir das tabelas tbCrianca, tbEndereco e tbEscola, tbBairro podem formar uma espécie de circulo. Sinceramente não sei como resolver. Já fiz este tipo de relacionamento em outros banco e funcionou. Mas neste algo passou despercebido. Portanto, gostaria que os colegas me auxilem nessa...Valeu!!!

ALAN
LLAIA 09/06/2016 14:54:27
#463255
Problema na modelagem cara. Vc pode simplificar isso criando uma tabela com os atributos em comum para mãe, pai e criança.
ACCIOLLY 10/06/2016 14:38:31
#463329
Muito bem. Você precisa localizar em qual tabela está a chave estrangeira. Não consigo abrir o arquivo porque uso línux. Mas supondo que na tabela criança tem a chave estrangeira da escola, você pode criar um sql mais fácil de manipular. Ex

Citação:

SELECT tbEscola.nomeEscola, (SELECT endereco FROM tbEndereco WHERE tbEndereco = tbEscola.id_Endereco) AS endereco, (SELECT (SELECT tbBairro.nomeBairro FROM tbBairro WHERE tbBairro = tbEndereco.idBairro) FROM tbEscola WHERE tbEscola.idEndereco = tbEndereco.idEndereco) AS bairro FROM tbEscola



Esse SQL acima é só pra você ter uma idéia de como seria pra selecionar apenas o nome da escola, o endereco e o bairro. Dependendo da sua consulta pode digitar meio livro! srsrsrs. Mas funciona.
Tópico encerrado , respostas não são mais permitidas