Ricerca chiave esterna da maschera

di il
6 risposte

Ricerca chiave esterna da maschera

Buonasera.
Sto provando a progettare il mio primo DB Access. Ho consultato con attenzione alcuni manuali di base ma non sono riuscita a trovare istruzioni utili per impostare lo svolgimento di alcune attività.
Il DB vorrebbe rappresentare le pratiche di consultazione e prestito di libri. Ho creato 4 tabelle: Utenti, Opere, Consultazioni e Prestiti. Le tabelle Utenti e Opere sono legati da relazione uno a molti alle tabelle Consultazioni e Prestiti tramite l'utilizzo delle chiavi esterne IDUtente e IDOpera.
Al momento dell'inserimento di un record di consultazione o di prestito vorrei vedere se un utente o un'opera sono già inseriti nel DB per associare nel caso le chiavi esterne. Non riesco però ad impostare nel modo giusto la ricerca nelle maschere.
Faccio un esempio: nel campo OperaPrestito, dove voglio che compaia l'IDOpera, ho inserito una casella combinata che prende i dati dalla casella Opere. Come origine riga ho impostato l'espressione: SELECT Opere.IDOpera, Opere.CognomeAutore, Opere.TitoloOpera FROM Opere ORDER BY Opere.CognomeAutore, Opere.TitoloOpera con colonna associata 1 e larghezza colonne 0;2;2. Nella maschera vorrei eseguire la ricerca non per ID, ma per autore o titolo, a partire da una stringa qualsiasi di parole. Con queste impostazioni però nella casella combinata della maschera mi risulta ricercabile solo il cognome dell'autore, per cui le opere con CognomeAutore Null sono introvabili.
Sbaglio qualcosa? Dovrei impostare una query più specifica nella tabella o nella maschera?
Grazie e scusate se il mio problema è banale.

6 Risposte

  • Re: Ricerca chiave esterna da maschera

    Benvenuta nel forum.
    Forse ti faccio una domanda fuori tema, ma serve a me per comprendere pienamente il tuo progetto.
    Potresti chiarire la differenza tra Consultazioni e Prestiti? Cosa rappresentano? Puoi fare qualche esempio?
    Secondo me potresti accorparli in un'unica tabella.

    AlessandraT ha scritto:


    Nella maschera vorrei eseguire la ricerca non per ID, ma per autore o titolo, a partire da una stringa qualsiasi di parole. Con queste impostazioni però nella casella combinata della maschera mi risulta ricercabile solo il cognome dell'autore, per cui le opere con CognomeAutore Null sono introvabili.
    Io penso che il bello/potenza di una casella combinata sia proprio quello di poter digitare i PRIMI caratteri e veder saltar fuori "grosso modo" quello che ci si aspetta. Detto questo, io ritengo che una casella combinata vada "ottimizzata", ossia progettata nel miglior modo possibile. Va bene l'impostazione Larghezza colonne (con la prima 0 cm).
    Può darsi che nel tuo caso potresti trovarti di fronte a un paio di dubbi. Mi spiego meglio.
    A) Io avrei progettato la casella combinata con i campi nel seguente ordine: IDOpera/TitoloOpera/CognomeAutore. In questo modo direi che sei sicura di poter scrivere "qualcosa" che non sia Null.
    B) Il caso A non prevede che un utente non ricordi subito il Titolo e ricorda prima l'Autore. In alcuni miei database ho progettato un meccanismo di "sostituzione al volo" di quello che ci sta dentro la casella combinata, ossia Origine riga (RowSource). Devi gestire in VBA...o con macro (io ho preferito quest'ultima), tale meccanismo. Prova a leggere qui
    http://forum.masterdrive.it/access-79/scelta-evento-giusto-sua-corretta-gestione-92547/
    https://support.office.com/it-it/article/Creare-menu-e-menu-di-scelta-rapida-personalizzati-utilizzando-macro-5bd538ff-19c4-4dfe-9540-3309aebf8a1a?ui=it-IT&rs=it-IT&ad=IT
  • Re: Ricerca chiave esterna da maschera

    Grazie per l'interessamento. L'unica differenza sostanziale è che la consultazione ha una sola data di riferimento, mentre il prestito ha una data di consegna e una di restituzione. Sicuramente potrebbe stare tutto in un'unica tabella, con un campo che distingua la cons dal prestito, ma non so quanto questa opzione sarebbe adeguata alle mie esigenze: lavoro sulla base di materiale storico (cartaceo), quindi partendo da due serie tipologiche ben diverse, per cui il DB risulta un po' adattato rispetto a un modello "ideale". Però l'utilizzo di un DB relazionale, che non ho mai approcciato prima d'ora, mi sembra comunque la soluzione più appropriata.
    Il problema di ricerca in maschera è identico per le due tabelle. Quello che vorrei è la possibilità di ricercare utenti e opere (comuni alle due tabelle Consultazioni e Prestiti) a partire non dalle chiavi esterne IDUtente e IDOpera, ma da CognomeUtente e NomeUtente per l'utente e CognomeAutore E/O TitoloOpera per l'opera. La soluzione perfetta per me sarebbe che, una volta associata la chiave esterna, venisse anche visualizzata una sorta di sottomaschera con i dati completi presenti nelle tabelle Utenti e Opere (es. SessoUtente, ProvenienzaUtente), ma mi pare di capire che non sia possibile vedere il lato uno partendo dal lato molti.
    Intanto già risolvere i problemi di ricerca sarebbe tanto per me.
  • Re: Ricerca chiave esterna da maschera

    Non avevo letto la seconda parte del messaggio: approfondirò sicuramente i link che mi ha inviato. Grazie di nuovo!
    Avevo pensato anche alla soluzione "A", ma il problema è che i titoli sono molto abbreviati per cui potrei avere ad esempio espressioni come "Manuale fisica" "Fisica" che indicano la stessa cosa, mentre il cognome dell'autore (quando c'è un autore) è presente in modo completo.
  • Re: Ricerca chiave esterna da maschera

    AlessandraT ha scritto:


    L'unica differenza sostanziale è che la consultazione ha una sola data di riferimento, mentre il prestito ha una data di consegna e una di restituzione.
    Io direi di aggiungere un campo "bivalore" che specifica se si tratta di Consultazione o Prestito.

    AlessandraT ha scritto:


    Però l'utilizzo di un DB relazionale, che non ho mai approcciato prima d'ora, mi sembra comunque la soluzione più appropriata.
    Certo che lo è.
  • Re: Ricerca chiave esterna da maschera

    Grazie. Per facilitare la ricerca ho unito i campi [Opere.TitoloOpera] & ", " & [Opere.CognomeAutore]. Resta il grosso problema (dato che lavoro su informazioni in origine frammentarie) che posso cercare solo partendo dall'inizio del termine. Cosa dovrei fare se volessi impostare la ricerca a partire da una qualsiasi stringa di caratteri? Vorrei fare in modo che, ad esempio, digitando FIS in IDOpera (con larghezza colonna IDOpera 0) mi venissero restituiti i campi contenenti le espressioni "Manuale di FISica" "FISica" "La FISica moderna" "Legge sulle afFISsioni", per poi selezionare quello appropriato.
  • Re: Ricerca chiave esterna da maschera

    Ciao, per fare quello che chiedi puoi utilizzare l'operatore LIKE anteponendo e post-ponendo il carattere speciale "*".

    Nel tuo caso qualcosa di simile a:
    LIKE "*" & [caselladitestodovedigiti].text & "*"
    Da inserire nel criterio del campo [Opere.TitoloOpera] & ", " & [Opere.CognomeAutore] della query di ricerca... Forse avrai bisogno anche di impostare un requery della submask dei risultati, nell'evento onchange della casella di testo
Devi accedere o registrarti per scrivere nel forum
6 risposte