Mostra campi solo per certi valori in casella combinata

di
Anonimizzato14593
il
4 risposte

Mostra campi solo per certi valori in casella combinata

Salve! Sono un utilizzatore occasionale di Access con discrete basi teoriche di DB relazionali, ma poca pratica. Sto preparando un db dove registrare i progetti seguiti dalla società dove lavoro.

Per ciascun progetto mi è necessario identificare ciascuna "Categoria opere" toccata dal progetto (in tutto sono quasi 50 categorie possibili) e registrare l'importo dei lavori per ciascuna categoria toccata dal progetto (in maniera da poter fare ricerche per trovare progetti che hanno un almeno un importo X per la categoria Y).

Sto quindi cercando di costruire una maschera per l'inserimento dei dati relativi ai progetti che mostri le caselle per registrare gli importi solamente per le categorie rilevanti in ciascun singolo progetto.
Visto il gran numero di categorie possibili, ho preparato una casella combinata che va a pescare i nomi delle categorie dalla tabella "CategorieOpere" (dove ho registrato gli ID delle categorie e il loro nome per esteso). Questa casella ammette valori multipli.

Ora, vorrei ottenere che nella maschera apparissero i campi per inserire l'importo corrispondente ai lavori solamente per le categorie di opere selezionate nella precedente casella.

Ho cercato a lungo nelle discussioni già presenti nel forum ma quello che sono riuscito a trovare finora non sembra risolvere il mio problema. Per esempio, sulla base di quanto visto nel forum (es. qui https://www.iprogrammatori.it/forum-programmazione/access/formattazione-condizionale-controlli-maschera-t14693.html, qui
https://www.iprogrammatori.it/forum-programmazione/access/nascondere-campi-pulsanti-una-maschera-t20164.html e qui https://www.iprogrammatori.it/forum-programmazione/access/per-negozio-t17598.html#p8498654) ho fatto cose di questo tipo:

Private Sub Form_Current()
   Me![Categoria opere].SetFocus
   Me![Importo OG1].Locked = (Me![Categoria opere].Value <> "OG1")
End Sub
e

Private Sub Form_Current()
   Me![Categoria opere].SetFocus
   Me![Importo OG1].Locked = (Not Me![Categoria opere].Value = "OG1")
End Sub
Più numerose altre varianti, che come queste non funzionano.
L'avviso che mi dà Access è: Errore di run-time '13' - Tipo non corrispondente.

Non riesco a capire se è solo un problema di sintassi (che cerco di comporre prendendo qui e là dagli esempi che trovo in rete) oppure - che ne so - magari non è possibile richiedere questo controllo su una casella combinata.
La mia idea, una volta trovato come operare questo comportamento condizionale nella maschera, è di replicarlo per tutti i campi "Importo OGY" - o c'è qualche maniera più intelligente di fare questa cosa?

Chiedo umilmente lumi a chi ne sa di più e di seguito fornisco maggiori informazioni su come ho cosruito finora il DB.

-Tabelle-
CategorieOpere:
ID (in forma OG1, OG2 ecc...)
Nome esteso (testo)

Progetti:
Titolo (testo)
Descrizione (memo)
...
Categoria opere (realizzato come Ricerca guidata sulla tabella CategorieOpere, lasciando in vista l'ID)
Importo OG1 (valuta)
Importo OG2
...

Lavoro con MS Access 2010.
Grazie mille!
Marco

PS: nel comporre questo messaggio mi sono accorto che il link al regolmaneto (sotto il riquadro di composizione) non funziona.

4 Risposte

  • Re: Mostra campi solo per certi valori in casella combinata

    Non sono sicuro di aver afferrato tutto il discorso, ma ho la sensazione che le tabelle Progetti e Categorie siano in relazione molti-a-molti e che tu debba costruire una tabella di congiunzione X con i seguenti campi
    IDX
    IDProgetto
    IDCategoria
    Importo

    Potresti raccontare un po' meglio di cosa parla di tuo database? È un database per ingegneri, quindi edilizio? Progetti? Cosa sono questi progetti?
  • Re: Mostra campi solo per certi valori in casella combinata

    Sì, giusto: le due tabelle sono in relazione molti a molti.

    L'oggetto principale che devo descrivere è il Progetto. Dato un progetto X (es. progettazione preliminare dell'edificio ABC) devo poterlo descrivere in funzione delle categorie che copre. Le categorie (OG1, OG2 ecc) sono previste dalla normativa italiana e caratterizzano il tipo particolare di lavori che si va a realizzare nel costruire quell'edificio.

    La quota generale del costo di costruzione dell'edificio (metti 100) infatti si scompone nelle sotto-quote relative alle singole categorie (es: 70 per OG1 - edilizia in generale - e 30 per OG9 - impianti per produzione energia).

    Quindi nel DB vorrei registrare che il progetto X ha 'Categoria opere' OG1 e OG9, e poi anche che il progetto X ha 'Importo OG1' 70 e 'Importo OG9' 30.
    Il mio obiettivo è poter interrogare il DB per trovare i Progetti che hanno questo o quell'insieme di categorie, ma anche per trovare quelli che in una o più categorie hanno almeno un certo importo.

    Visto l'alto numero di categorie da trattare, pensavo di alleggerire la maschera (ed evitare errori d'inserimento) rendendo visibili solo i campi 'Importo OGn' per le varie categorie di opere che entrano in gioco per quel Progetto (nell'esempio OG1 e OG9).

    Quindi il problema che mi pongo per ora è come fare perché, al momento di inserire i dati di un progetto, la maschera reagisca alla valorizzazione del campo 'Categoria opere' facendo apparire solo i campi 'Importo OGn' per cui quel progetto ha effettivamente un importo da registrare.

    EDIT: aggiungo che la tabella 'CategorieOpere' mi serve solo come contenitore della lista delle categorie, una lista fissa che avrei potuto realizzare anche come elenco di valori predefiniti, ma ho reso come tabella per poter presentare due colonne nel corrispondente campo di selezione delle categorie nella maschera (una colonna che mostra l'ID "istituzionale" della categoria e un'altra che mi ricordi cosa comprende quella categoria) per facilitare l'inserimento dati.
  • Re: Mostra campi solo per certi valori in casella combinata

    marcoromarco ha scritto:


    Sì, giusto: le due tabelle sono in relazione molti a molti.

    L'oggetto principale che devo descrivere è il Progetto. Dato un progetto X (es. progettazione preliminare dell'edificio ABC) devo poterlo descrivere in funzione delle categorie che copre. Le categorie (OG1, OG2 ecc) sono previste dalla normativa italiana e caratterizzano il tipo particolare di lavori che si va a realizzare nel costruire quell'edificio.

    La quota generale del costo di costruzione dell'edificio (metti 100) infatti si scompone nelle sotto-quote relative alle singole categorie (es: 70 per OG1 - edilizia in generale - e 30 per OG9 - impianti per produzione energia).
    Confermo che la tabella di congiunzione che chiamerei Progetti-Categorie deve avere i campi
    IDPC (contatore, chiave primaria)
    IDProgetto (numerico)
    IDCategoria (numerico)
    Importo (valuta)
    2 relazioni uno-a-molti fra Progetti--->Progetti-Categorie e Categorie--->Progetti-Categorie sfruttando i relativi campi ID.

    marcoromarco ha scritto:


    Il mio obiettivo è poter interrogare il DB per trovare i Progetti che hanno questo o quell'insieme di categorie, ma anche per trovare quelli che in una o più categorie hanno almeno un certo importo.
    Ti serve una query dove filtri la categoria e dove imponi >100 sul campo Importo.

    Quello che hai scritto dopo non l'ho capito.
  • Re: Mostra campi solo per certi valori in casella combinata

    OsvaldoLaviosa ha scritto:


    Quello che hai scritto dopo non l'ho capito
    La cosa che non sono riuscito a spiegarti era quella dove vedevo il mio problema. Siccome vengo da tutt'altro paradigma di modellazione dati (ontologie) ero convinto che gli importi dovessero essere attributi dei Progetti...

    Invece, insistendo a dirmi della tabella di congiunzione mi hai fatto guardare le cose da un altro punto di vista e ho trovato che Access fa automaticamente quello che volevo ottenere io.

    Quindi, grazie!
Devi accedere o registrarti per scrivere nel forum
4 risposte