Creare ricerca di più campi utilizzando un singolo campo

di il
12 risposte

Creare ricerca di più campi utilizzando un singolo campo

Salve a tutti sono un neofita di Access e al momento non sto avendo grandi difficoltà nell'utilizzarlo, ultimamente sto lavorando ad un Database di raccolta FIlm per mio zio ma sono incappato in un problema logico/strutturale che non riesco a risolvere e le ricerche su internet con i vari tutorial non riescono a centrare in pieno il mio problema. Ora vi spiego:
Stavo realizzando delle maschere carine di ricerca, ovviamente passando per le query, per ogni tipologia di campo: Nome Regista, Paese, Anno e fin qui tutto bene ho creato una casella combinata che mi da una lista dei dati aggiunti e mi restituisce correttamente i record. Ora il problema si viene a creare quando ho intenzione di creare una maschera di ricerca come le altre con casella combinata riguardante la tipologia Genere. Siccome ogni film ha la possibilità di di avere un massimo di 3 generi ha rispettivamente 3 campi per inserire i differenti generi. Mi spiego meglio ho creato il mio DB strutturato in questo modo: Tabelle: Dati; Risoluzione; Genere; Anno;

Risoluzione è composta da IDRisoluzione / campoRisoluzione
Genere è composta da IDGenere / campoGenere
Anno è composta da IDAnno / campoAnno
Dati è composta da campoID / campoRegista / campoFilm / campoAnno /campoRisoluzione / campoGenere1 / campoGenere2 / campoGenere3.

Ho creato una relazione tra:
IDAnno<->campoAnno;
IDRisoluzione<->campo:Risoluzione;
IDGenere<->campoGenere1;
IDGenere<->campoGenere2;
IDGenere<->campoGenere3;

La maschera per l'inserimento dei dati con caselle combinate funziona che è un piacere. Il mio problema è creare ora una maschera di ricerca per genere che mi dia la lista dei film appartenenti un genere selezionato e che preveda che il genere selezionato si possa trovare sia nel campoGenere1; sia nel campoGenere2; che nel campoGenere3.

Farò un esempio per spiegarmi meglio:

campoID / campoRegista / campoFilm / campoAnno /campoRisoluzione / campoGenere1 / campoGenere2 / campoGenere3.
1----------Brontolo------- NataleAiCaraibi ----1995----------- 4k ----------------- Avventura-------- Drama--------------Thriller
2------------Giorgio-----------Ispettorix----------2001--------- FHD--------------------Thriller----------Crime--------------Fiction
3------------Francesco---L'ultimoDegliScemi---2023----------8k-----------------------Drama---------Historical-----------Thriller

Ora nella mia maschera se seleziono nella casella combinata CBORIcercaGenere: Thriller mi dovrebbero apparire in elenco tutti e tre i film dal momento che contengono tutti e tre il genere Thriller anche se in campi diversi. Spero di essere stato più chiaro possibile, vi ringrazio anticipatamente per la risposta e il tempo che mi dedicherete! Spero di trovare una soluzione!

12 Risposte

  • Re: Creare ricerca di più campi utilizzando un singolo campo

    Di norma serve ragionare con un metodo RELAZIONALE di attributi...
    1Film--->Molti Generi

    Se avessi strutturato in questo modo sarebbe stato semplice perchè i DB sono strutturati proprio per lavorare in questo modo, tu invece hai strutturato in modo non NORMALE(si chiama Normalizzazione l'insieme delle 5 FORME strutturali) di conseguenza il tuo problema.
  • Re: Creare ricerca di più campi utilizzando un singolo campo

    La risposta di Alex, come al solito, è esaustiva.
    Aggiungo anche che, invece di creare tre campi, potevi creare un campo con ricerca combinata sui Generi che ammette la scelta di più valori.
    A quel punto Access vede il record come immesso n volte e potevi inserire da 1 a n generi e quindi anche più di tre.
    Ma se proprio non puoi cambiare la struttura del database, puoi creare una query dove crei un campo che somma il testo dei tre generi con una formula del tipo NomeCampoTreGeneri: Genere1 & Genere2 & Genere3 e fare la ricerca su questo con un Like "*" Maschere!NomeMaschera!nomecontrollocasellacombinatageneredaricercare "*".

    Ciao.

    Alex66
  • Re: Creare ricerca di più campi utilizzando un singolo campo

    alex66 ha scritto:


    ... un campo che somma il testo dei tre generi con una formula del tipo NomeCampoTreGeneri: Genere1 & Genere2 & Genere3 ...
    Non mi pare una buona idea per tanti motivi, a parte la questione normalizzazione.

    Se unisci in quel modo puoi avere un sacco di problemi. Se avessi

    AB CD EF diventerebbe ABCDEF e quindi una ricerca con BCD sarebbe vera (orrore)

    Anche separando con spazio se avessi AB CD EF e cercassi un dato del tipo "AB CD" *diverso" da AB e da CD, avresti un falso positivo.
  • Re: Creare ricerca di più campi utilizzando un singolo campo

    oregon ha scritto:


    alex66 ha scritto:


    ... un campo che somma il testo dei tre generi con una formula del tipo NomeCampoTreGeneri: Genere1 & Genere2 & Genere3 ...
    Non mi pare una buona idea per tanti motivi, a parte la questione normalizzazione.

    Se unisci in quel modo puoi avere un sacco di problemi. Se avessi

    AB CD EF diventerebbe ABCDEF e quindi una ricerca con BCD sarebbe vera (orrore)

    Anche separando con spazio se avessi AB CD EF e cercassi un dato del tipo "AB CD" *diverso" da AB e da CD, avresti un falso positivo.
    Giusto, però considera che il genere da ricercare viene scelto da cbo e se lo configura con Solo in elenco=Sì, non credo che Access possa "mentire".
    Però, tanto per andare sul sicuro, si può fare una formula: "-"&Genere1&"-"&Genere2&"-"&Genere3&"-" e la ricerca con Like "*" & "-" & ControlloCboMaschera & "-" & "*".
    Ma non sono sicuro della sintassi del Like. Confortami tu.

    Ciao.

    Alex66
  • Re: Creare ricerca di più campi utilizzando un singolo campo

    Non puoi fare una ricerca "parziale" per testo contenuto in una Combo...
    Per chiarire se:
    Genere1="AA"
    Genere2="BB"
    GEnere3="CC"
    Avrei che la cbo="AABBCC"
    se cerchi ad esempio BB o CC non lo troveresti in quanto la ricerca avviene solo su INIZIALE... quindi decisamente inutile.
    In relazione al fatto che strutturalmente siamo dinnanzi ad un errore, meglio suggerire la soluzione giusta.
  • Re: Creare ricerca di più campi utilizzando un singolo campo

    @Alex ha scritto:


    Non puoi fare una ricerca "parziale" per testo contenuto in una Combo...
    Per chiarire se:
    Genere1="AA"
    Genere2="BB"
    GEnere3="CC"
    Avrei che la cbo="AABBCC"
    se cerchi ad esempio BB o CC non lo troveresti in quanto la ricerca avviene solo su INIZIALE... quindi decisamente inutile.
    In relazione al fatto che strutturalmente siamo dinnanzi ad un errore, meglio suggerire la soluzione giusta.
    No, la cbo dove scelgie il genere da ricercare ha AA o BB o CC. È il campo creato nella query dove ricercare che è AABBCC.
    E il Like "*" nomecontrollocbo "*" fa la ricerca all'interno di tutta la stringa.

    Io la faccio regolarmente e funziona.

    Poi che il problema strutturale esista non c'è dubbio, l'ho anche scritto e proposto anche soluzione diversa con campo con cbo a multivalore invece che tre campi genere.

    Ciao.

    Alex66
  • Re: Creare ricerca di più campi utilizzando un singolo campo

    alex66 ha scritto:


    No, la cbo dove scelgie il genere da ricercare ha AA o BB o CC. È il campo creato nella query dove ricercare che è AABBCC.
    Prova a cercare BB o CC come ti ho chiarito sopra a partire dalla Combo che hai suggerito con la concatenazione, poi ci risentiamo...

    alex66 ha scritto:


    Poi la ricerca con Like "*" nomecampo "*" fa la ricerca all'interno di tutta la stringa.
    Io la faccio regolarmente e funziona.
    Non credo tu lo faccia con Combo a campi CONCATENATI e ricerca parziale non per valore INIZIALE... impossibile, perchè i valori intermedi non vengono trovati nell'elenco, e, a fronte del "SOLO IN ELENCO" avresti errore.
    Secondo me quello che fai tu, non è proprio così.

    alex66 ha scritto:


    Poi che il problema strutturale esista non c'è dubbio, l'ho anche scritto e proposto anche soluzione diversa con campo con cbo a multivalore invece che tre campi genere.
    Ciao.
    Alex66
    Saluti
  • Re: Creare ricerca di più campi utilizzando un singolo campo

    @Alex ha scritto:


    alex66 ha scritto:


    No, la cbo dove scelgie il genere da ricercare ha AA o BB o CC. È il campo creato nella query dove ricercare che è AABBCC.
    Prova a cercare BB o CC come ti ho chiarito sopra a partire dalla Combo che hai suggerito con la concatenazione, poi ci risentiamo...

    alex66 ha scritto:


    Poi la ricerca con Like "*" nomecampo "*" fa la ricerca all'interno di tutta la stringa.
    Io la faccio regolarmente e funziona.
    Non credo tu lo faccia con Combo a campi CONCATENATI e ricerca parziale non per valore INIZIALE... impossibile, perchè i valori intermedi non vengono trovati nell'elenco, e, a fronte del "SOLO IN ELENCO" avresti errore.
    Secondo me quello che fai tu, non è proprio così.

    alex66 ha scritto:


    Poi che il problema strutturale esista non c'è dubbio, l'ho anche scritto e proposto anche soluzione diversa con campo con cbo a multivalore invece che tre campi genere.
    Ciao.
    Alex66
    Saluti
    Non riesco a spiegarmi. La combo da cui partire per la ricerca non ha nessuna concatenazione ma origine dati dalla tabella Generi (AA,BB,CC.ecc...).
    Io ho proposto di creare una query creando un campo di concatenazione dei tre Generi della Tabella Film, sul quale fare la ricerca con il Like "*" ... "*".
    Spero di essere stato più chiaro.

    E poi fammi capire. Anche la combo multivalore è sconsigliabile? Io non l'ha mai usata perché per i miei db, che sono un po' più complessi di quello di Zardaiku, mi dava più problemi che altro. Ma per lui potrebbe fare al caso.

    Ciao.

    Alex66
  • Re: Creare ricerca di più campi utilizzando un singolo campo

    I campi MultiValore sono da evitare.
  • Re: Creare ricerca di più campi utilizzando un singolo campo

    @Alex ha scritto:


    Di norma serve ragionare con un metodo RELAZIONALE di attributi...
    1Film--->Molti Generi

    Se avessi strutturato in questo modo sarebbe stato semplice perchè i DB sono strutturati proprio per lavorare in questo modo, tu invece hai strutturato in modo non NORMALE(si chiama Normalizzazione l'insieme delle 5 FORME strutturali) di conseguenza il tuo problema.
    Innanzi tutto ringrazio tutti per le risposte.

    Alex mi è chiaro a livello logico ma non ho capito nel pratico dov'è l'errore dovrei invertire le relazioni già fatte cioè :

    CampoGenere1<->IDGenere
    CampoGenere2<->IDGenere
    CampoGenere3<->IDGenere

    Inoltre ho notato che nelle maschere di ricerca create precedentemente se per esempio nella CBO della ricerca per Anno, se ci sono più record con lo stesso anno nella lista della CBO mi escono duplicati dello stesso anno a cui appunto corrispondono i relativi film ma non il singolo anno.

    Grazie ancora!
  • Re: Creare ricerca di più campi utilizzando un singolo campo

    No non ti è chiaro...
    Nel tuo caso servono 3 tabelle per realizzare la 3°FN ovvero relazione Molti a Molti.
    La tabella di cui parli non serve alcun campo genere...
    Avrai 3 tabelle:
    Una tabella GENERI
    Una tabella FILMS
    Una tabella di congiunzione FILMSGENERI legata alle altre 2 lato Molti.

    La tabella GENERI funziona da catalogo scelta, la tabella intermedia da attribuzione generi al Film.
  • Re: Creare ricerca di più campi utilizzando un singolo campo

    @Alex ha scritto:


    No non ti è chiaro...
    Nel tuo caso servono 3 tabelle per realizzare la 3°FN ovvero relazione Molti a Molti.
    La tabella di cui parli non serve alcun campo genere...
    Avrai 3 tabelle:
    Una tabella GENERI
    Una tabella FILMS
    Una tabella di congiunzione FILMSGENERI legata alle altre 2 lato Molti.

    La tabella GENERI funziona da catalogo scelta, la tabella intermedia da attribuzione generi al Film.
    Ciao ultimamente non ho avuto tempo di attuare i tuoi consigli perchè sono stato impegnato per lavorarci su, oggi ho provato a seguire i tuoi consigli e devo dire che funziona, ma solo in parte ho ampliato la struttura del database come mi hai consigliato. Faccio una premessa il fine è creare un database che mi registri i dati del regista e associare ad ognuno i film che ha creato con i relativi dati come risoluzione, durata ecc... e ovviamente il genere, che come ho già detto può essere più di uno. In più deve contenere delle maschere di ricerca per Genere, nome regista, nome film, e altri campi, con la possibilità di avere un report dei risultati che successivamente potrei stampare come lista.

    Allego qui in basso delle foto del lavoro che ho fatto finora per capire se ci sono errori di struttura
    (non badate all'estetica vorrei prima risolvere questi problemi di struttura)

    Questa è la maschera per aggiungere i dati; creata con la tabella dei registi e successivamente vi ho aggiunto una sotto-maschera con i dati del film il campo dei generi l'ho preso dalla tabella FILMGENERI ma non mi va, non me li fa aggiungere. Forse dovrei creare una cbo collegata alla lista di tutti i generi ma non saprei successivamente come aggiungerne un altro

    https://drive.google.com/open?id=1TrJUSqVy_TSG_86O5so7cVR3U5YSDgCq

    Questa è la foto delle relazioni che ho creato tra le varie tabelle qualsiasi parere o consiglo sulla struttura del DB è ben accetto che come ho già detto sono un neofita di Access

    https://drive.google.com/open?id=1aV6CjTQ-EvXxprpFnaduiU-MIDijui36

    Grazie ancora per la vostra disponibilità
Devi accedere o registrarti per scrivere nel forum
12 risposte