Sottomaschera: filtrare i valori di un campo in base al valore selezionato in un altro campo

Anonimo
2015-07-31T08:02:38+00:00

Buongiorno, apro un thread nuovo per l'argomento in oggetto di cui vado a spiegare la necessità.

Sempre la stessa maschera con sottomaschera. La maschera riporta i dati generici della campagna pubblicitaria,

la sottomaschera riporta i cartelloni pubblicitari affittati per la campagna.

I campi della sottomaschera sono IDAffissioni (campo correlato alla maschera), poi IDFornitore, IDManufatto, IDTipoAffitto, IDNegozio ecc. ecc.

Vorrei che, in base all'IDFornitore selezionato (tramite casella combinata) il campo IDManufatto mostrasse solo i manufatti relativi a quel determinato fornitore. E' possibile?

Spero in un vostro aiuto...

fausto.

Microsoft 365 e Office | Access | 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
Anonimo
2015-08-11T09:52:17+00:00

ciao Fausto,

 Me.txtSupplier = aSupplier(1)

Provo, selezioni IDProdotto e NomeProdotto (non capisco però le lettere p. e a., le dovrei utilizzare anche io??) dalla tabella "articoli" che è relazionata alla tabella prodotti tramite i campi A.IDProdotto e P.IDProdotto e filtri dove l'IDfornitore è uguale

a quello riportato da aSupplier in txtSupplier... è così??

p e a sono alias, usati per identificare tabelle e campi in Sql.

è pratico l'utlizzo degli alias per abbreviarne il nome, fondamentali nei campi calcolati per identificarli.

Rendono la risoluzione della query, relazionale.

Puoi utilizzare il nome per esteso della tabella oppure semplicemente il nome del campo, è preferibile sempre però identificare il campo con il nome della tabella o alias che sia.

il ragionamento che esponi circa la query è corretto, però nella textbox visualizzo il nome per esteso del fornitore, nella clausula where utizzo invece l'idfornitore.

strSQL = "SELECT IDCartellone, Ubicazione " & _

         "FROM tblCartelloni "where IDFornitore=" & aSupplier(0)

Me.lstCartelloni.RowSource = strSQL

Me.txtSupplier = aSupplier(1)

ora non ricordo la struttura del tuo db per verificare la validità dell'sql...( ho il vizio di dimenticare facilmente... :-(( ), ma la stringa sql per come l'hai impostata è spezzata nella concatenazione prova così :

"SELECT IDCartellone, Ubicazione " & _

         "FROM tblCartelloni where IDFornitore=" & aSupplier(0)

o così :

"SELECT IDCartellone, Ubicazione " & _

         "FROM tblCartelloni " & _

         "where IDFornitore=" & aSupplier(0)

ciao, Sandro.

La risposta è stata utile?

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2015-07-31T20:24:44+00:00

ciao Fausto,

modifica l'origine riga del controllo idmanufatto così :

PARAMETERS IDFornitore Long;

SELECT tblManufatti.IDManufatto,

       tblManufatti.Cimasa,

       tblManufatti.IDFornitore

FROM

       tblManufatti

WHERE

      tblManufatti.IDFornitore=[IDFornitore];

e su evento dopo aggiornamento del controllo idfornitore:

me.idmanufatto.requery.

imposta tre colonne per il numero di colonne della combo Idmanufatto e la larghezza 3;3;3

non so se già erano impostate così, ma modificando velocemente.....le ho impostate come sopra.

Non ho guardato bene il tuo db ma forse qualcosina a livello di normalizzazione da rivedre magari c'è...

ciao :-)

Sandro.

La risposta è stata utile?

0 commenti Nessun commento

37 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-08-06T10:03:22+00:00

    ciao Fausto.

    per completara la risposta precendente, piazza un me.idmanufatto.requery anche su evento current della sottomaschera.

    Per il nuovo quesito se ho colto la tua domanda.

    Prova a impostare un solo in elenco si delle combo boxes e su errore facciamo apparire un messaggio un po' più chiaro di quello che access molto antipaticamente fa apparire :

    Private Sub Form_Error(DataErr As Integer, Response As Integer)

    If DataErr = 2237 Then

        Response = acDataErrContinue

        MsgBox "quanto stai cercando di inserire non è in elenco!", vbCritical, "Attezione"

        responde = acDataErrDisplay

    End If

    End Sub

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-08-06T09:47:27+00:00

    Buongiorno Sandro, sono andato avanti con lo sviluppo del database. I tuoi suggerimenti sono stati preziosi e adesso sembra funzionare tutto bene. Quello che mi manca però credo sia una "gestione dei controlli". Non so se il termine sia corretto. In sintesi nella maschera e nella sottomaschera vorrei evitare che l'operatore/trice possano inserire dati sbagliati (testo piuttosto che numerico) o fare errori di digitazione.... Devo lavorare sulle proprietà oppure si deve fare qualcosa in vba??

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-08-01T08:45:11+00:00

    ciao Fausto,

    non essendo oggetto del 3d non ho, volutamente, approfondito troppo...altrimenti andiamo OT e facciamo un bel minestrone...

    in caso prova ad aprire un  nuovo 3d sul tema, se sono in grado provo a partecipare.

    Prego e buon we a te.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento