Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

ErikaG

[Resolvido] Relacionamento entre tabelas

Mensagens Recomendadas

ErikaG

Boa tarde

Tenho um relatório que é gerado a partir do critério de pesquisa de um formulário. O relatório é baseado numa consulta envolvendo dados de 3 tabelas (Assuntos, PSituacao, Observ) – as tabelas estão relacionadas usando o tipo de associação “Incluir TODOS os registos de 'Assuntos' e apenas os registos de 'PSituacao' em que os campos associados são iguais” (o mesmo para o relacionamento entre Psituacao e tabela das observações). Além disso, na consulta, no campo “OU” referente ao texto da tabela “PSituacao” coloquei É nulo. Para este relatório só preciso de um campo (texto) das tabelas “Psituacao” e “Observ” e vários da tabela “Assuntos”.

A questão é: como faço para aparecer os registos que tenham assunto mas não tenham “Ponto de situação”, ou tenham “Ponto de situação” mas não tenham “Observações”? – o que sai no relatório são os registos que têm as 3 coisas simultaneamente.

Mt. obrg.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ErikaG

Olá,

Este é o SQL da consulta que dá origem ao relatório:

SELECT Assuntos.ID, PSituacao.CodAssunto, PSituacao.Texto AS PSituacao_Texto, Observ.IdPSitu, Observ.Texto AS Observ_Texto, Assuntos.Descr, Assuntos.TipoAss, TiposAssunto.DescrTipo, Assuntos.Estado, Assuntos.CodProc, Assuntos.InicCons, Assuntos.FimCons, Assuntos.PosConsPub, Assuntos.Org, Assuntos.OrgReuniao, Assuntos.Comunic, Assuntos.Codigo, Assuntos.DtReg, Assuntos.DtMod, Assuntos.Util, Assuntos.Serv

FROM TiposAssunto INNER JOIN ((Assuntos INNER JOIN PSituacao ON Assuntos.[iD] = PSituacao.[CodAssunto]) INNER JOIN Observ ON PSituacao.[iD] = Observ.[idPSitu]) ON TiposAssunto.IdTipo = Assuntos.TipoAss

WHERE (((PSituacao.Texto) Like "*"+[forms]![FConsultaAssuntos].[txt_PontoSitu] & "*") AND ((Observ.Texto) Like "*"+[forms]![FConsultaAssuntos].[txt_Observ] & "*") AND ((Assuntos.Descr) Like "*"+[forms]![FConsultaAssuntos].[txt_Descr] & "*") AND ((Assuntos.TipoAss) Like [forms]![FConsultaAssuntos].[txt_tipo] & "*") AND ((Assuntos.Estado) Like [forms]![FConsultaAssuntos].[txt_Estado] & "*") AND ((Assuntos.CodProc) Like [forms]![FConsultaAssuntos].[txt_CodProcesso] & "*") AND ((Assuntos.Comunic) Like "*"+[forms]![FConsultaAssuntos].[txt_comunic] & "*") AND ((Assuntos.DtReg) Between [forms]![FConsultaAssuntos].[txt_DtRegInicial] And [forms]![FConsultaAssuntos].[txt_DtRegFinal]) AND ((Assuntos.Serv) Like [forms]![FConsultaAssuntos].[txt_Serv] & "*")) OR (((PSituacao.Texto) Is Null) AND ((Observ.Texto) Is Null) AND ((Assuntos.Descr) Like "*"+[forms]![FConsultaAssuntos].[txt_Descr] & "*") AND ((Assuntos.TipoAss) Like [forms]![FConsultaAssuntos].[txt_tipo] & "*") AND ((Assuntos.Estado) Like [forms]![FConsultaAssuntos].[txt_Estado] & "*") AND ((Assuntos.CodProc) Like [forms]![FConsultaAssuntos].[txt_CodProcesso] & "*") AND ((Assuntos.Comunic) Like "*"+[forms]![FConsultaAssuntos].[txt_comunic] & "*") AND ((Assuntos.DtReg) Between [forms]![FConsultaAssuntos].[txt_DtRegInicial] And [forms]![FConsultaAssuntos].[txt_DtRegFinal]) AND ((Assuntos.Serv) Like [forms]![FConsultaAssuntos].[txt_Serv] & "*") AND (([forms]![FConsultaAssuntos].[txt_DtCPInicial]) Is Null)) OR (((Assuntos.Descr) Like "*"+[forms]![FConsultaAssuntos].[txt_Descr] & "*") AND ((Assuntos.TipoAss) Like [forms]![FConsultaAssuntos].[txt_tipo] & "*") AND ((Assuntos.Estado) Like [forms]![FConsultaAssuntos].[txt_Estado] & "*") AND ((Assuntos.CodProc) Like [forms]![FConsultaAssuntos].[txt_CodProcesso] & "*") AND ((Assuntos.Comunic) Like "*"+[forms]![FConsultaAssuntos].[txt_comunic] & "*") AND ((Assuntos.DtReg) Between [forms]![FConsultaAssuntos].[txt_DtRegInicial] And [forms]![FConsultaAssuntos].[txt_DtRegFinal]) AND ((Assuntos.Serv) Like [forms]![FConsultaAssuntos].[txt_Serv] & "*") AND (([forms]![FConsultaAssuntos].[txt_DtCPFinal]) Is Null)) OR (((Assuntos.Descr) Like "*"+[forms]![FConsultaAssuntos].[txt_Descr] & "*") AND ((Assuntos.TipoAss) Like [forms]![FConsultaAssuntos].[txt_tipo] & "*") AND ((Assuntos.Estado) Like [forms]![FConsultaAssuntos].[txt_Estado] & "*") AND ((Assuntos.CodProc) Like [forms]![FConsultaAssuntos].[txt_CodProcesso] & "*") AND ((Assuntos.Comunic) Like "*"+[forms]![FConsultaAssuntos].[txt_comunic] & "*") AND ((Assuntos.DtReg) Between [forms]![FConsultaAssuntos].[txt_DtRegInicial] And [forms]![FConsultaAssuntos].[txt_DtRegFinal]) AND ((Assuntos.Serv) Like [forms]![FConsultaAssuntos].[txt_Serv] & "*") AND (([forms]![FConsultaAssuntos].[txt_DtCPInicial]) Is Null) AND (([forms]![FConsultaAssuntos].[txt_DtCPFinal]) Is Null)) OR (((Assuntos.Descr) Like "*"+[forms]![FConsultaAssuntos].[txt_Descr] & "*") AND ((Assuntos.TipoAss) Like [forms]![FConsultaAssuntos].[txt_tipo] & "*") AND ((Assuntos.Estado) Like [forms]![FConsultaAssuntos].[txt_Estado] & "*") AND ((Assuntos.CodProc) Like [forms]![FConsultaAssuntos].[txt_CodProcesso] & "*") AND ((Assuntos.Comunic) Like "*"+[forms]![FConsultaAssuntos].[txt_comunic] & "*") AND ((Assuntos.DtReg) Between [forms]![FConsultaAssuntos].[txt_DtRegInicial] And [forms]![FConsultaAssuntos].[txt_DtRegFinal]) AND ((Assuntos.Serv) Like [forms]![FConsultaAssuntos].[txt_Serv] & "*") AND (([forms]![FConsultaAssuntos].[txt_DtCPInicial]) Is Null)) OR (((Assuntos.Descr) Like "*"+[forms]![FConsultaAssuntos].[txt_Descr] & "*") AND ((Assuntos.TipoAss) Like [forms]![FConsultaAssuntos].[txt_tipo] & "*") AND ((Assuntos.Estado) Like [forms]![FConsultaAssuntos].[txt_Estado] & "*") AND ((Assuntos.CodProc) Like [forms]![FConsultaAssuntos].[txt_CodProcesso] & "*") AND ((Assuntos.Comunic) Like "*"+[forms]![FConsultaAssuntos].[txt_comunic] & "*") AND ((Assuntos.DtReg) Between [forms]![FConsultaAssuntos].[txt_DtRegInicial] And [forms]![FConsultaAssuntos].[txt_DtRegFinal]) AND ((Assuntos.Serv) Like [forms]![FConsultaAssuntos].[txt_Serv] & "*") AND (([forms]![FConsultaAssuntos].[txt_DtCPFinal]) Is Null)) OR (((Assuntos.Descr) Like "*"+[forms]![FConsultaAssuntos].[txt_Descr] & "*") AND ((Assuntos.TipoAss) Like [forms]![FConsultaAssuntos].[txt_tipo] & "*") AND ((Assuntos.Estado) Like [forms]![FConsultaAssuntos].[txt_Estado] & "*") AND ((Assuntos.CodProc) Like [forms]![FConsultaAssuntos].[txt_CodProcesso] & "*") AND ((Assuntos.Comunic) Like "*"+[forms]![FConsultaAssuntos].[txt_comunic] & "*") AND ((Assuntos.DtReg) Between [forms]![FConsultaAssuntos].[txt_DtRegInicial] And [forms]![FConsultaAssuntos].[txt_DtRegFinal]) AND ((Assuntos.Serv) Like [forms]![FConsultaAssuntos].[txt_Serv] & "*") AND (([forms]![FConsultaAssuntos].[txt_DtCPInicial]) Is Null) AND (([forms]![FConsultaAssuntos].[txt_DtCPFinal]) Is Null)) OR (((Assuntos.Descr) Like "*"+[forms]![FConsultaAssuntos].[txt_Descr] & "*") AND ((Assuntos.TipoAss) Like [forms]![FConsultaAssuntos].[txt_tipo] & "*") AND ((Assuntos.Estado) Like [forms]![FConsultaAssuntos].[txt_Estado] & "*") AND ((Assuntos.CodProc) Like [forms]![FConsultaAssuntos].[txt_CodProcesso] & "*") AND ((Assuntos.Comunic) Like "*"+[forms]![FConsultaAssuntos].[txt_comunic] & "*") AND ((Assuntos.Serv) Like [forms]![FConsultaAssuntos].[txt_Serv] & "*") AND (([forms]![FConsultaAssuntos].[txt_DtRegInicial]) Is Null));

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carlosAl

nao consigo ver a situaçao que queres resolver, talvez porque haja muitos campos.

porque nao tentas fazer uma primeira consulta entre a tabela assuntos e a tabela Psituaçao (consulta1), e depois uma segunda consulta entre a consulta1 e a tabela Observ

acho que assim vai ser mais facil.

uma segunda opçao seria criares os criterios com codigo VBA que passaria os parametros do formulario para a consulta.

se quizeres passar o form, e as tabelas com dados, posso tentar descobrir, mas teria de ser em access 2003

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ErikaG

Vou tentar simplificar a minha dúvida:

havendo uma consulta baseada na tabela A (com vários campos) e na tabela B (com um campo, o qual está associado à tabela A), qual o código a ser colocado no critério do campo da tabela B para que, se houver dados estes aparecerem no relatório, se estiver vazio aparece espaço em branco e permite que os dados da tabela A apareçam.

Sem nada no critério, se houver um registo na tabela A que não tenha correspondência na tabela B, esse registo da tabela A não consta no relatório.

Espero ter clarificado um pouco a minha dúvida

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ErikaG

Boa tarde

Entretanto descobri a solução: no SQL da consulta alterei o relacionamento entre as tabelas, mudei de INNER JOIN para LEFT JOIN e assim aparecem todos os dados da primeira tabela (conforme critério de pesquisa), tendo ou não correspondência na tabela seguinte (são 3 tabelas relacionadas).

Muito obrigada

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.