|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2001
Città: Roma
Messaggi: 775
|
[ACCESS] Ricerca all'interno di tabelle correlate
Ciao, buonasera.
Sto sbattendo la testa su questo archivio ormai da 1 mese e purtroppo non conosco bene access....Cerco aiuto. ![]() Sto realizzando un archivio per dei brani musicali. Questo archivio ha una tabella principale chiamata COSTANTI dove sono memorizzati i vari record (titoli e altre informazioni dei brani). C'è anche una cartella VARIABILI dove ci sono i titoli secondari dei brani che si trovano in COSTANTI. Praticamente, ogni [Titolo principale] che si trova in COSTANTI può avere + di un [Titolo] che si trova in VARIABILI. A legare queste 2 tabelle ci sono i campi [ID]in COSTANTI e [Riferimento ID]in VARIABILI. Ho realizzato una maschera legata ad una query di selezione per effetuare la ricefca tramite [Titolo principale]. Ovviamente la ricerca dovrà essere eseguita anche su [Titolo]. Il problema è che, se io faccio una ricerca su tutti i brani che iniziano per "A", lui nella maschera mi ripete i [Titolo principale] tutte le volte che trova nel corrispettivo [Titolo] un brano che inizia per "A". Praticamente, se io ho questo record: [Titolo principale]=Brocco [ID]=1 [Titolo]=Allready [Riferimento ID]=1 [Titolo]=Assie [Riferimento ID]=1 [Titolo]=Amelia [Riferimento ID]=1 ...lui mi mostra 3 volte la stessa maschera anche se tutti e 3 i titoli appartengono allo stesso [ID]=1 Come posso correggere questa cosa? ![]() PS se qualcuno vuole posso passargli il file. ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2001
Città: Roma
Messaggi: 775
|
Nessuno può aiutarmi?
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2002
Città: Torino
Messaggi: 1124
|
cioè il problema è che ti tira fuori solo i titoli secondari che iniziano per A, mentre tu vorresti titolo che inizia per A seguito da titoli secondari a prescindere dall'iniziale?
potresti postare la query che hai utilizzato?
__________________
"Ai consider des de fleg ov iunait stais nos onli e fleg ov e caunti, bas is a iuniversal messeig ov fridom ev... dimocrasi" ![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2001
Città: Roma
Messaggi: 775
|
Quote:
Ciao, e grazie tantissimo per la risposta. ![]() Non prorpio. Se nella query inserisco solo la tabella COSTANTI, inserendo "A" lui mi tira fuori tutti i record che iniziano per "A". Ho realizzato una maschera per cui, ogni volta che mostra un record proveniente dalla query, lui associa i corrispettivi "titoli secondari" a quel "titolo primario" (grazie al campo ID e RIFERIMENTO ID). Fin qui tutto bene, la maschera funziona a meraviglia e anche la query: SELECT Costanti.ID, Costanti.[Titolo Primario], Costanti.Genere, Costanti.Durata, Costanti.Autori, Costanti.Descrizione, Costanti.SIAE FROM Costanti WHERE (((Costanti.[Titolo Primario]) Like [Inserisci il titolo]+"*")) ORDER BY Costanti.[Titolo Primario]; Il problema è che vorrei effettuare la ricerca in questione anche sui titoli secondari. Quindi creo una relazione tra le 2 tabelle nella query tramite il record ID---->RIFERIMENTO ID. A questo punto inserisco lo stesso criterio di ricerca anche in VARIABILI sotto la voce [TITOLO] (titoli secondari). Inserendo "A" mi trovo come risuulatato la maschera con il record principale [titolo primario] BUIACCA poiche nei titoli secondari [titolo] c'è un ALMA. Fin qui tutto perfetto. Il problema subentra quando ho + di un titolo secondario. Lui mi mostra tante maschere uguali quanti sono i titoli secondari perche lui li vede come tante schede separate. La query in questione è questa: SELECT Costanti.ID, Costanti.[Titolo Primario], Costanti.Genere, Costanti.Durata, Costanti.Autori, Costanti.Descrizione, Costanti.SIAE, Variabili.Titolo FROM Costanti LEFT JOIN Variabili ON Costanti.ID = Variabili.[Riferimento ID] WHERE (((Costanti.[Titolo Primario]) Like [Inserisci il titolo]+"*")) OR (((Variabili.Titolo) Like [Inserisci il titolo]+"*")) ORDER BY Costanti.[Titolo Primario]; Se trovassi il modo nella maschera di non mostrare i record con lo stesso [ID], avrei risolto il problema. Oppure modificare la query....ma non so come. Puoi aiutarmi? Se vuoi posso passarti l'archivio tramite email o MSN.. Il mio indirizzo è Marco1474@inwind.it Grazie ancora ![]() Ultima modifica di marco1474 : 19-04-2006 alle 09:50. |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2001
Città: Roma
Messaggi: 775
|
Per farti capire meglio ti posto l'immagine della maschera:
![]() Questa maschera in particolare, facendo la query con la lettera "B", esce fuori la maschera di ASTRA poiche nel titolo secondario c'è BOBO. ed è OK poiche la lettera "B" c'è solo nei titoli secondari. Se ci fossero stati + titoli secondari con la "B" lui mi avrebbe fatto vedere questa identica maschera per X volte quante sono i titoli con la "B". Quest'altra invece si comporta addirittura differentemente: ![]() Questa mi viene mostrata 3 volte poiche il tilolo con la "B" è in [titolo primario] e mi viene mostrata per 3 volte poiche i titoli secondari sono 3 e lui li interpreta come 3 singoli risultati anche se hanno lo stesso [ID]. |
![]() |
![]() |
![]() |
#6 | |
Member
Iscritto dal: Feb 2006
Messaggi: 36
|
Quote:
Non potresti mettere anche il "Titolo principale" nella cartella "VARIABILI" ? In questo caso la query sarà solo su "VARIABILI" e dovrai leggere una sola volta tramite ID la tabella "COSTANTI", prima di iniziare il ciclo di composizione della griglia. La mia spiegazione è un pò caotica, ciao !!! |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2001
Città: Roma
Messaggi: 775
|
Quote:
Capito......più tardi provo a fare come dici e poi ti dico se funziona. ![]() Grazie 1000 per il sugerimento ![]() |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Apr 2001
Città: Roma
Messaggi: 775
|
Quote:
Purtroppo non funziona a livello logico. Potrei inserire una voce [titolo principale] in VARIABILI, ma il risultato non cambierebbe poiche leggerebbe in COSTANTI ogni volta che trova un titolo anche se nella stessa scheda. Oppure inserire il titolo principale sotto [titolo] in VARIABILI ma a questo punto perderei il titolo principale poiche verrebbe visto come un titolo normale e quindi ripetuto in ogni scheda. Ci vorrebbe un filtro nella maschera che tenga solo il primo riferimento ID e cancelli i successivi se sono uguali. ![]() |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2001
Città: Roma
Messaggi: 775
|
Un'idea:
Guardate questa immagine: ![]() Cliccando sulla freccetta a destra [BRANO SUCCESSIVO], lui va al record successivo trovato dalla query. Si può aggiungere a questo comando un istruzione del genere: SE [ID] UGUALE A [ID DEL PRECEDENTE RECORD] ALLORA VAI AL RECORD SUCCESSIVO. E' possibile? |
![]() |
![]() |
![]() |
#10 | |
Member
Iscritto dal: Feb 2006
Messaggi: 36
|
Quote:
Comunque, se vuoi un filtro, basta mettere nella query GROUP BY ID, ecc. Credo che ti stia complicando la vita... se vuoi, invia il sorgente via mail, in qualsiasi momento |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Apr 2001
Città: Roma
Messaggi: 775
|
Quote:
Te ne sarei immensamente grato..... Mi dai l'email in PVT? ![]() Grazie ancora. ![]() PS: Comunque avevo capito.....infatti avevo scritto: "Oppure inserire il titolo principale sotto [titolo] in VARIABILI ma a questo punto perderei il titolo principale poiche verrebbe visto come un titolo normale e quindi ripetuto in ogni scheda. " ![]() Ultima modifica di marco1474 : 19-04-2006 alle 17:13. |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2001
Città: Roma
Messaggi: 775
|
![]() Il codice SQL del tasto [RECORD SUCCESSIVO] è il seguente: Private Sub RecordSuccessivo_Click() On Error GoTo Err_RecordSuccessivo_Click DoCmd.GoToRecord , , acNext Exit_RecordSuccessivo_Click: Exit Sub Err_RecordSuccessivo_Click: MsgBox Err.Description Resume Exit_RecordSuccessivo_Click End Sub Come faccio ad inserirgli il comando: SE [ID] UGUALE A [ID DEL PRECEDENTE RECORD] ALLORA VAI AL RECORD SUCCESSIVO? ![]() |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Apr 2001
Città: Roma
Messaggi: 775
|
Ho risolto il problema grazie a ViolaX che è stata gentilissima.
La query è stata così modificata: PRIMA: SELECT Costanti.ID, Costanti.[Titolo Primario], Costanti.Genere, Costanti.Durata, Costanti.Autori, Costanti.Descrizione, Costanti.SIAE, Variabili.Titolo FROM Costanti LEFT JOIN Variabili ON Costanti.ID = Variabili.[Riferimento ID] WHERE (((Costanti.[Titolo Primario]) Like [Inserisci il titolo]+"*")) OR (((Variabili.Titolo) Like [Inserisci il titolo]+"*")) ORDER BY Costanti.[Titolo Primario]; DOPO: SELECT Costanti.ID, Min(Costanti.[Titolo Primario]) AS [MinDiTitolo Primario], Min(Costanti.Genere) AS MinDiGenere, Min(Costanti.Durata) AS MinDiDurata, Min(Costanti.Autori) AS MinDiAutori, Min(Costanti.Descrizione) AS MinDiDescrizione, Min(Costanti.SIAE) AS MinDiSIAE, Min(Variabili.Titolo) AS MinDiTitolo FROM Costanti LEFT JOIN Variabili ON Costanti.ID = Variabili.[Riferimento ID] WHERE (((Costanti.[Titolo Primario]) Like [Inserisci il titolo]+"*")) OR (((Variabili.Titolo) Like [Inserisci il titolo]+"*")) GROUP BY Costanti.ID ORDER BY Min(Costanti.[Titolo Primario]); Ora funziona tutto a perfezione. Grazie ancora a Viola ![]() |
![]() |
![]() |
![]() |
#14 |
Junior Member
Iscritto dal: Jul 2006
Messaggi: 3
|
Aiuto per SQL!
Ciao a tutti,
sono Simona, domani ho un esame su visual basic e sql e non ho trovato un argomento che devo sapere: USO DELLE VARIABILI NEL JOIN. Qualcuno può spiegarmelo? Mandate la risposta a simobert@yahoo.com aiutatemi!!! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:05.