Condividi tramite

query per una casella combinata in una maschera

Anonimo
2013-11-03T10:56:05+00:00

Buongiorno, mi chiamo Alberto, e intanto vi ringrazio anticipatamente per l'assistenza!

Uso Access 2007 (SP3) per gestire la libreria di casa. Faccio alcune premesse sperando di chiarire meglio il mio problema. Preciso che, se non diversamente specificato, tutti i campi citati sono di tipo "testo".

Ho una tabella tab_libri con un campo categoria e un campo genere. Per il "tipo dati" di questi due campi ho scelto "ricerca guidata..." selezionando rispettivamente i campi cat e gen delle due tabelle tab_categoria e tab_genere (al termine, nella struttura della tab_libri, i campi categoria e genere risultano di tipo "numerico"). Inoltre, le relazioni introdotte sono quelle della fig. 1.

Per intenderci, la categoria è il primo livello Dewey di classificazione (ad es. 100 = Filosofia e Psicologia) mentre il genere è il secondo livello di classificazione (ad es. 170 = Etica). Ci sono 10 categorie e per ogni categoria 9 generi disponibili.

In una maschera, poi, ho usato la procedura guidata per creare due caselle combinate (il cui "nome elemento" è box_cat e box_gen) che prendono i valori dai campi categoria e genere della tab_libri, al fine di mostrare gli elenchi di categoria e genere per mezzo delle seguenti due query:

  1. SELECT tab_categoria.id, tab_categoria.cat FROM tab_categoria;
  2. SELECT tab_genere.id, tab_genere.gen FROM tab_genere;

La cosa funziona (come si vede nelle figg. 2a e 2b) ma ora vorrei che nella maschera - una volta scelta con la 1ª casella combinata una delle 10 categorie - con la 2ª casella combinata venissero mostrati solo i 9 generi di pertinenza. Perché è molto più comodo scegliere da un elenco di 9 voci anziché 90...

Per fare questo ho aggiunto in tab_gen un campo ctrl_cat (la categoria cui il genere si riferisce). Ho poi modificato la query 2) nella seguente:

  1. SELECT tab_genere.id, tab_genere.gen, tab_genere.ctrl_cat FROM tab_genere WHERE (((tab_genere.ctrl_cat)=[Forms]![maschera_tab_libri]![box_cat]));

e nella finestra delle proprietà della box_cat, alla voce "dopo aggiornamento" nella scheda "evento", ho impostato la seguente "routine":

  1. Private Sub box_cat_AfterUpdate()

        box_cat.Requery

    End Sub

Ovviamente :( la cosa non funziona (come si vede in fig. 3) e soprattutto non sono in grado di capire dove stia l'errore. Immagino che sia un problema relativo alla sintassi (ad es. i doppi apici) o al tipo dei dati (testo vs. numerico), o qualcosa del genere... Aggiungo che per la realizzazione di questa funzione ho seguito diverse indicazioni online e ho letto molti interventi nei forum per la risoluzione dei problemi, ma non sono riuscito ad applicare i vari consigli al mio caso.

Attendo fiducioso :)

(fig. 1)

(fig. 2a)

(fig. 2b)

(fig. 3)

Microsoft 365 e Office | Accesso | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2013-11-03T15:58:02+00:00

    1) SELECT tab_categoria.id, tab_categoria.cat FROM tab_categoria;

    La tipica origine dati di una combo box prevede almeno 2 campi (di solito 2), dove il primo è un Id ed il secondo una descrizione.

    Tramite le proprietà della combo si fissa la prima colonna come valore che viene ritornato alla scelta di un elemento. Nel tuo caso viene fissata di fefault nella generazione della combo.

    Con la proprietà ampiezza delle colonne si fissa a 0 per il primo campo (l'Id) in modo che non venga visualizzato nella casella e a xxx l'ampiezza delle ulteriori colonne.

    Alla prossima Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-11-03T17:47:02+00:00

    Ora è tutto chiaro!

    Ecco allora perché, nella procedura di creazione guidata, c'è una casella già spuntata che dice qualcosa del tipo "nascondi colonna chiave (scelta consigliata)"!

    Ed ecco perché facevo confusione tra dati di tipo "testo" (colonna 2) e "numerico" (colonna 1)...

    Grazie di nuovo,

    Alberto.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-11-03T14:45:47+00:00

    È vero, hai ragione. Prima avevo nominato il campo ctrl poi l'ho cambiato in ctrl_cat per capire meglio che si riferisce alla categoria. Ma nel post ho incollato il vecchio screenshot... Colpa mia!

    Detto questo, il mio campo ctrl_cat è di tipo "testo". E qui faccio fatica a capire...

    Mi spiego meglio.

    Nella box_cat io vedo del "testo". Tuttavia essa prende valori dal campo categoria della tab_libri che è di tipo "numerico". Stesso discorso per la box_gen.

    Ma allora, perché in tab_libri.categoria io vedo del testo e non un numero? Va beh...

    Ho fatto come dici tu, ovvero ho cambiato il tipo di dati di ctrl_cat da "testo" a "numerico".

    Ora i valori di quel campo sono gli stessi valori del campo tab_categoria.id.

    Nella maschera funzionava quasi tutto (vedi figg. 4a e 4b, all'apertura della maschera e dopo il clic nella 2ª casella combinata).

    (fig. 4a)

    (fig. 4b)

    C'era un problema di refresh, ovvero: quando operavo sulla 1ª casella combinata scegliendo una categoria diversa (ad es. 300 = Scienze Sociali), nella 2ª casella combinata non vedevo i generi dell'intervallo 310-390. Li vedevo solo chiudendo e riaprendo la maschera.

    Allora sono andato nelle proprietà della box_cat e all'evento "su modifica" ho fatto il requery della box_gen, e finalmente ho risolto!!

    Chissà perché mi ero fissato con l'evento "dopo aggiornamento" che invece non c'entra niente...

    Grazie tante davvero (soprattutto perché è domenica) e un voto utile a seguire (è ovvio).

    Alberto.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-11-03T11:53:38+00:00

    Ciao,

    tu dici:

    3) SELECT tab_genere.id, tab_genere.gen, tab_genere.ctrl_cat FROM tab_genere WHERE (((tab_genere.ctrl_cat)=[Forms]![maschera_tab_libri]![box_cat]));

    il campo  tab_genere.ctrl_cat dovrebbe essere un campo numerico e contenere l'Id della categoria e

    allora sarebbe tutto giusto. Ma non lo vedo rappresentato nelle relazioni.

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento