Visualizzare una casella di riepilogo come input per query

di il
20 risposte

Visualizzare una casella di riepilogo come input per query

Buongiorno a tutti, sono nuovo del forum. Come potete vedere anche dal titolo del mio post sto cercando di fare una query la cui esecuzione comporti, al posto della classica casellina dentro cui inserire il termine di ricerca, l'apertura di una casella di riepilogo. Questa casella serve per inserire i valori che la query dovrà utilizzare come ricerca. Ho cercato in modo abbastanza approfondito (circa 3 gg) post simili nel forum senza successo, nel caso abbia cercato male vi chiedo scusa.
Vi ringrazio per l'attenzione, nel caso sia stato poco chiaro vi prego di chiedermi ulteriori spiegazioni.

Saluti.

20 Risposte

  • Re: Visualizzare una casella di riepilogo come input per query

    Spiega un po' più passo passo quello che deve accadere. Dentro quale oggetto ti trovi. Poi, il termine "ricerca", ha un significato ambiguo, per alcuni è implicito che si parli di "casella di ricerca", cioè "casella combinata" o "casella di riepilogo", altrimenti...davvero non ho capito. Cita sempre nomi di tabelle, suoi campi, ecc...meglio abbondare che deficere.
  • Re: Visualizzare una casella di riepilogo come input per query

    Ok, il problema è questo: apro la query in modalità visualizzazione struttura, nel campo CRITERI ho messo il parametro Like [Nome]. Con questa configurazione eseguendo la query mi si apre una finestra di ricerca dove mi da la possibilità di inserire il nome per effettuare la ricerca. Ok, io vorrei che al posto del nome da inserire liberamente (questo impone ricordare precisamente i nomi che servono), potessi fornire questi nomi (che poi sono i criteri con cui la query effettua la ricerca) spuntandoli da opportune caselle (quelle di riepilogo). La lista dei nomi da cui formare l'elenco di selezione è contenuto in una tabella (TAB_NOMI).
    Spero di essere stato più chiaro. Non ho fatto riferimenti a tabelle perchè non ho capito cosa intendete,idem per il riferimento all'oggetto.
  • Re: Visualizzare una casella di riepilogo come input per query

    La tua descrizione è leggermente più chiara...spero di riuscire ad afferrare la soluzione.
    Quando parlo di oggetti intendo dire Tabelle, Query, Maschere, Report, ecc...
    1. Crea una query in cui importi la tabella NOMI
    2. Importa il campo Nome e imposta Ordinamento: Crescente
    3. Salva la query con nome NomiOrdinati (ti serve per costruire una casella di riepilogo coerentemente ordinata)
    4. Vai nella maschera dove volevi la tua casella di riepilogo, costruisci (se non ce l'hai già) la casella di riepilogo e imposta le proprietà:
    Tipo origine riga: Tabella/query
    Origine riga: NomiOrdinati
    5. Salva la struttura della maschera
    6. Vai in visualizzazione struttura TuaQuery
    7. Al campo Nome, in corrispondenza di Criterio, devi scrivere quanto segue:
    [Maschere]![NomeMaschera]![NomeCasellaRiepilogo]
    dove [Maschere] è obbligatorio, gli altri due contenuti li devi ovviamente personalizzare
    8. Salva la query
    9. Ritorna in visualizzazione struttura TuaMaschera
    10. A questo punto devi associare un Evento che faccia in modo di aprire automaticamente la query, dopo aver scelto un valore dalla casella di riepilogo. Io direi che potresti andare fra le proprietà della casella di riepilogo, scheda Eventi, Dopo aggiornamento....mmm, aspetta, ho dimenticato un passaggio, vai al punto 11.
    11. Vai alle macro, clicca sul tasto in alto Nuovo, si aprirà una macro in visualizzazione struttura
    12. Nel primo rigo Azioni, scrivi:
    ApriQuery / Nome query: TuaQuery
    13. Salva la macro con nome X
    14. Ritorna al punto 10. e all'evento Dopo aggiornamento della casella di riepilogo, devi scrivere X
    15. Salva la maschera

    Spero di aver interpretato correttamente il tutto. Altrimenti dovresti raccontare un po' meglio tutti i campi, le loro provenienze da quali tabelle ecc...
  • Re: Visualizzare una casella di riepilogo come input per query

    Buongiorno e grazie per l'aiuto Osvaldo. Ho applicato alla lettera la procedura che hai descritto e non riesco a capire come mai all'interno della casella di riepilogo mi rimane la scritta <<Non associato>>. Ho pensato dipendesse dalla query a cui è riferita la casella di riepilogo, così sono andato a controllare come si comporta la query ed effettivamente se uso il criterio che hai suggerito non trova alcun record. Ho quindi fatto la prova togliendo il criterio e lasciando la casella vuota, trova tutti i record della tabella NOMI ma la situazione nella casella di riepilogo resta invariata. Cosa sto sbagliando?
  • Re: Visualizzare una casella di riepilogo come input per query

    Io sono andato un po' a braccio. Se tu descrivessi tutte le tabelle e query, con relativi campi, che entrano in gioco nel tuo discorso, potremmo trovare dov'è l'inghippo. Mi manca pure, di ogni maschera, la sua origine (tabella o query).

    ...continuando poi...Ho provato a fare un test, creando una maschera vuota, dentro c'è una casella di riepilogo che punta sui valori della query NomiOrdinati. Dopo il clic/rilascio della casella di riepilogo, tutto funziona a dovere. Anche a me, in visualizzazione struttura maschera, appare la scritta "Non associato" dentro la casella di riepilogo.
    A me sembra tutto normale, non comprendo la tua preoccupazione.
  • Re: Visualizzare una casella di riepilogo come input per query

    Cercavo di evitare la descrizione dettagliata semplicemente per non complicare le cose, chiedo scusa. Dunque tutto si articola così: ho una maschera principale <<MascheraGiornali>> che fa riferimento ad una tabella <<Giornali>>, che contiene dei giornali come record. Ogni giornale ha diversi articoli e, per come ho pensato la procedura di popolamento del DB, oltre al titolo del giornale l'utente deve inserire anche che tipo di articoli sono contenuti all'interno. Per evitare dispersione di dati ho catalogato le tipologie di articoli in categorie, che sono racchiuse in una tabella separata (quella che prima chiamavo NOMI ma che in realtà si chiama <<CategorieArticoli>>). Ora, per fare in modo di trovare velocemente dove compaiono determinati articoli vorrei mettere nella maschera <<MascheraGiornali>> questa query. Poichè però le categorie sono numerose e con nomi lunghi, se nella query metto il parametro Like[Nome] l'utente si deve ricordare tutto il termine da cercare (con la possibilità di errori di battitura). La mia intenzione è di fare una query che mi permettesse di selezionare i nomi degli articoli da ricercare da una casella di riepilogo collegata alla tabella <<CategorieArticoli>>. In questo modo se vado a modificare la tabella <<CategorieArticoli>> la casella di riepilogo si aggiorna automaticamente.
    Nel caso io stia dimenticando di descrivere qualcosa, avvertitemi. Ancora grazie.
  • Re: Visualizzare una casella di riepilogo come input per query

    Dovevi descrivere tutto questo fin dall'inizio. Quando tutto è più chiaro, tanto più gli altri utenti riescono ad avere un quadro logico generale più definito. Da come descrivi il tutto, non hai mai parlato di una tabella Articoli che io troverei indispensabile nell'organizzazione tabelle. Ora mi permetto di creare una mia descrizione logico-strutturale e tu mi devi dire se trovi riscontro, poi possiamo passare al problema postato inizialmente. Questo il mio scenario tabelle:

    Giornali
    IDGiornale (contatore, chiave primaria)
    NomeGiornale (testo)

    Articoli
    IDArticolo (contatore, chiave primaria)
    Titolo (testo)
    IDGiornale (numerico)
    Data (data)
    Pag (numerico)
    IDCategoria (numerico)

    Categorie
    IDCategoria (contatore, chiave primaria)
    Categoria (testo)

    Relazioni:
    Giornali.IDGiornale uno-a-molti con Articoli.IDGiornale
    Categorie.IDCategoria uno-a-molti con Articoli.IDCategoria

    Perchè tutto questo?
    Un Giornale contiene molti Articoli.
    Una Categoria può stare in molti Articoli
    ...questo può essere un primo scenario...per me Un Articolo può appartenere a molte Categorie, ma questo devi essere tu a stabilirlo. Per ora lascerei la cosa così.

    Possiamo partire da qua?
  • Re: Visualizzare una casella di riepilogo come input per query

    ListaGiornali:

    Titolo (Testo),
    Numero (Num aut, chiave pri),
    Anno (Num).

    ListaArticoli:

    Giornale di appartenenza (Testo),
    Titolo (Testo),
    Nome Categoria (Testo),
    ID Articolo (Num aut, chiave pri).

    ListaCategorie:

    Nome Categoria (Testo, chiave pri),
    Descrizione (Testo).

    Relazioni:
    ListaCategorie.NomeCategoria uno a molti con ListaArticoli.NomeCategoria.

    Queste sono le liste in gioco e le relazioni. Un articolo può contenere piu categorie e una categoria può essere ritrovata in più articoli.
  • Re: Visualizzare una casella di riepilogo come input per query

    Nella tua esposizione hai dimenticato la relazione uno-a-molti fra Giornali e Articoli.

    Branzi ha scritto:


    Un articolo può contenere piu categorie e una categoria può essere ritrovata in più articoli.
    Se vuoi che accada questo, la relazione fra Articoli e Categorie è molti-a-molti, quindi devi prevedere una tabella di congiunzione fra Articoli e Categorie che chiamerei Articoli-Categorie con i seguenti campi:
    IDAC (Numerazione automatica, chiave primaria)
    IDArticolo (numerico)
    IDCategoria (numerico)

    dovresti eliminare il campo IDCategoria dalla tabella Articoli (tu lo hai chiamato [Nome categoria], il senso univoco è lo stesso) e creare le seguenti relazioni:
    Articoli.IDArticolo uno-a-molti con Articoli-Categorie.IDArticolo
    Categorie.IDCategoria uno-a-molti con Articoli-Categorie.IDCategoria
  • Re: Visualizzare una casella di riepilogo come input per query

    In realtà la relazione uno a molti fra giornale e articoli non me la fa creare e non capisco perchè. Se provo mi da il seguente errore: Nessun indice univoco trovato per il campo della tabella primaria a cui si fa riferimento.

    Allora le evoluzioni sono queste: Sono risucito a creare la casella di riepilogo nella maschera, sono riuscito a fare in modo che mi appaiano scritte le Categorie. Ora però se seleziono una categoria e lancio la macro che richiama la query non trova nulla. Ho come l'impressione che non prenda in input le categorie che seleziono. eppure dentro il campo criteri della query ho messo [Maschere]![MascheraGiornali]![Elencocategoria] (Elencocategoria è il nome che ho dato alla casella di riepilogo). Così dovrebbe avere chiaro il fatto che i dati da prendere arrivano dalla casella di riepilogo. Dove sbaglio?

    P.S.: Ho fatto la tabella intermedia e realizzato la relazione molti a molti suggerita.
  • Re: Visualizzare una casella di riepilogo come input per query

    Branzi ha scritto:


    In realtà la relazione uno a molti fra giornale e articoli non me la fa creare e non capisco perchè. Se provo mi da il seguente errore: Nessun indice univoco trovato per il campo della tabella primaria a cui si fa riferimento.

    Branzi ha scritto:


    ListaGiornali:
    Titolo (Testo),
    Numero (Num aut, chiave pri),
    Anno (Num).

    ListaArticoli:
    Giornale di appartenenza (Testo),
    Titolo (Testo),
    Nome Categoria (Testo),
    ID Articolo (Num aut, chiave pri).
    Analizziamo per bene queste due tabelle che DEVONO essere correlate uno-a-molti.
    Tu, cosa intendi per campo Numero? Vedo che il tipo campo è Numero automatico, ma se
    Corriere della sera, n.10
    Il Tempo, n.10
    Il Sole 24 ore, n.77
    TV Sorrisi e canzoni, n.60
    Corriere della sera, 80
    Corriere dello sport, n.77
    Il Sole 24 ore, n.99
    ...questi numeri ripetuti sarebbe impossibile vederli in un tipo di campo Numero automatico. C'è qualcosa che non va. Fai molta attenzione fra distinguere l'univocità del Giornale con la sua Pubblicazione. Dai campi che vedo in ListaGiornali, penso sia più corretta chiamarla Pubblicazioni, mentre una tabella di livello superiore Giornali, dovrebbe avere i Giornali.Titolo UNIVOCO. Potresti quindi correlare Giornali uno-a-molti con Pubblicazioni e poi Pubblicazioni uno-a-molti con Articoli. In conseguenza di questa ulteriore nuova considerazione, direi che il campo Data (che avevo messo in tabella Articoli), sarebbe opportuno metterlo in Pubblicazioni. Mi raccomando la corerenza di ogni chiave primaria rispetto al suo corrispettivo campo di arrivo (chiave esterna).
    Scusa se stiamo facendo tutto questo lavoro preparatorio, ma sono convinto che, se assestiamo tutto per bene, anche le tue successive domande avranno risposte più rapide e coerenti.
  • Re: Visualizzare una casella di riepilogo come input per query

    Non ti scusare Osvaldo, non ho problemi, anzi questi passaggi mi aiutano a capire. Rispondo alla tua domanda su cosa intendo per campo Numero: è un numero che mi identifica il giornale, non è collegato con il numero effettivo stampato sul giornale come nel tuo esempio Corriere della sera, n.10. Per questo è numerazione automatica, perchè ogni volta che inserisco un giornale nuovo Access gli deve assegnare un valore univoco che mi permette di capire l'ordine di inserimento dei giornali.
    Colgo l'occasione per chiederti una cosa che tutt'ora non ho ben capito, non rimanere scioccato dalla mia poca conoscenza di Access ma è poco che lo sto usando. A cosa mi serve la relazione tra due tabelle? Cosa mi cambia nel db se due tabelle sono relazionate oppure no? Perchè la relazione con integrità referenziale si applica con più difficoltà di quella senza?
    Grazie dell'aiuto.
  • Re: Visualizzare una casella di riepilogo come input per query

    Branzi ha scritto:


    Colgo l'occasione per chiederti una cosa che tutt'ora non ho ben capito, non rimanere scioccato dalla mia poca conoscenza di Access ma è poco che lo sto usando.
    OK, qualcosa l'avevo intuita. Procediamo piano piano, passo passo e poi vedrai tutto volare ad alta quota.

    Branzi ha scritto:


    A cosa mi serve la relazione tra due tabelle? Cosa mi cambia nel db se due tabelle sono relazionate oppure no?
    Le relazioni sono l'anima di Access. Le Tabelle sono il primo passo indispensabile (se no i dati dove andiamo a metterli?). Dopo di che, occorre fare una analisi di ciò che andiamo a inserire. Quando abbiamo la sensazione che alcuni valori di campi si ripeteranno inesorabilmente, vale la pena costruire una tabella di livello superiore (madre) da relazionare con quella figlia mediante una relazione uno-a-molti. Es.: Tu vuoi avere una lista di tutti gli Artcoli di tutta la tua collezione di Giornali. Se volessi archiviare solo nella tabella Articoli, saresti costretta ad avere un campo Giornale che si ripete-ripete-ripete tante volte. E per te utente, vale la pena di stare a digitare sempre "Il Sole 24 ore" con il rischio che qualche volta digiti male? Ecco che nasce l'esigenza di creare una tabella Giornali a monte da relazionare con Articoli...vabbè ma cosa cambia? diresti tu! I vantaggi li scoprirai dopo, quando sfrutterai maschere/sottomaschere...ecc...il discorso si apre su molti fronti, ma occorre non sottovalutare anche un altro importantissimo fattore. Access lavora molto meglio e più velocemente se sfrutta al meglio una organizzazione ottimale di tabelle correlate. Ti consiglio di studiare bene questo aspetto. Capisco che gli esempi che si leggono nei manuali poco si assomigliano ai campi del tuo database autocostruito...però cerca di cogliere/studiare bene la questione relazioni.

    Branzi ha scritto:


    Perchè la relazione con integrità referenziale si applica con più difficoltà di quella senza?
    Se hai trovato difficoltà in questo senso, vuol dire che è mancato qualcosa di coerente nell'assetto campi. Purtroppo può accadere più facilmente quando hai già inserito dati e ti sei accorto dopo che occorre creare altre tabelle da relazionare, magari proprio per quel problema di falsa digitazione che ti segnalavo prima.
    Ad ogni modo, si impara sbagliando. Se hai l'accortezza di creare prima tutte le tabelle con le corrette relazioni, anche la proprietà "Applica integrità referenziale" salterà fuori facilmente.

    Branzi ha scritto:


    Rispondo alla tua domanda su cosa intendo per campo Numero: è un numero che mi identifica il giornale, non è collegato con il numero effettivo stampato sul giornale come nel tuo esempio Corriere della sera, n.10. Per questo è numerazione automatica, perchè ogni volta che inserisco un giornale nuovo Access gli deve assegnare un valore univoco che mi permette di capire l'ordine di inserimento dei giornali.
    Allora avrebbe più senso chiamarlo IDGiornale...anzi IDPubblicazione se quella tabella dovesse cambiare nome.
    Invece un campo Numero, ma di tipo numerico (da digitare manualmente) nella tabella Pubblicazioni, avrebbe senso per dare univocià alla coppia NomeGiornale/Numero
  • Re: Visualizzare una casella di riepilogo come input per query

    Ok quindi la cosa più naturale è quella di fare una tabella Giornali con i campi: NomeGiornale, DataPubbl, IDGiornale; una tabella Articoli con i campi: NomeArticolo, Tipologia, Descrizione. Ora, in un progetto del DB corretto come dovrei relazionare le due tabelle? Nell'esempio che ho appena fatto non potrei, dato che la tabella Articoli non ha campi relazionabili con quella Giornali. Dovrei creare il campo NomeGiornale anche nella tabella Articoli. In questo modo potrei fare una relazione con integrità referenziale uno a uno tra il campo di una tabella e quello dell'altra.
    Funziona così?

    In tutto questo continuo a non trovare la motivazione per cui la selezione degli articoli effettuata nella casella di riepilogo presente nella mia MascheraGiornali non riesca ad essere passata alla query. Quando gli dico di effettuare la ricerca avendo selezionato determinati articoli lui mi restituisce una tabella vuota, ma la query la esegue.
Devi accedere o registrarti per scrivere nel forum
20 risposte