Una famiglia di sistemi di gestione per database relazionali di Microsoft progettati per semplificare l'uso.
ciao Lino,
non ho controllato la faccenda dei dati non corrispondenti ma ho preso le singole queries ed unite in una sola con il predicato che segue :
SELECT tblPersonale.Matricola, tblPersonale.Cognome, tblPersonale.Nome, tblPersonale.CF, tblPersonale.DataDiNascita, tblPersonale.DataDiAssunzione, tblPersonale.Licenziato_Dimissionario
FROM tblPersonale LEFT JOIN qryELFOPEAltoRischio ON tblPersonale.Matricola = qryELFOPEAltoRischio.Matricola
WHERE (((tblPersonale.Licenziato_Dimissionario)=False) AND ((tblPersonale.CorsiObbligatori.Value)=12) AND ((qryELFOPEAltoRischio.Matricola) Is Null))
union all
SELECT tblPersonale.Matricola, tblPersonale.Cognome, tblPersonale.Nome, tblPersonale.CF, tblPersonale.DataDiNascita, tblPersonale.DataDiAssunzione, tblPersonale.Licenziato_Dimissionario
FROM tblPersonale LEFT JOIN qryELFOPEAltoRischioCT ON tblPersonale.Matricola = qryELFOPEAltoRischioCT.Matricola
WHERE (((tblPersonale.Licenziato_Dimissionario)=False) AND ((tblPersonale.CorsiObbligatori.Value)=2) AND ((qryELFOPEAltoRischioCT.Matricola) Is Null));
union all
SELECT tblPersonale.Matricola, tblPersonale.Cognome, tblPersonale.Nome, tblPersonale.CF, tblPersonale.DataDiNascita, tblPersonale.DataDiAssunzione, tblPersonale.Licenziato_Dimissionario
FROM tblPersonale LEFT JOIN qryELFOPEAntincendio ON tblPersonale.Matricola = qryELFOPEAntincendio.Matricola
WHERE (((tblPersonale.Licenziato_Dimissionario)=False) AND ((tblPersonale.CorsiObbligatori.Value)=7) AND ((qryELFOPEAntincendio.Matricola) Is Null))
l'unica differenza è che ho eliminato dai campi estratti nelle singole queries il MVF ( campo multivalore ) nominato corsiObbligatori.
I campi MVF sono da evitare come la peste, spesso mi sono ripetuto in questo forum in tal senso e a maggior ragione lo sono perché by design sono si possono utilizzare nelle queries di unione.
Ci sono una miriadi di altre motivazione per evitare di utilizzarli, e prediligere la classica relazione 1--->M, cosa che ti consiglio di attuare, normalizzando la tabella prima di incappare in altri problemi...
Per riprodurre il messaggio di errore, copia incolla questo predicato è completo e comprensivo del campo incriminato :
SELECT tblPersonale.Matricola, tblPersonale.Cognome, tblPersonale.Nome, tblPersonale.CF, tblPersonale.DataDiNascita, tblPersonale.CorsiObbligatori, tblPersonale.DataDiAssunzione, tblPersonale.Licenziato_Dimissionario
FROM tblPersonale LEFT JOIN qryELFOPEAltoRischio ON tblPersonale.Matricola = qryELFOPEAltoRischio.Matricola
WHERE (((tblPersonale.Licenziato_Dimissionario)=False) AND ((tblPersonale.CorsiObbligatori.Value)=12) AND ((qryELFOPEAltoRischio.Matricola) Is Null));
union all
SELECT tblPersonale.Matricola, tblPersonale.Cognome, tblPersonale.Nome, tblPersonale.CF, tblPersonale.DataDiNascita, tblPersonale.DataDiAssunzione, tblPersonale.CorsiObbligatori, tblPersonale.Licenziato_Dimissionario
FROM tblPersonale LEFT JOIN qryELFOPEAltoRischioCT ON tblPersonale.Matricola = qryELFOPEAltoRischioCT.Matricola
WHERE (((tblPersonale.Licenziato_Dimissionario)=False) AND ((tblPersonale.CorsiObbligatori.Value)=2) AND ((qryELFOPEAltoRischioCT.Matricola) Is Null))
union all
SELECT tblPersonale.Matricola, tblPersonale.Cognome, tblPersonale.Nome, tblPersonale.CF, tblPersonale.DataDiNascita, tblPersonale.DataDiAssunzione, tblPersonale.CorsiObbligatori, tblPersonale.Licenziato_Dimissionario
FROM tblPersonale LEFT JOIN qryELFOPEAntincendio ON tblPersonale.Matricola = qryELFOPEAntincendio.Matricola
WHERE (((tblPersonale.Licenziato_Dimissionario)=False) AND ((tblPersonale.CorsiObbligatori.Value)=7) AND ((qryELFOPEAntincendio.Matricola) Is Null));
Facci sapere.
Ciao, Sandro.