PDA

Visualizza versione completa : Manipolare i Campi in Access


pippo2008
19-05-2008, 16.13.01
Ragazzi mi trovo a diventare pazzo su una cosa forse semplice, ma non so se con una query in access si possa fare. Allora ho due tabelle relazionate fra loro uno a molti ( anagrafica(uno) con esami (molti) ). Su queste due tabelle (anagrafica e esami) eseguo una query di selezione. Attraverso questa query di selezione costruisco delle etichette adesive. Il probleme è banale, quando devo creare un'etichetta ed il paziente preso dall'anagrafica ha fatto un solo esame, questo mi propone una sola etichetta e mi va bene, ma quando invece il paziente sempre preso dall'anagrafica ha associato in quella giornata non solo un esame ma molti altri, per ogni esame mi ripropone un'etichetta, mettendomi sempre la stessa anagrafica poichè il paziente è sempre quello, ma poi su ogni etichetta giustamente l'esame diverso. Io vorrei una sola etichetta con in un solo campo tutti gli esami, al massimo separati da una virgola. Mi chiedevo se attraverso uan quesry,
potevo pescare una sola volta i dati del paziente dall'anagrafica e tutti gli esami fatti (ovviamente in cui l'ID esame è sempre quello della stessa giornata) caricarli in un unico campo, campo che poi pesco per l'etichetta.
Come diavolo devo fare, sto impazzendo.

miciomao
20-05-2008, 10.38.05
allega qui una copia del db zippato con pochi esempi (10 rec per esempio) vediamo che si può fare

pippo2008
20-05-2008, 11.47.16
Ok ti allego i due file, tieni presente che essendo in rete ho dovuto dividere il db. Il client ha le query e i report ed è collegato al master che detiene i dati nelle tabelle. Penso tu debba lavorare sul file client.mdb. Non ho messo ancora il tasto nella maschera che mi lancia il report EtichettaEsame, che puoi lanciare a mano. Questo è agganciato alla relativa query che mi tira fuori il paziente in base all'ID esame che gli passero da Form!NomeMaschera!NomeCampo. Il mio probelma che se un paziente ha fatto un solo esame mi va bene una sola etichetta, ma se il paziente es. ID 2 ha fatto due esami, perchè mi deve tirare fupori due etichette ? Allora pensavo ad una etichetta con l'anagrafica ed una con gli esami fatti, oppure in un solo campo tutti gli esami (es. campo TipoEsame nel report in questione).
Grazie per l'aiuto che mi dai.

miciomao
20-05-2008, 11.54.30
mi serve qualche esempio, solo con il frontend non mi aiuti
ti mando in pvt la mia mail così mi invii il back end con qualche record

pippo2008
20-05-2008, 14.09.01
mi serve qualche esempio, solo con il frontend non mi aiuti
ti mando in pvt la mia mail così mi invii il back end con qualche record

Ma nel file che ti ho zippato ci sono degli esempi, funziona tutot, prova ad aprirlo e a loanciare il report delle etichette.

miciomao
20-05-2008, 15.40.02
le tabelle sono collegate ad un'altro db che non ho
come faccio ad usarlo ?

pippo2008
21-05-2008, 11.54.21
a me funziona comunque, pur avendo eliminato il master, ti mando anche il master cui si collega, però mi devi dare una e-mail perchè anche zippandolo non raggiungo le dimensioni tali da poterlo inviare con il forum

miciomao
21-05-2008, 11.58.42
ti avevo inviato un pvt con la mia mail cerca qui nei tuoi mex privati
cmq fai una copia, elimina un po di dati (a me serviranno una 30ina di record) e inviamelo zippato

ciao

pippo2008
21-05-2008, 13.38.48
grazie ancora, ti ho inviato il tutto per e-mail

miciomao
21-05-2008, 15.54.43
OK credo di aver risolto

spiego brevemente cosa abbiamo fatto

Abbiamo unito in una query valori diversi di uno stesso campo

ci siamo aiutati con un po di codice che ne ns caso è stato il seguente aggiunto in un modulo del db


Public Function UnisciValori(MioCampo As Long) As String
Dim rst As DAO.Recordset
Dim strSQL As String
UnisciValori = ""
strSQL = "SELECT * FROM EtichetteEsameMultiplo WHERE IDEsame =" & MioCampo & ";"
Set rst = CurrentDb().OpenRecordset(strSQL)
rst.MoveFirst
Do Until rst.EOF
UnisciValori = UnisciValori & " - " & rst!TipoEsame & Chr(13) + Chr(10)
rst.MoveNext
Loop
UnisciValori = Left(UnisciValori, Len(UnisciValori) - 2)
Set rst = Nothing
End Function



Ho ricostruito una sotto query in questo modo


SELECT DISTINCT EtichetteEsameMultiplo.IDEsame, EtichetteEsameMultiplo.DataEsame, UnisciValori([IDEsame]) AS TipoEsame
FROM EtichetteEsameMultiplo
WHERE (((EtichetteEsameMultiplo.IDEsame)=[Forms]![Esame]!));



[I]Attenzione la funzione fa riferimento alla libreria Microsoft DAO quindi, se si usa una versione di Access successiva ad Access 97, aggiungere al database i riferimenti a Microsoft DAO 3.6 Object Library


ciao
Alex