Ricerca fra maschere

di il
23 risposte

Ricerca fra maschere

Buongiorno,

vi scrivo per cercare di risolvere un problema all'apparenza semplice ma che non riesco a risolvere.

Situazione:
-Tabella1 che chiamiamo ARCHIVIO con una serie di titoli [TITOLO] musicali che possono avere dei duplicati (nel campo [TITOLO], ma differiscono in altri campi -es. autore-)
-Tabella2 che chiamiamo ESECUZIONI con i titoli dei brani [BRANO] eseguiti in un determinato evento (gli eventi sono in un'altra tabella collegata)
-Maschera frmESECUZIONI tipo foglio dati della tabella esecuzioni
-Maschera frmARCHIVIO tipo dettaglio di archivio con info del titolo.

Nella maschera frmESECUZIONI all'evento doppio click sul nome del brano apre la maschera frmARCHIVIO con i suoi dettagli, usando il comando

DoCmd.OpenForm "frmARCHIVIO", , , "[TITOLO]=""" & Me![BRANO] & """"

Fin qui tutto ok, funzionerebbe perfettamente se tutti i titoli fossero univoci (senza duplicati), ma ahimè non è così poichè la maschera si apre sempre sul primo dei duplicati.

Per ovviare a ciò ho provato a spostare il focus di ricerca sul campo [ID] di ARCHIVIO -che è chiave primaria-, ma per poterlo fare l'origine dati della maschera frmESECUZIONI deve essere una query in cui inserisco anche l'[ID] dell'ARCHIVIO oltre ai campi nativi della tabella.

Così facendo e modificando la routine in 

DoCmd.OpenForm "frmARCHIVIO", , , "[ID]=" & Me![ID] & "

le cose funzionano come voluto, ma sorge un altro problema:

la maschera frmESECUZIONI a questo punto non è più alimentabile.

Come posso raggiungere i miei scopi (maschera esecuzioni alimentabile e ricerca brani univoca)?

Possibile che sbaglio qualcosa nelle relazioni, ma ho appurato che mettendole o togliendole i meccanismi sopra citati funzionano allo stesso modo.

Grazie a chiunque abbia la pazienza di aiutarmi

23 Risposte

  • Re: Ricerca fra maschere

    Mostra tabelle, campi e correlazioni delle tabelle.

  • Re: Ricerca fra maschere

    20/03/2024 - manu3287 ha scritto:


    Fin qui tutto ok, funzionerebbe perfettamente se tutti i titoli fossero univoci (senza duplicati), ma ahimè non è così poichè la maschera si apre sempre sul primo dei duplicati.

    Duplicati???

    20/03/2024 - manu3287 ha scritto:


    la maschera frmESECUZIONI a questo punto non è più alimentabile.

    In che senso?

    Se parli di una playlist aggiungi i brani ad una lista con l'id e mandi in play la lista.

    A questo punto mostra pure una videata delle maschere e dei duplicati.

  • Re: Ricerca fra maschere

    -Tabella1 che chiamiamo ARCHIVIO con una serie di titoli [TITOLO] musicali che possono avere dei duplicati (nel campo [TITOLO], ma differiscono in altri campi -es. autore-)

    quello che hai scritto implica innanzitutto una normalizzazione cioè avere:

    • una tabella tblTitoli con i seguenti campi 
      • IDTitolo - Numerazione Automatica - Chiave primaria
      • Titolo - Testo con le seguenti proprietà
        • Richiesto impostato a
        • Consenti lunghezza zero impostato a No
        • Indicizzato impostato a Sì (Duplicati non ammessi)
    • una tabella tblAutori con i seguenti campi 
      • IDAutore - Numerazione Automatica - Chiave primaria
      • Autore - Testo con le seguenti prorpietà
        • Richiesto impostato a
        • Consenti lunghezza zero impostato a No
        • Indicizzato impostato a Sì (Duplicati non ammessi)
    • una tabella tblTitoliAutori con i seguenti campi 
      • IDTitoloFk - Numerico  con le seguenti prorpietà
        • Dimensione campo impostato a Intero lungo
        • Posizioni decimali impostato a 0
        • Richiesto impostato a
        • Valore predefinito cancellare 0
        • Indicizzato impostato a Sì (Duplicati ammessi)
      • IDAutoreFk - Numerico  con le seguenti prorpietà
        • Dimensione campo impostato a Intero lungo
        • Posizioni decimali impostato a 0
        • Richiesto impostato a
        • Valore predefinito cancellare 0
        • Indicizzato impostato a Sì (Duplicati ammessi)

    impostare le relazione fra i campi:

    • IDTitolo, della tabella tblTitoli, con IDTitoloFk, della tabella tblTitoliAutori 
    • IDAutore, della tabella tblAutori, con IDAutoreFk, della tabella tblAutori 

    spuntando i due checkbox:

    • Applica integrità referenziale
    • Aggiorna campi correlati a catena
  • Re: Ricerca fra maschere

    Grazie per le veloci risposte.

    Sì probabilmente ho impostato male il progetto.
    Esempio dei duplicati nella tabella ARCHIVIO (la chiave primaria ID non è mostrata):

    Gli stessi [TITOLO] ricercati durante la compilazione della frmESECUZIONI (in questo caso è una sottomaschera che filtra in base al NOME_Ev della maschera madre)



    La scelta dei titoli avviene con una casella combinata che ha come sorgente una query basata su ARCHIVIO (ho messo anche l'[ID] per mostrare che sono righe differenti) 
    Ai titoli della colonna BRANO è associata la routine di ricerca.
    A me basterebbe che la routine agganciasse il titolo giusto (facendo riferimento all'[ID] -numerico- e non al [BRANO] -testo-)
    Come detto il tutto funziona se l'orgine dati della frmESECUZIONI ha [ID] di ARCHIVIO, ma in quel caso non posso aggiungere righe (non c'è la riga con l'asterisco).

    Le relazioni sono così fatte (male):

    Mi tocca rifare tutto da capo?

    Ahi :p

  • Re: Ricerca fra maschere

    Prima di continuare devi modificare la struttura del database in quanto non è corretta.

    Un consiglio non cambiate mai nome ai campi che invece sono gli stessi, vedi TITOLO e BRANO, in quanto genererete solo confusione.

  • Re: Ricerca fra maschere

    20/03/2024 - manu3287 ha scritto:


    Mi tocca rifare tutto da capo?

    Non è detto…

    Titolo e brano possono confondere ma che abbiano nomi diversi potrebbe anche essere meglio.

    Nel collegamento Master/detail (madre/figlia se preferisci) il collegamento non lo fai per titolo (lato master) ma per id, mentre lato detail (figlia) lo fai aggiungendo un campo identico all'id della master ma non come chiave (al massimo indicizzato) e col nome detailId (o quello che ti sconfinfera meglio).

    Eventi… compro una vocale, chiedo il 50%, chiamo l'amico a casa e voglio la soluzione…. A che serve?

    Tornando ad esecuzioni, rivedendo lo scopo del programma, a che serve un link?

    Fai una query dove unisci titolo e autore così sai di quale aurora si tratta.

    Comunque, ricordo titoli con la strofa tra parentesi per distinguerli da altri titoli uguali, magari lo carichi allo stesso modo.

    Selezionando il brano dalla query al doppio click inserisci l'id nella playlist, metti una checkbox con ripetizione continua, una con esegui random…. Vabbè magari per questa ne riparliamo.

    Ritorniamo alle relazioni. Per non scrivere sempre l'autore, crei la tabella autori e la colleghi molti a molti con archivio (che già il nome non dice niente meglio brani).

  • Re: Ricerca fra maschere

    Ok grazie provo a impostarlo come mi hai suggerito

  • Re: Ricerca fra maschere

    20/03/2024 - Stifone ha scritto:


    -Tabella1 che chiamiamo ARCHIVIO con una serie di titoli [TITOLO] musicali che possono avere dei duplicati (nel campo [TITOLO], ma differiscono in altri campi -es. autore-)

    quello che hai scritto implica innanzitutto una normalizzazione cioè avere:

    • una tabella tblTitoli con i seguenti campi 
      • IDTitolo - Numerazione Automatica - Chiave primaria
      • Titolo - Testo con le seguenti proprietà
        • Richiesto impostato a
        • Consenti lunghezza zero impostato a No
        • Indicizzato impostato a Sì (Duplicati non ammessi)
    • una tabella tblAutori con i seguenti campi 
      • IDAutore - Numerazione Automatica - Chiave primaria
      • Autore - Testo con le seguenti prorpietà
        • Richiesto impostato a
        • Consenti lunghezza zero impostato a No
        • Indicizzato impostato a Sì (Duplicati non ammessi)
    • una tabella tblTitoliAutori con i seguenti campi 
      • IDTitoloFk - Numerico  con le seguenti prorpietà
        • Dimensione campo impostato a Intero lungo
        • Posizioni decimali impostato a 0
        • Richiesto impostato a
        • Valore predefinito cancellare 0
        • Indicizzato impostato a Sì (Duplicati ammessi)
      • IDAutoreFk - Numerico  con le seguenti prorpietà
        • Dimensione campo impostato a Intero lungo
        • Posizioni decimali impostato a 0
        • Richiesto impostato a
        • Valore predefinito cancellare 0
        • Indicizzato impostato a Sì (Duplicati ammessi)

    impostare le relazione fra i campi:

    • IDTitolo, della tabella tblTitoli, con IDTitoloFk, della tabella tblTitoliAutori 
    • IDAutore, della tabella tblAutori, con IDAutoreFk, della tabella tblAutori 

    spuntando i due checkbox:

    • Applica integrità referenziale
    • Aggiorna campi correlati a catena

    A me non convince questa struttura. Premesso che non ho capito il senso della tabella Archivio. La tabella Titoli può inglobare in sè il campo IDAutore, perchè se si parla di Sinfonia n.3 di Beethoven, poi di Sinfonia n.3 di Mozart, Sinfonia n.3 di Tchaikovsky…come la mettiamo? manu3287 ha mostrato molti Aurora che sono diversi Titoli proprio con caratteristica diversa (lui la chiama Genere) e ovviamente anche Autore.

    Non so quale sia lo scopo del database di manu3287. Se ti serve un solo campo IDAutore in tabella Titoli, puoi decidere che ci siano semplici relazioni:
    Autori.IDAutore uno-a-molti Titoli.IDAutore
    Titoli.IDTitolo uno-a-molti Esecuzioni.IDTitolo

    Se però stai parlando di Yesterday di Lennon - McCartney…occorre rivedere ulteriormente…

  • Re: Ricerca fra maschere

    Come sospettavo il db manca di normalizzazione. Come al solito si pensa alle maschere prima creare un db normalizzato. Se lo scopo è archiviare dei brani, io creerei una tabella brani indicizzata relazionata con tabelle: genere, autori, posizioni, ecc.,  poi con campi del tipo: nome_brano, data_publicazione, data_inserimento_db, ecc.

  • Re: Ricerca fra maschere

    Ciao, 

    vorrei lasciarti una mia riflessione soprattutto in merito a quanto osservato da OsvaldoLaviosa che saluto

    20/03/2024 - OsvaldoLaviosa ha scritto:


    Non so quale sia lo scopo del database di manu3287. Se ti serve un solo campo IDAutore in tabella Titoli, puoi decidere che ci siano semplici relazioni:
    Autori.IDAutore uno-a-molti Titoli.IDAutore
    Titoli.IDTitolo uno-a-molti Esecuzioni.IDTitolo

    Se però stai parlando di Yesterday di Lennon - McCartney…occorre rivedere ulteriormente…

    OsvaldoLaviosa concordo ed nfatti secondo me si cerca di inventare una cosa che già esiste in buonissima parte in diversi software.

    Io suggerirei di prendere una delle tante applicazioni di playlist, analizzarla in tutte le sue parti e copiare pari pari la logica e l'organizzazione della playlist… mi pare molto semplice e banale replicare una cosa che già esiste e magari in alcuni ambiti si possono ampliare campi di ricerca e/o di ordinamento ecc…ecc… ma la playlist quella è.

    Ecco, mi permetto se posso, dare solo un piccolo e modesto consiglio pratico che può aiutare a sviluppare prima di tutto un analisi corretta per poi eseguire un corretto sviluppo.

    Saluti ;-)

  • Re: Ricerca fra maschere

    20/03/2024 - OsvaldoLaviosa ha scritto:


    A me non convince questa struttura. Premesso che non ho capito il senso della tabella Archivio. La tabella Titoli può inglobare in sè il campo IDAutore, perchè se si parla di Sinfonia n.3 di Beethoven, poi di Sinfonia n.3 di Mozart, Sinfonia n.3 di Tchaikovsky…come la mettiamo?

    Testo di mogol, arrangiamento dell'orchestra sinfonica, dirige il maestro vessicchio, canta vanoni!

    In effetti nel campo musicale un testo può essere interpretato da tanti cantanti. Poi ci sono le live, cover canzoni diverse dal titolo uguale ecc…

    Ma in tutto questo, nel campo titolo posso scrivere “canzone - vasco rossi” e “canzone - adriano celentano” oppure “canzone - vasco rossi - kom” (l'ultima non sono sicuro che esiste).

    Per gli autori, in caso di cover, opera la relazione m a m.

    E in effetti sifone ha messo la m a m.

    20/03/2024 - By65Franco ha scritt

    Beh allora facciamo i tortellini di giovanni rana, tanto il mondo è saturo di sw, esiste pure lo scarico del wc in app…

  • Re: Ricerca fra maschere

    Grazie.

    Beh, il database inizialmente nasce per tenere un archivio digitale di un repertorio d'orchestra cartaceo.
    Creato quello (ok, in maniera approssimativa), ho voluto implementarlo cercando un modo per tenere traccia di tutte le esecuzioni dei vari brani suddivisi per evento.
    Possiamo paragonarlo ad una biblioteca dove posso avere libri con lo stesso nome ma autori diversi e voler tracciare tutte le letture di diverse persone per esempio.

    Ok, ci sono applicativi già pronti, ma dall'altra vale anche la soddisfazione personale di crearne uno e gestirlo come più mi piace.

  • Re: Ricerca fra maschere

    21/03/2024 - manu3287 ha scritto:


    il database inizialmente nasce per tenere un archivio digitale di un repertorio d'orchestra cartaceo.

    Mi trovi molto ferrato sull'argomento.

    21/03/2024 - manu3287 ha scritto:


    Creato quello (ok, in maniera approssimativa), ho voluto implementarlo cercando un modo per tenere traccia di tutte le esecuzioni dei vari brani suddivisi per evento.

    Hai preso in considerazione una tabella Eventi?

    21/03/2024 - manu3287 ha scritto:


    Ok, ci sono applicativi già pronti, ma dall'altra vale anche la soddisfazione personale di crearne uno e gestirlo come più mi piace.

    Sono perfettamente d'accordo e a seconda degli scopi (più o meno analitici) che ti prefiggi anche l'organizzazione/normalizzazione tabelle può andare in una direzione piuttosto che in un'altra. Non a caso ti ho posto le mie domande.

  • Re: Ricerca fra maschere

    21/03/2024 - OsvaldoLaviosa ha scritto:


    Hai preso in considerazione una tabella Eventi?

    Sì, come puoi vedere nel mio primo messaggio di risposta, c'è la tabella eventi che non avevo considerato nel primo messaggio perchè ritenuta superflua ai fini del problema (è utilizzata “da filtro” per la sottomaschera frmESECUZIONI).

    20/03/2024 - OsvaldoLaviosa ha scritto:


    perchè se si parla di Sinfonia n.3 di Beethoven, poi di Sinfonia n.3 di Mozart, Sinfonia n.3 di Tchaikovsky

    Sì, esatto, la situazione è questa. Penso di aver riportato il caso più problematico: AURORA, stesso autore, due generi diversi. E' comunque un caso unico che posso trattare separatamente. Generalmente c'è al massimo stesso titolo con autori diversi.

    20/03/2024 - OsvaldoLaviosa ha scritto:


    Se però stai parlando di Yesterday di Lennon - McCartney…occorre rivedere ulteriormente…

    Questa affermazione però non mi è chiara: forse tu intendevi che se ci sono più autori bisogna scindere il campo autore in autore1 e autore2? No, questo non mi serve perchè, per come è pensata la gestione, Lennon - McCartney finirebbero entrambi nella stessa casella AUTORE come se fossero uno solo.

Devi accedere o registrarti per scrivere nel forum
23 risposte