Discussione:
Unisci Valori dello stesso campo: problema con tabella Molti a Molti
(troppo vecchio per rispondere)
Alessandra
2006-03-25 15:25:38 UTC
Permalink
Ho sperimentato la funzione in oggetto (pubblicata nella sezione query 2.30
del
sito comune) per unire valori di record diversi nello stesso campo. E'
esattamente ciò che vorrei fare da giorni ed è stata illuminante. Ma quando
la applico al mio caso, uso come tabella di riferimento una tabella Molti a
Molti,
l'esecuzione della query mi da messaggio di errore. Nella tabella di
collegamento sono registrati in due campi rispettivamente gli ID dei nomi di
Musicisti e dei diversi strumenti suonati che provengono dalle loro tabelle
madre. I campi sono quindi numerici.
Mi potete aiutare?
Vorrei che in un campo di fianco al nome visualizzato del musicista
comparissero in fila tutti gli strumenti suonati (es.: J.S. Bach |
clavicembalo, organo, violino, viola)
Grazie Alessandra
Four wheeler
2006-03-25 21:54:28 UTC
Permalink
Post by Alessandra
Ho sperimentato la funzione in oggetto (pubblicata nella sezione query 2.30
del
sito comune) per unire valori di record diversi nello stesso campo. E'
esattamente ciò che vorrei fare da giorni ed è stata illuminante. Ma quando
la applico al mio caso, uso come tabella di riferimento una tabella Molti a
Molti,
l'esecuzione della query mi da messaggio di errore. Nella tabella di
collegamento sono registrati in due campi rispettivamente gli ID dei nomi di
Musicisti e dei diversi strumenti suonati che provengono dalle loro tabelle
madre. I campi sono quindi numerici.
Mi potete aiutare?
Vorrei che in un campo di fianco al nome visualizzato del musicista
comparissero in fila tutti gli strumenti suonati (es.: J.S. Bach |
clavicembalo, organo, violino, viola)
Grazie Alessandra
Dovresti specificare quale messaggio di errore ti restituisce la query.
Hai verificato che ci sia il rferiemento alla libreria Microsoft DAO 3.6
Object Library

Saluti
Alessandra
2006-03-25 23:37:27 UTC
Permalink
Un saluto anche a te.
Ho verificato: il riferimento alla libreria Microsoft DAO 3.6 Object Library
c'è (nella finestra dei riferimenti è spuntato e non mi dice MANCA...)
infatti il codice che avevo copiato e sperimentato restituisce proprio il
risultato cercato, però l'ho applicato per esercizio ad un'unica tabella
dove i dati nascevano lì, non ad una tabella di correlazione.
Questo è il messaggio di errore:

Errore di Run time '3061'
parametri insufficienti. Previsto 1.

Accedendo al Debug mi segnala in giallo questa riga:

Set rst = CurrentDb().OpenRecordset(strSQL)

Grazie per l'attenzione, a presto
Alessandra
Post by Four wheeler
Post by Alessandra
Ho sperimentato la funzione in oggetto (pubblicata nella sezione query 2.30
del
sito comune) per unire valori di record diversi nello stesso campo. E'
esattamente ciò che vorrei fare da giorni ed è stata illuminante. Ma quando
la applico al mio caso, uso come tabella di riferimento una tabella Molti a
Molti,
l'esecuzione della query mi da messaggio di errore. Nella tabella di
collegamento sono registrati in due campi rispettivamente gli ID dei nomi di
Musicisti e dei diversi strumenti suonati che provengono dalle loro tabelle
madre. I campi sono quindi numerici.
Mi potete aiutare?
Vorrei che in un campo di fianco al nome visualizzato del musicista
comparissero in fila tutti gli strumenti suonati (es.: J.S. Bach |
clavicembalo, organo, violino, viola)
Grazie Alessandra
Dovresti specificare quale messaggio di errore ti restituisce la query.
Hai verificato che ci sia il rferiemento alla libreria Microsoft DAO 3.6
Object Library
Saluti
Four wheeler
2006-03-26 14:05:39 UTC
Permalink
On Sat, 25 Mar 2006 23:37:27 GMT, "Alessandra"
Post by Alessandra
Un saluto anche a te.
Ho verificato: il riferimento alla libreria Microsoft DAO 3.6 Object Library
c'è (nella finestra dei riferimenti è spuntato e non mi dice MANCA...)
infatti il codice che avevo copiato e sperimentato restituisce proprio il
risultato cercato, però l'ho applicato per esercizio ad un'unica tabella
dove i dati nascevano lì, non ad una tabella di correlazione.
Errore di Run time '3061'
parametri insufficienti. Previsto 1.
Set rst = CurrentDb().OpenRecordset(strSQL)
Controlla la stringa SQL della Funzione Unisci Valori: potresti
esserti dimenticata di modificare uno dei nomi dei campi utilizzati
nella funzione, che sono specifici dell'esempio e vanno quindi
cambiati.
Ad esempio nella prova che ho fatto la stringa SQL è la seguente:

strSQL = "SELECT * FROM StrumMusicisti WHERE IdMusi =" & MioCampo & "
ORDER BY IDMusi;"

Nel mio esempio StrumMusicisti è una query che visulizza i valori da
tre tabelle una con i Musicisti, una con gli strumenti e quella che
contiene le chiavi dei musicisti e degli strumenti per la relazione
molti a molti:

SELECT Musicisti.IDMusi, Musicisti.Nome, Musicisti.Nazione,
STruMusi.IDStru, Strumenti.Strumento
FROM Strumenti INNER JOIN (Musicisti INNER JOIN STruMusi ON
Musicisti.IDMusi = STruMusi.IDMusi) ON Strumenti.IDStru =
STruMusi.IDStru
ORDER BY Musicisti.IDMusi;

Ciao
Alessandra
2006-03-27 12:00:46 UTC
Permalink
Infatti!
Buongiorno e grazie intanto.
...avevo dimenticato di modificare uno dei nomi dei campi nella funzione che
ho copiato, mi era sfuggito un piccolo ID. Inoltre la mia query era comunque
sbagliata, ora l'ho rifatta come mi hai suggerito, creando le tabelle come
nel tuo esempio per non confondermi.
Ora però ti chiedo ancora un favore, visto che sto pasticciando con
esperimenti "casalinghi":
nel nuovo campo della query che richiama con un'espressione la funzione
UnisciValori (l'ho
chiamato StrumentiSuonati: UnisciValori([IDMusi]) appaiono solo i numeri di
codice ID dello strumento. Tu dirai: " è ovvio"; e mi immagino che debba
essere così. E' possibile in qualche modo vedere invece il nome degli
strumenti?
Ecco come ora grossolanamente ho risolto (non ridere):
Nella tabella StruMusi (con le due chiavi) ho creato un nuovo campo di
testo; dalla maschera di immissione, con l'evento dopo aggiornamento del
campo IDStru, questo nuovo campo, che nella maschera è invisibile, si
riempe col nome dello strumento selezionato. Ora ho potuto includere questo
campo nella query e usare quello come riferimento nella funzione
UnisciValori. Prima non riuscivo a riferirmi al campo della tabella madre
con i nomi degli strumenti perchè diceva che non trovava l'insieme richiesto
nel set di record ( se ho capito bene), ecco il perchè di questo nuovo campo
"fasullo".
Forse esiste un qualche modo più raffinato e istruttivo.

Ti ringrazio molto e ti auguro buona giornata.
Alessandra
Post by Four wheeler
On Sat, 25 Mar 2006 23:37:27 GMT, "Alessandra"
Post by Alessandra
Un saluto anche a te.
Ho verificato: il riferimento alla libreria Microsoft DAO 3.6 Object Library
c'è (nella finestra dei riferimenti è spuntato e non mi dice MANCA...)
infatti il codice che avevo copiato e sperimentato restituisce proprio il
risultato cercato, però l'ho applicato per esercizio ad un'unica tabella
dove i dati nascevano lì, non ad una tabella di correlazione.
Errore di Run time '3061'
parametri insufficienti. Previsto 1.
Set rst = CurrentDb().OpenRecordset(strSQL)
Controlla la stringa SQL della Funzione Unisci Valori: potresti
esserti dimenticata di modificare uno dei nomi dei campi utilizzati
nella funzione, che sono specifici dell'esempio e vanno quindi
cambiati.
strSQL = "SELECT * FROM StrumMusicisti WHERE IdMusi =" & MioCampo & "
ORDER BY IDMusi;"
Nel mio esempio StrumMusicisti è una query che visulizza i valori da
tre tabelle una con i Musicisti, una con gli strumenti e quella che
contiene le chiavi dei musicisti e degli strumenti per la relazione
SELECT Musicisti.IDMusi, Musicisti.Nome, Musicisti.Nazione,
STruMusi.IDStru, Strumenti.Strumento
FROM Strumenti INNER JOIN (Musicisti INNER JOIN STruMusi ON
Musicisti.IDMusi = STruMusi.IDMusi) ON Strumenti.IDStru =
STruMusi.IDStru
ORDER BY Musicisti.IDMusi;
Ciao
Four wheeler
2006-03-27 22:48:23 UTC
Permalink
On Mon, 27 Mar 2006 12:00:46 GMT, "Alessandra"
<***@libero.it> wrote:

[CUT]
Post by Alessandra
nel nuovo campo della query che richiama con un'espressione la funzione
UnisciValori (l'ho
chiamato StrumentiSuonati: UnisciValori([IDMusi]) appaiono solo i numeri di
codice ID dello strumento. Tu dirai: " è ovvio"; e mi immagino che debba
essere così. E' possibile in qualche modo vedere invece il nome degli
strumenti?
Nel mio esempio la tabella Strumenti ha due Campi : IDStru chiave
primaria, numerico e Strumento, Testo :

IDStru Strumento
1 Clavicembalo
2 Organo
3 Pianoforte
4 Violino

nella Tabella Musicisti IdMusi è la chiave primaria

IDMusi Nome Nazione
1 Bach Germania
2 Mozart Austria
3 Salieri Italia

La tabella StruMusi che realizza la relazione molti a molti è
semplicissima:

IDStru IDMusi
1 1
2 1
3 1
2 2
3 3
con entrambe i campi utilizati come chiave primaria in modo da non
associare due volte lo stesso strumento ad un musicista

Il risultato è

Nome Strumenti
Bach Pianoforte Organo Clavicembalo
Mozart Organo
Salieri Pianoforte

ottenuto con la query seguente (credo sia la tua Strumenti suonati):

SELECT DISTINCT StrumMusicisti.Nome, UnisciValori([IdMusi]) AS
Strumenti
FROM StrumMusicisti;
Saggio è colui che sa di non sapere: ergo non mi permetto di ridere
mai di nessuno, potrei essere facilmete ripagato allo stesso modo ( la
statistica ...insegna, come si può vedere su questo stesso NG!).
Post by Alessandra
Nella tabella StruMusi (con le due chiavi) ho creato un nuovo campo di
testo; dalla maschera di immissione, con l'evento dopo aggiornamento del
campo IDStru, questo nuovo campo, che nella maschera è invisibile,
[CUT]

Se ho capito bene, mi sembra troppo complicato e inutile. Bisogna
normalizzare, la descrizione dello strumento è già presente nella
tabella degli strumenti (e nella query presente nella funzione:
ricontrolla quali campi hai utilizzato!) e da lì la si deve prendere
anche nella maschera dove associ lo strumento al musicista. Con una
combo a 2 colonne di cui quella dell'id di larghezza zero visualizzi
lo Strumento (ossia la sua descrizione) e memorizzi l'IdStru nel
campo. La funzione UnisciValori (implementata bene) fa il resto
Post by Alessandra
Ti ringrazio molto e ti auguro buona giornata.
Alessandra
Buona notte a te, per un paio di giorni non ci sarò: devo riformattare
tutto! :-(
PS: non credo che Mozart suonasse l'organo ma la prova l'ho fatta
mettendo dati un po' a caso! ;-)
Alessandra
2006-03-28 21:17:51 UTC
Permalink
Benone!
Ora è andato tutto a buon fine, in un battibaleno... dopo che finalmente ho
capito che dovevo costruire DUE QUERY (!) : una si basa sul famoso Recordset
dell'altra. L'avevi scritto così chiaro....come nei gialli: l'assassino è lì
sotto gli occhi e tu non lo vedi. Meglio così, a furia di leggermi quel
codice l'ho quasi imparato a memoria. Ho persino aggiunto con
spregiudicatezza una "," per separare i nomi degli strumenti. Lo so che così
una virgola a "vuoto" rimane a seguire l'ultimo strumento nelcampo, ma non
sono troppo schizzinosa.
Allora mille grazie! e per quanto riguarda Mozart non hai commesso nessun
errore: suonava magnificamente l'organo.
Ti trascrivo qualche riga da una sua lettera, così, per ringraziarti e
sollevarti dalle fatiche del "dopo formattazione".
Buon lavoro, buona giornata e alla prossima gradita lezione!
Alessandra

(ottobre 1777, a proposito di una sua improvvisazione nel Convento di
Augsburg)
"[...] poi portarono un piccolo clavicordo, io preludiai, e suonai una
sonata e le variazioni di Fisher, poi gli altri bisbigliarono qualcosa
nell'orecchio al sig.Decano, che m'avrebbe dovuto sentire suonare in maniera
organistica; gli dissi di darmi un tema, egli non voleva, ma uno dei
religiosi me ne dette uno.[...] la fuga andava ex sol minore: incominciai in
maggiore, qualcosa del tutto scherzoso, poi infine di nuovo il tema ma a
ritroso; infine mi venne in mente se non potevo utilizzare la creatura
scherzosa insieme al tema della fuga? non chiesi a lungo ma lo feci subito
[...] il sig. Decano era completamente fuori di sè e diceva: "Se non
l'avessi sentito non ci avrei creduto. Me lo aveva detto il mio prete che in
tutta la sua vita non aveva mai sentito nessuno suonare sì abilmente
l'organo [...]"
Post by Four wheeler
On Mon, 27 Mar 2006 12:00:46 GMT, "Alessandra"
[CUT]
Il risultato è
Nome Strumenti
Bach Pianoforte Organo Clavicembalo
Mozart Organo
Salieri Pianoforte
SELECT DISTINCT StrumMusicisti.Nome, UnisciValori([IdMusi]) AS
Strumenti
FROM StrumMusicisti;
Saggio è colui che sa di non sapere: ergo non mi permetto di ridere
mai di nessuno, potrei essere facilmete ripagato allo stesso modo ( la
statistica ...insegna, come si può vedere su questo stesso NG!).
Post by Alessandra
Nella tabella StruMusi (con le due chiavi) ho creato un nuovo campo di
testo; dalla maschera di immissione, con l'evento dopo aggiornamento del
campo IDStru, questo nuovo campo, che nella maschera è invisibile,
[CUT]
Se ho capito bene, mi sembra troppo complicato e inutile. Bisogna
normalizzare, la descrizione dello strumento è già presente nella
ricontrolla quali campi hai utilizzato!) e da lì la si deve prendere
anche nella maschera dove associ lo strumento al musicista. Con una
combo a 2 colonne di cui quella dell'id di larghezza zero visualizzi
lo Strumento (ossia la sua descrizione) e memorizzi l'IdStru nel
campo. La funzione UnisciValori (implementata bene) fa il resto
Post by Alessandra
Ti ringrazio molto e ti auguro buona giornata.
Alessandra
Buona notte a te, per un paio di giorni non ci sarò: devo riformattare
tutto! :-(
PS: non credo che Mozart suonasse l'organo ma la prova l'ho fatta
mettendo dati un po' a caso! ;-)
Four wheeler
2006-03-29 07:29:49 UTC
Permalink
On Tue, 28 Mar 2006 21:17:51 GMT, "Alessandra"
Post by Alessandra
Benone!
Ora è andato tutto a buon fine, in un battibaleno... dopo che finalmente ho
capito che dovevo costruire DUE QUERY (!) : una si basa sul famoso Recordset
dell'altra. L'avevi scritto così chiaro....come nei gialli: l'assassino è lì
sotto gli occhi e tu non lo vedi.
non perderti in un bicchier d'acqua!
c'e un altro assassino sotto i tuoi occhi .....
[CUT]
Post by Alessandra
Ho persino aggiunto
con spregiudicatezza una "," per separare i nomi degli strumenti. Lo so che così
una virgola a "vuoto" rimane a seguire l'ultimo strumento nelcampo, ma non
sono troppo schizzinosa.
... nella penultima istruzione della funzione UnisciValori basta
sostituire 1 con 2, cioè
UnisciValori = Left(UnisciValori, Len(UnisciValori) - 2)
e la virgola finale sparisce....

Ciao
Alessandra
2006-03-30 22:15:28 UTC
Permalink
Grazie ancora!
ciao
Post by Four wheeler
On Tue, 28 Mar 2006 21:17:51 GMT, "Alessandra"
[CUT]
... nella penultima istruzione della funzione UnisciValori basta
sostituire 1 con 2, cioè
UnisciValori = Left(UnisciValori, Len(UnisciValori) - 2)
e la virgola finale sparisce....
Ciao
Loading...