Newsgroup: it.comp.appl.access
Titolo: relazioni tra tabelle e query di selezione

In un dbase Access97 ho una tabella "pazienti" correlata con una
relazione uno a molti tramite campo "idpz" con una tabella "cartella".
Quest'ultima č ha sua volta correlata sempre con relazione uno a molti
tramite uno stesso campo "idcrt" con una tabella "esami" e con una
tabella "terapia".
Graficamente una cosa piů o meno del genere
Pazienti idpz--->idpz Cartella idcrt--->terapia
                                	       |------>esami
Mi serve creare query  che mi diano dati di tutte e quattro le
tabelle, ma regolarmente ottengo errori logici, probabilmente perchč
imposto male la query: ottengo sempre il famoso prodotto cartesiano
(un miliardo di record a botta!!).
La domanda č: c'č un difetto di impostazione nella struttura delle
tabelle (per esempio non posso avere un solo campo "idcrt" dal lato
uno (tabella "cartelle") per avere relazione sia con "terapia" che con
"esami"), oppure il problema č solo che non sono capace di formulare
la query?  
Non sono riuscito a trovare esempi di piů tabelle lato molti correlate
con un unico campo dal lato uno e mi viene il dubbio che l'unco che
possa aver fatto una furbata del genere (che fa casino) sia io me
medesimo.
Grazie Arturo

arturo ha scritto:




La struttura logica sembra ben fatta, se ottieni un prodotto cartesiano
puň essere solo perchč una o piů delle tabelle che usi nella query non
sono legate in relazione alle altre.
Le relazioni nella query le devi impostare come nello schemetto che hai
fatto:
Pazienti - Cartella
Cartella - Terapie
Cartella - Esami
Se ancora non viene manda l'SQL della query (dalla struttura: Visualizza -
SQL) che lo correggiamo.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Ci ho provato e riprovato senza molto successo. 
Ecco l'SQL della query .
SELECT 
PAZIENTI.primocontatto, PAZIENTI.cognome, PAZIENTI.nome,
PAZIENTI.nato_a, PAZIENTI.nato_il, PAZIENTI.residente, PAZIENTI.via,
PAZIENTI.provincia, PAZIENTI.prefisso_tel, PAZIENTI.telefono,
PAZIENTI.sesso, 
CARTELLACLINICA.idric, CARTELLACLINICA.storiaclinica,
CARTELLACLINICA.motivoricovero, CARTELLACLINICA.esami_lab,
CARTELLACLINICA.altro, CARTELLACLINICA.diagnosi,
CARTELLACLINICA.terapia, CARTELLACLINICA.ricovero,
CARTELLACLINICA.dimissione, CARTELLACLINICA.esito,
CARTELLACLINICA.tipo, CARTELLACLINICA.medici,
CARTELLACLINICA.nosologico,
TERAPIA.Farmaco, TERAPIA.Dose, 
ESSTRUMENTALI.esame, ESSTRUMENTALI.data, ESSTRUMENTALI.tipo 
FROM ((PAZIENTI INNER JOIN CARTELLACLINICA ON 
PAZIENTI.ID
 =
CARTELLACLINICA.idpaz) INNER JOIN ESSTRUMENTALI ON
CARTELLACLINICA.idric = ESSTRUMENTALI.idric) INNER JOIN TERAPIA ON
CARTELLACLINICA.idric = TERAPIA.idric
WHERE (((CARTELLACLINICA.idric)=[Forms]![CARTELLACLINICA]![idric]));

 WHERE (((CARTELLACLINICA.idric)=[Forms]![CARTELLACLINICA]![idric]));
Il prodotto cartesiano lo fa tra le tabelle Terapie ed Esami che non sono
in relazione tra di loro.
Dovresti usare due query distinte, una che estrae le terapie su
Pazienti-Cartelle-Terapie ed una per gli esami su Pazienti-Cartelle-Esami.
