Newsgroup: it.comp.appl.access
Titolo: Query pazienti per diagnosi

Sto costuendo un piccolo dBase per archiviare i pazienti e poi sapere 
quali di essi hanno ricevuto una determinata diagnosi.
Ho costruito una tabella pazienti con tre campi diagnosi (diagnosi1, 
diagnosi2 e d3, per i pazienti che hanno più di una patologia) ed 1 
tabella Diagnosi in cui inserire i nomi delle possibili patologie e 
1Query pazienti  query con i campi anagrafici contenuti nella tabella 
pazienti e vcampo Diagnosi dalla tabella Diagnosi. 
Questo è ciò che appare in visualizzazione SQL
SELECT Diagnosi.Diagnosi, Pazienti.Cognome, Pazienti.Nome, Pazienti.
[Data di Nascita], Pazienti.[Altra diagnosi], Pazienti.Cassetta, 
Pazienti.Status
FROM Pazienti LEFT JOIN Diagnosi ON (Pazienti.[Diagnosi 3] = 
Diagnosi.Diagnosi) AND (Pazienti.[Diagnosi 2] = Diagnosi.Diagnosi) AND 
(Pazienti.[Diagnosi 1] = Diagnosi.Diagnosi);
Ma la query non funziona perchè il campo Diagnosi rimane vuoto. Lo scopo 
di questa query era di visualizzare un elenco di diagnosi sulla sinistra 
e vedere sulla destra i pazienti che la presentano, indipendentemente 
dal campo Diagnosi# in cui è stata immessa. Cosa importante è che sia 
visibile il nome della diagnosi (quindi il contenuto di 
Diagnosi.Diagnosi e non il numero del contatore!)
Potete aiutarmi?
Altro Problema: non funziona il TROVA: mi dice "Comando trova non 
disponibile...  il tipo di comando cui si riferisce l'azione non sitova 
non è selezionat o non è nella visualizzazione attiva.. oppure il 
database è stato creato con una versione precedente e non convertito", 
ma l'ultima ipotesi non è possibile: è tutto Access2000. 
Se serve il file .mdb ve lo posso mandare via e-mail
Grazie a Tutti

39812 ha scritto:

Secondo me hai sbagliato l'impostazione del database che non rispetta le
regole di normalizzazione.
Dovresti invece costruire le seguenti tabelle:
- tabPazienti (IDPaziente, Cognome, Nome, Data di nascita, Cassetta,
Status): contiene solo i dati dei pazienti.
- tabDiagnosi (IDDiagnosi, DescrizioneDiagnosi): contiene l'elenco delle
diagnosi con le descrizioni.
- tabPazientiDiagnosi (ID, IDPaziente, IDDiagnosi): contiene la
realzione N a M tra paziente e diagnosi; in altri termini (se non
conosci la teoria dei database relazionali) ogni record di queta tabella
mette in relazione un paziente con una delle sue diagnosi. Per cui se un
paziente ha una sola diagnosi avrà un solo record in questa tabella, se
ne ha 2 avrà 2 records, ecc.
Quando crei quest'ultima tabella (Nuova tabella/Visualizzazione
struttura) imposta i campi IDPaziente e IDDiagnosi usando
l'autocomposizione ricerca così Access crea le relazioni in automatico.
Ora ti fai una query (nome: qryPazientiDiagnosi) con la seguente
sintassi:
SELECT tabPazientiDiagnosi.IDDiagnosi, tabPazienti.*
FROM tabPazienti INNER JOIN tabPazientiDiagnosi ON
tabPazienti.IDPaziente = tabPazientiDiagnosi.IDPaziente;
Quindi ti fai una maschera di nome sottomPazienti basata su
qryPazientiDiagnosi di tipo tabulare e contenente i seguenti campi:
Cognome, Nome, Data di nascita, Cassetta, Status (usa
l'autocomposizione).
Infine ti fai una maschera di nome PazientiPerDiagnosi non associata a
nessuna tabella (usa la visualizzazione struttura invece
dell'autocomposizione maschera) e ci metti una combobox che prende i
dati da tabDiagnosi e una sottomaschera che prende i dati da
sottomPazienti.
Una volta terminata l'autocomposizione della sottomaschera, la
selezioni, vai nella finestra Proprietà - scheda Dati e metti IDDiagnosi
nei due campi "Collega campi secondari" e "Collega campi master".
Et voilà! Hai una combo box con l'elenco delle diagnosi e una
sottomaschera con i dati dei pazienti, ogni volta che selezioni una
diagnosi, lui (Access) ti dà tutti i pazienti che hanno quella diagnosi.
Se non sbaglio è ciò che volevi.
Ciao
Tonio

 ha scritto nel messaggio
news:3CAA24EB...@inwind.it...

Anch'io sono dello stesso parere
Claudio

 ---
Parole sante
Antonio