Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Aprire sottomaschera con record filtrato in base a un valore di una altra maschera

668 views
Skip to first unread message

vito.fa...@pietrodabano.it

unread,
Jan 13, 2020, 10:54:41 AM1/13/20
to
salve,
da una maschera(con sottomaschera) lancio con un pulsante di comando
l'apertura di una altra maschera (con sottomaschera).

Vorrei che la sottomaschera di apertura si aprisse con filtro in base a record nella maschera di partenza.

ho provato con questo codice ma non funziona (mi apre la maschera senza filtro)

COMANDO CLICK MASCHERA INIZIALE:

DoCmd.OpenForm "magazzino_carico_testata", acNormal, , "ID = " & Me.id_carico, acFormEdit, , 3

CODICE EVENTO OPEN/LOAD della maschera aperta con comando
Private Sub Form_Load()

If Me.OpenArgs = 3 Then

Dim lng_prodotto As Long
lng_prodotto = Forms!ordine!ordini_dettaglio.Form!ID.Value

Forms!magazzino_carico_testata!Sottomaschera_magazzino_carico_dettaglio.Form.FilterOn = True
Forms!magazzino_carico_testata!Sottomaschera_magazzino_carico_dettaglio.Form.Filter = "id_D_ordine =" & lng_prodotto


End If

grazie

@Alex

unread,
Jan 13, 2020, 11:07:10 AM1/13/20
to
Qualche cosa di molto strano c'è in quello che hai scritto, come LOGICA.
Partiamo dal Parametro passato come OPENARGS che non si capisce a cosa lo usi... ma passiamo oltre...

Se la Maschera e la SottoMaschera sono legate da Campo Master/Secondario... puoi spiegarci perchè vai a forzare il Filtro con la stessa condizione che lega la Relazione MasterDetail...? Cosa ti aspetti di vedere che già non sia quello che vedi...?

@Alex

vito.fa...@pietrodabano.it

unread,
Jan 13, 2020, 11:33:26 AM1/13/20
to
uso il parametro openargs perché la maschera la apro da altri posti, quindi mi serve per far partire il codice solo se se la apro da una certa maschera.

La condizione non è la stessa purtroppo. Mi spiego con uno schemino
(premetto ordini e carichi sono uguali)

MASCHERA INIZIALE ORDINE/DETTAGLIO
ordine 50
albicocche id_ordine 50 id_dettaglio 3245
farina id_ordine 50 id_dettaglio 3246
zucchero id_ordine 50 id_dettaglio 3247

MASCHERA DA FILTRARE CARICO/DETTAGLIO
carico 40

albicocche id_carico 40 id_dettaglio 3245
farina id_carico 40 id_dettaglio 3246
zucchero id_carico 40 id_dettaglio 3247

ora, se mi posiziono su ordine/dettaglio "farina" e faccio click su pulsante
vorrei aprire la maschera carico/dettaglio con questo filtro:

farina id_carico 40 id_dettaglio 3246


vito.fa...@pietrodabano.it

unread,
Jan 13, 2020, 11:42:18 AM1/13/20
to
dimenticavo....il punto di comunione tra le due maschere/sottomaschere è id_dettaglio

@Alex

unread,
Jan 13, 2020, 11:55:24 AM1/13/20
to
Se il Campo Comunione è [id_dettaglio] non torna questo:
DoCmd.OpenForm "magazzino_carico_testata", acNormal, , "ID = " & Me.id_carico, acFormEdit, , 3

ovvero dovrai passare come WHERE il Criterio basato su [id_dettaglio] altrimenti non è come dici perchè mi aspetto che nella 1° non ci sia un Id_Carico...
Se invece c'è non è che basta CONCATENARE...?

DoCmd.OpenForm "magazzino_carico_testata", acNormal, , "ID = " & Me.id_carico & " AND id_dettaglio=" & me.id_dettaglio, acFormEdit, , 3

P.S. per l'uso di OPENARGS, prova a leggere cosa restituisce CodeContextObject.Name

@Alex

vito.fa...@pietrodabano.it

unread,
Jan 13, 2020, 1:14:12 PM1/13/20
to
Porca miseria è sempre difficile spiegarsi in poche righe,senza dilungarsi e essere magari noiosi. Comq:
non ti torna perché tu non sai che nella tabella ordini ho memorizzato anche l'id del carico abbinato all'ordine. Quindi me.id_carico è l'id del carico corrispettivo. Con la riga
DoCmd.OpenForm "magazzino_carico_testata", acNormal, , "ID = " & Me.id_carico
apro il carico corrispettivo.

Come pure tu non sai che ho copiato nei carichi anche l'ID dei singoli prodotti (ID_D_ordine), quindi sia nei record dettaglio ordini che nei record dettaglio carichi io ho un identificativo uguale.

la tua contatenazione non può funzionare
DoCmd.OpenForm "magazzino_carico_testata", acNormal, , "ID = " & Me.id_carico & " AND id_dettaglio=" & me.id_dettaglio, acFormEdit, , 3

perché gli id_dettaglio si trovano nella sottomaschera.


ho letto del CodeContextObject.Name in un tuo vecchio post
http://forum.masterdrive.it/access-79/access-2003-vba-gestione-info-errori-53350/
in Microsoft
https://docs.microsoft.com/en-us/office/vba/api/access.application.codecontextobject
più o meno ho capito....identifica il nome di un oggetto che ha causato l'errore

@Alex

unread,
Jan 13, 2020, 1:34:16 PM1/13/20
to
No è l'oggetto che chiama l'apertura...

Di fatto non si spalmando le PK ovunque per comodità... non funziona così una struttura NORMALE, intesa come affine alla normalizzazione.

Quindi fatico a razionalizzare la necessità di tutti quei criteri legati a Indici esterni, ma è vero prima di tutto che non vedo la struttura ER quindi non posso esprimere altri concetti.
Sta di fatto che non capisco se il dettaglio sia da applicare solo alla SubForm a questo punto...

Me!NomeSubform.Filter="Id=" & lngValore
Me!NomeSubForm.FilterOn=True

Guarda bene che è alla rovescia di come hai fatto tu.

Qui però mi fermo.
@Alex

vito.fa...@pietrodabano.it

unread,
Jan 13, 2020, 1:43:10 PM1/13/20
to
forse mi sto incartando un poco ma ho fatto uno schema a colori
come immagine se vuoi dare una occhiata

https://ibb.co/Yp2jcQM

@Alex

unread,
Jan 13, 2020, 1:55:33 PM1/13/20
to
Io sono dell'idea che non è adeguatamente normalizzata.
È assurdo avere nella tabella dettagli gli indici di IdCarico ed IdOrdine che hai nella tabella precedente... come è assurdo avere il NOME(Farina), l'unità ingegneristica e le quantità...
Insomma quella tabella a me sembra inutile, oltre che concettualmente errata nella struttura.

@Alex

vito.fa...@pietrodabano.it

unread,
Jan 14, 2020, 12:26:05 AM1/14/20
to
si si lo so che non è il massimo ma a volte non è facile e a volte è le assurdità sono comode, ti chiedo per curiosità:
che sistema avresti usato tu per tenere agganciati ordine e carico tenendo presente che il carico in sostanza è una copia dell'ordine?

un minimo di normalizzazione l'ho fatta,per semplicità tu leggi farina ma vi è id prodotto presente nel listino come pure le misure sono del listino.

ciao e grazie per l'attenzione e le conversazioni
Vito

@Alex

unread,
Jan 14, 2020, 1:42:13 AM1/14/20
to
Quindi quelle che si vedono nell'immagine sono Queries...?
In ogni caso se è una copia dell'Ordine, mi chiedo perchè serva una copia dell'ordine... eventualmente comprendo una TempTable, ma a quel punto non hai la PK differente che non serve ma solo Campi indicizzati di REPLICA della Tabella Madre...

Come ti dicevo non comprendo assolutamente l'esigenza, ma per aprire la Maschera basata su quella tabella devi passare alla WHERE il parametro Id_Dettaglio ovviamente...

@Alex

vito.fa...@pietrodabano.it

unread,
Jan 14, 2020, 11:04:20 AM1/14/20
to
Grazie ok,
ultima cosa poi terminiamo altrimenti ti tengo attaccato a questa questione.
Non sono esperto di regole statali sulla gestione magazzino anzi non ne so nulla.
So che ci devono essere i carichi come registrazione della merce che entra in casa, so che devono essere uguali agli ordini.
Una volta erano cartacei quindi ora in file e quindi tabella-db, ma in una tabella differente? Se sono uguali dove sta la differenza? forse nella intestazione? una la chiamo ordine e l'altra la chiamo carico? Boh. Indagherò a scuola.
Di nuovo grazie infinite. (intanto ci sono riuscito........)
Vito
0 new messages