Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

di il
14 risposte

Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

Ciao.

Qualcuno riesce a darmi la soluzione al seguente problema?

Ho una Maschera Madre chiamata "Eventi" con una sottomaschera "IngaggioArtisti"

La maschera Madre "Eventi", tramite pulsante su click, dovrebbe aprire una terza maschera, "AltriCostiEvento" collegata dall'ID_Evento, e posizionarsi su nuovo record ed inserire, nel campo ID_Evento, l'omonimo ID_Evento prelevato dalla maschera Madre.

a titolo esemplificativo, ma non funziona:
DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "Eventi.ID_Evento=" & Me.ID_EventoCbo

Grazie mille

14 Risposte

  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    Potresti usare OpenArgs.

    Serve a passare un argomento di qualsiasi natura, una stringa o un dato numerico alla maschera che stai aprendo.
    Nel tuo caso potresti passare l'ID_Evento.

    DoCmd.OpenForm FormName:="AltriCostiEventi", View:=acNormal, DataMode:=acFormAdd, OpenArgs:=Me.ID_EventoCbo

    Nella maschera che apri, nell'evento Load, leggi il contenuto della variabile OpenArgs e la assegni al campo che va valorizzato con l'ID_Evento

    Private Sub Form_Load()
        Dim ID As Long
        ID = OpenArgs
        TuoCampoID.Value = ID
    End Sub

    TheTruster

  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    17/12/2025 - JoseTeck ha scritto:

    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "Eventi.ID_Evento=" & Me.ID_EventoCbo

    La sintassi corretta è

    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "ID_EventoCbo = " & Me!ID_Evento

    ...non conosciamo i nomi esatti dei controlli delle due maschere. A (mio) rigor di logica ID_Evento di Eventi non può essere una combo (per lo meno proprio non me l'aspetto)...lo chiamerei quindi ID_Evento. Mentre nella maschera AltriCostiEventi ci può stare la combo...quindi possiamo nominarla ID_EventoCbo. Nella mia sintassi ho messo nomi coerenti secondo quest'ultima analisi. Analizzando attentamente l'ultimo argomento della sintassi (si tratta della CondizioneWHERE), all'estrema sinistra ci va il campo di arrivo, mentre all'estrema destra Me!CampoPartenza, cioè quello che sta nella maschera principale.

    A scanzo di equivoci, se la maschera AltriCostiEventi la usi solo se collegata a Eventi, ti consiglio di impostare al campo ID_EventoCbo
    Valore predefinito: [Maschere]![Eventi]![IDEvento]

  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    17/12/2025 - JoseTeck ha scritto:

    Ciao.

    Qualcuno riesce a darmi la soluzione al seguente problema?

    Ho una Maschera Madre chiamata "Eventi" con una sottomaschera "IngaggioArtisti"

    La maschera Madre "Eventi", tramite pulsante su click, dovrebbe aprire una terza maschera, "AltriCostiEvento" collegata dall'ID_Evento, e posizionarsi su nuovo record ed inserire, nel campo ID_Evento, l'omonimo ID_Evento prelevato dalla maschera Madre.

    a titolo esemplificativo, ma non funziona:
    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "Eventi.ID_Evento=" & Me.ID_EventoCbo

    Grazie mille

    Attenzione ad una cosa... i suggerimenti che ti sono stati dati sono corretti come sintassi e metodo, ma danno per ASSUNTO giustamente che il record della Maschera Madre, quindi Lato(1) della eventuale relazione, sia già stato salvato altrimenti ovviamente NON FUNZIONA in quanto l'ID(PK) non è ancora stata generata.

    Quindi prima di eseguire l'OPENFORM, devi forzare il salvataggio del Record corrente, se questo è NUOVO:

    If Me.NewRecord Then DoCmd.RunCommand acCmdSaveRecord
    DoCmd.OpenForm FormName:="AltriCostiEventi", View:=acNormal, DataMode:=acFormAdd, OpenArgs:=Me.ID_EventoCbo
  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    17/12/2025 - TheTruster ha scritto:

    Potresti usare OpenArgs.

    Serve a passare un argomento di qualsiasi natura, una stringa o un dato numerico alla maschera che stai aprendo.
    Nel tuo caso potresti passare l'ID_Evento.

    DoCmd.OpenForm FormName:="AltriCostiEventi", View:=acNormal, DataMode:=acFormAdd, OpenArgs:=Me.ID_EventoCbo

    Nella maschera che apri, nell'evento Load, leggi il contenuto della variabile OpenArgs e la assegni al campo che va valorizzato con l'ID_Evento

    Private Sub Form_Load()
        Dim ID As Long
        ID = OpenArgs
        TuoCampoID.Value = ID
    End Sub

    TheTruster Intanto Grazie.

    Ho seguito il tuo consiglio, scrivendo l'istruzione sul Form_Load.

    Ho dovuto inserire il controllo If(IsNull) come segue, ma non cambia il risultato.

    L'errore che da sempre è sempre
    "Errore di Run-Time 424 - Necessario Oggetto"

    Il campo di destinazione rimane NULLO!

    Private Sub Form_Load()
    Dim ID As Long
    ID = Forms!M_Eventi!ID_Evento
       If (IsNull([IdEvCbo])) Then
           IdEvCbo.Value = ID
       End If
    End Sub 
  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    18/12/2025 - OsvaldoLaviosa ha scritto:

    17/12/2025 - JoseTeck ha scritto:

    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "Eventi.ID_Evento=" & Me.ID_EventoCbo

    La sintassi corretta è

    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "ID_EventoCbo = " & Me!ID_Evento

    ...non conosciamo i nomi esatti dei controlli delle due maschere. A (mio) rigor di logica ID_Evento di Eventi non può essere una combo (per lo meno proprio non me l'aspetto)...lo chiamerei quindi ID_Evento. Mentre nella maschera AltriCostiEventi ci può stare la combo...quindi possiamo nominarla ID_EventoCbo. Nella mia sintassi ho messo nomi coerenti secondo quest'ultima analisi. Analizzando attentamente l'ultimo argomento della sintassi (si tratta della CondizioneWHERE), all'estrema sinistra ci va il campo di arrivo, mentre all'estrema destra Me!CampoPartenza, cioè quello che sta nella maschera principale.

    A scanzo di equivoci, se la maschera AltriCostiEventi la usi solo se collegata a Eventi, ti consiglio di impostare al campo ID_EventoCbo
    Valore predefinito: [Maschere]![Eventi]![IDEvento]

    18/12/2025 - @Alex ha scritto:

    17/12/2025 - JoseTeck ha scritto:

    Ciao.

    Qualcuno riesce a darmi la soluzione al seguente problema?

    Ho una Maschera Madre chiamata "Eventi" con una sottomaschera "IngaggioArtisti"

    La maschera Madre "Eventi", tramite pulsante su click, dovrebbe aprire una terza maschera, "AltriCostiEvento" collegata dall'ID_Evento, e posizionarsi su nuovo record ed inserire, nel campo ID_Evento, l'omonimo ID_Evento prelevato dalla maschera Madre.

    a titolo esemplificativo, ma non funziona:
    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "Eventi.ID_Evento=" & Me.ID_EventoCbo

    Grazie mille

    Attenzione ad una cosa... i suggerimenti che ti sono stati dati sono corretti come sintassi e metodo, ma danno per ASSUNTO giustamente che il record della Maschera Madre, quindi Lato(1) della eventuale relazione, sia già stato salvato altrimenti ovviamente NON FUNZIONA in quanto l'ID(PK) non è ancora stata generata.

    Quindi prima di eseguire l'OPENFORM, devi forzare il salvataggio del Record corrente, se questo è NUOVO:

    If Me.NewRecord Then DoCmd.RunCommand acCmdSaveRecord
    DoCmd.OpenForm FormName:="AltriCostiEventi", View:=acNormal, DataMode:=acFormAdd, OpenArgs:=Me.ID_EventoCbo

    18/12/2025 - OsvaldoLaviosa ha scritto:

    17/12/2025 - JoseTeck ha scritto:

    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "Eventi.ID_Evento=" & Me.ID_EventoCbo

    La sintassi corretta è

    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "ID_EventoCbo = " & Me!ID_Evento

    ...non conosciamo i nomi esatti dei controlli delle due maschere. A (mio) rigor di logica ID_Evento di Eventi non può essere una combo (per lo meno proprio non me l'aspetto)...lo chiamerei quindi ID_Evento. Mentre nella maschera AltriCostiEventi ci può stare la combo...quindi possiamo nominarla ID_EventoCbo. Nella mia sintassi ho messo nomi coerenti secondo quest'ultima analisi. Analizzando attentamente l'ultimo argomento della sintassi (si tratta della CondizioneWHERE), all'estrema sinistra ci va il campo di arrivo, mentre all'estrema destra Me!CampoPartenza, cioè quello che sta nella maschera principale.

    A scanzo di equivoci, se la maschera AltriCostiEventi la usi solo se collegata a Eventi, ti consiglio di impostare al campo ID_EventoCbo
    Valore predefinito: [Maschere]![Eventi]![IDEvento]

    Grazie OsvaldoLaviosa.
    Si la sequenza è corretta.


    Gli abbinamenti campi combo box sono i seguenti:

    Machera "Eventi" - Campo ID_Evento accolto nella Combo box "ID_EventoCbo"
    Machera “AltriCostiEventi” - Campo “Eventi.ID_Evento” accolto nella combo box  “IdEvCbo”.

    Purtroppo non funziona ed anche impostando l'ID nel Valore Predefinito della combo box  “IdEvCbo”, il risultato non cambia.

  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    18/12/2025 - OsvaldoLaviosa ha scritto:

    17/12/2025 - JoseTeck ha scritto:

    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "Eventi.ID_Evento=" & Me.ID_EventoCbo

    La sintassi corretta è

    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "ID_EventoCbo = " & Me!ID_Evento

    ...non conosciamo i nomi esatti dei controlli delle due maschere. A (mio) rigor di logica ID_Evento di Eventi non può essere una combo (per lo meno proprio non me l'aspetto)...lo chiamerei quindi ID_Evento. Mentre nella maschera AltriCostiEventi ci può stare la combo...quindi possiamo nominarla ID_EventoCbo. Nella mia sintassi ho messo nomi coerenti secondo quest'ultima analisi. Analizzando attentamente l'ultimo argomento della sintassi (si tratta della CondizioneWHERE), all'estrema sinistra ci va il campo di arrivo, mentre all'estrema destra Me!CampoPartenza, cioè quello che sta nella maschera principale.

    A scanzo di equivoci, se la maschera AltriCostiEventi la usi solo se collegata a Eventi, ti consiglio di impostare al campo ID_EventoCbo
    Valore predefinito: [Maschere]![Eventi]![IDEvento]

    18/12/2025 - @Alex ha scritto:

    17/12/2025 - JoseTeck ha scritto:

    Ciao.

    Qualcuno riesce a darmi la soluzione al seguente problema?

    Ho una Maschera Madre chiamata "Eventi" con una sottomaschera "IngaggioArtisti"

    La maschera Madre "Eventi", tramite pulsante su click, dovrebbe aprire una terza maschera, "AltriCostiEvento" collegata dall'ID_Evento, e posizionarsi su nuovo record ed inserire, nel campo ID_Evento, l'omonimo ID_Evento prelevato dalla maschera Madre.

    a titolo esemplificativo, ma non funziona:
    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "Eventi.ID_Evento=" & Me.ID_EventoCbo

    Grazie mille

    Attenzione ad una cosa... i suggerimenti che ti sono stati dati sono corretti come sintassi e metodo, ma danno per ASSUNTO giustamente che il record della Maschera Madre, quindi Lato(1) della eventuale relazione, sia già stato salvato altrimenti ovviamente NON FUNZIONA in quanto l'ID(PK) non è ancora stata generata.

    Quindi prima di eseguire l'OPENFORM, devi forzare il salvataggio del Record corrente, se questo è NUOVO:

    If Me.NewRecord Then DoCmd.RunCommand acCmdSaveRecord
    DoCmd.OpenForm FormName:="AltriCostiEventi", View:=acNormal, DataMode:=acFormAdd, OpenArgs:=Me.ID_EventoCbo

    18/12/2025 - OsvaldoLaviosa ha scritto:

    17/12/2025 - JoseTeck ha scritto:

    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "Eventi.ID_Evento=" & Me.ID_EventoCbo

    La sintassi corretta è

    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "ID_EventoCbo = " & Me!ID_Evento

    ...non conosciamo i nomi esatti dei controlli delle due maschere. A (mio) rigor di logica ID_Evento di Eventi non può essere una combo (per lo meno proprio non me l'aspetto)...lo chiamerei quindi ID_Evento. Mentre nella maschera AltriCostiEventi ci può stare la combo...quindi possiamo nominarla ID_EventoCbo. Nella mia sintassi ho messo nomi coerenti secondo quest'ultima analisi. Analizzando attentamente l'ultimo argomento della sintassi (si tratta della CondizioneWHERE), all'estrema sinistra ci va il campo di arrivo, mentre all'estrema destra Me!CampoPartenza, cioè quello che sta nella maschera principale.

    A scanzo di equivoci, se la maschera AltriCostiEventi la usi solo se collegata a Eventi, ti consiglio di impostare al campo ID_EventoCbo
    Valore predefinito: [Maschere]![Eventi]![IDEvento]

    Grazie OsvaldoLaviosa.
    Si la sequenza è corretta.


    Gli abbinamenti campi combo box sono i seguenti:

    Machera "Eventi" - Campo ID_Evento accolto nella Combo box "ID_EventoCbo"
    Machera “AltriCostiEventi” - Campo “Eventi.ID_Evento” accolto nella combo box  “IdEvCbo”.

    Purtroppo non funziona ed anche impostando l'ID nel Valore Predefinito della combo box  “IdEvCbo”, il risultato non cambia.

  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    18/12/2025 - @Alex ha scritto:

    17/12/2025 - JoseTeck ha scritto:

    Ciao.

    Qualcuno riesce a darmi la soluzione al seguente problema?

    Ho una Maschera Madre chiamata "Eventi" con una sottomaschera "IngaggioArtisti"

    La maschera Madre "Eventi", tramite pulsante su click, dovrebbe aprire una terza maschera, "AltriCostiEvento" collegata dall'ID_Evento, e posizionarsi su nuovo record ed inserire, nel campo ID_Evento, l'omonimo ID_Evento prelevato dalla maschera Madre.

    a titolo esemplificativo, ma non funziona:
    DoCmd.OpenForm "AltriCostiEventi", acNormal, , , acFormAdd, "Eventi.ID_Evento=" & Me.ID_EventoCbo

    Grazie mille

    Attenzione ad una cosa... i suggerimenti che ti sono stati dati sono corretti come sintassi e metodo, ma danno per ASSUNTO giustamente che il record della Maschera Madre, quindi Lato(1) della eventuale relazione, sia già stato salvato altrimenti ovviamente NON FUNZIONA in quanto l'ID(PK) non è ancora stata generata.

    Quindi prima di eseguire l'OPENFORM, devi forzare il salvataggio del Record corrente, se questo è NUOVO:

    If Me.NewRecord Then DoCmd.RunCommand acCmdSaveRecord
    DoCmd.OpenForm FormName:="AltriCostiEventi", View:=acNormal, DataMode:=acFormAdd, OpenArgs:=Me.ID_EventoCbo

    Grazie Alex.
    Il record della maschera madre, è certo che sia registrato!

  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    Hai risolto?

  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    26/12/2025 - Stifone ha scritto:

    Hai risolto?

    Ciao Stifone.

    Purtroppo non ancora.

    Vista la difficoltà, stavo pensando di trasferire il nuovo record direttamente sulla tabella per poi, con una requery, richiamarlo sulla maschera "figlia".

    Onestamente sarebbe più macchinoso, è meno professionale.

  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    Secondo me occorre conoscere dettagliatamente:
    - nomi propri dei campi chiave primaria e chiave esterna di entrambe le tabelle
    - nomi propri dei controlli-campo associati ai campi chiave primaria ed esterna nelle maschere.
    I suggerimenti forniti sono corretti a patto che ci sia coerenza di tutti questi nomi indicati.

  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    26/12/2025 - OsvaldoLaviosa ha scritto:

    Secondo me occorre conoscere dettagliatamente:
    - nomi propri dei campi chiave primaria e chiave esterna di entrambe le tabelle
    - nomi propri dei controlli-campo associati ai campi chiave primaria ed esterna nelle maschere.
    I suggerimenti forniti sono corretti a patto che ci sia coerenza di tutti questi nomi indicati.

    Condivido, ma soprattutto sarebbe un aiuto conoscere il tipo di errore...

    17/12/2025 - JoseTeck ha scritto:

    La maschera Madre "Eventi", tramite pulsante su click, dovrebbe aprire una terza maschera, "AltriCostiEvento" collegata dall'ID_Evento, e posizionarsi su nuovo record ed inserire, nel campo ID_Evento, l'omonimo ID_Evento prelevato dalla maschera Madre.

    17/12/2025 - JoseTeck ha scritto:

    "Eventi.ID_Evento=" & Me.ID_EventoCbo

    La combo è riconosciuta dal nuovo form? Altrimenti prova con una variabile globale o, ancora, ad inserire il record da sql per poi andarlo a modificare al click del pulsante ed ad eliminarlo se gli altri campi sono nulla (una sorta di annulla inserimento).

    Facci sapere che errore ti dà.

  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    Forse se posti un file di esempio, condividendolo tramite esempio filetransfer, sarebbe più semplice capire e aiutarti.

  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    Grazie a tutti per il tentativo.

    Seguo il consiglio di Stifone postando il link per raggiungere il file di esempio.

    Aprendo la maschera M_Eventi e cliccando su pulsante "Altri Costi", dovrà comportarsi come segue:

    1) Se il campo della Maschera Madre "M_Eventi" é = a 0 (Zero), dovrebbe aprire la Maschera Figlia "AltriCostiEventi" su nuovo record acquisendo automaticamente l'ID_Evento nella ComboBox IdEvCbo (PARTE NON FUNZIONANTE)

    2) Se il campo della Maschera Madre "M_Eventi" é <> da 0 (Zero), aprirà  la Maschera Figlia "AltriCostiEventi" sul record contenente lo stesso ID_Evento. (PARTE FUNZIONANTE CORRETTAMENTE)

    Premetto che al momento, su un file copia, ho bypassato il problema con un'altra strategia, che mi piace meno, ma funziona. Ovvero la maschera madre "M_Eventi" , cliccando sul solito pulsante "Altri Costi", apre una copia della M_Eventi, chiamata M_EventiCopia, con all'interno la "sottomaschera AltriCostiEventi".
    Non nego che se risolverò, magari col Vs supporto, l'attuale stallo, tornerei volentieri al progetto originario.


    Link del file di esempio ancora in costruzione https://limewire.com/d/IOyXz#dyBwl1mh9m

  • Re: Trasferire l'ID da maschera Madre, ad ID di altra maschera collegata

    • Eliminare il pulsante AltriCostiEventi, basta quello con la scritta Altri Costi che può gestire sia un nuovo Costo o Modificare uno esistente
    • Rinominare il pulsante con la scritta Altri Costi in GestioneAltriCostiEventi e selezionare [Routine evento] sull'evento Su clic 
    • fare clic sul pulante con i tre puntini per generare l'evento dove scriverai:
    • Private Sub GestioneAltriCostiEventi_Click()
          DoCmd.OpenForm "AltriCostiEventi", , , "ID_Evento = " & Me.ID_EventoCbo
      End Sub
    • Rinominare la maschera Sottomaschera AltriCostiEventI in Sottomaschera AltriCostiEventi
    • Nella maschera AltriCostiEventi 
      • nella scheda Dati e nella proprietà Origine record sostituirai l'attuale Sql con la seguente
      • SELECT Eventi.DataInizioEvento, Eventi.ID_Evento, NomeEvento.NomeEvento FROM NomeEvento INNER JOIN Eventi ON NomeEvento.ID_NomeEvento = Eventi.ID_NomeEvento; 
      • cancellare il controllo IdEvCbo, non serve a niente
      • nella Sottomaschera AltriCostiEventi 
        • nella scheda Dati e nelle proprietà Collega campi Master e Collega campi secondari scrivere ID_Evento
        • cancellare i controlli ID_Evento_Etichetta e ID_Evento, non servono a niente
Devi accedere o registrarti per scrivere nel forum
14 risposte