Sotto maschere parallele

di il
9 risposte

Sotto maschere parallele

Ho una maschera principale "ricette" che contiene due sotto maschere ("preparati1", "preparati2") che puntano alla stessa tabella. "preparati1" è in visualizzazione foglio dati, mentre "preparati2" in visualizzazione maschera. Vorrei che quando seleziono un record dalla prima, la seconda visualizzasse lo stesso record. Ho provato a scrivere il codice che riporto:
Dim Var01 As Integer

Private Sub Form_Current()
Var01 = Me.[ID preparato]
MsgBox Var01
DoCmd.SearchForRecord acDataForm, "ricette.preparati2", acFirst, "[Id preparato] =" & Var01
End Sub
Riesco a impostare la variabile Var01 e ne ho la conferma con il MsgBox, ma poi mi compare il messaggio:
"Errore di run-time '2489':
L'oggetto 'ricette.preparati2' non è aperto."
Potreste darmi un consiglio o indicarmi un link che possa chiarirmi come fare?

grazie

9 Risposte

  • Re: Sotto maschere parallele

    Salve,
    Ho una maschera principale "ricette"
    Su quale tabella poggia questa maschera?
    due sotto maschere ("preparati1", "preparati2") che puntano alla stessa tabella. "preparati1" è in visualizzazione foglio dati, mentre "preparati2" in visualizzazione maschera.
    Quale tabella?...la stessa della maschera "Ricette"?
    Potresti indicare "SOLO" gli Id e i nomi delle Tabelle e la relazione tra queste tabelle?

    Ci dici:
    Riesco a impostare la variabile Var01 e ne ho la conferma con il MsgBox, ma poi mi compare il messaggio:
    Sei sicuro che la dichiarazione di quella variabile sia corretta?
    DoCmd.SearchForRecord acDataForm, "ricette.preparati2", acFirst, "[Id preparato] =" & Var01
    Perchè cerchi il primo record usando "Id preparato" che in quanto "indice" è univoco?
    Vorrei che quando seleziono un record dalla prima
    Perchè hai scelto l'azione "su Current" se prima hai detto che l'azione si sarebbe dovuto scatenare selezionando un record?
    Mah... a me non pare sia urgente stabilire se la maschera sia aperta o meno (comunque non è aperta).
    L'oggetto 'ricette.preparati2' non è aperto."
    Secondo te l'oggetto segnalato dal messaggio cosa sarebbe?

    Senza una risposta a queste domande rendi la vita difficile a chiunque voglia darti una mano.
    Saluti
    Gianni
  • Re: Sotto maschere parallele

    Buongiorno Gianni e grazie.
    ?
    Ho una maschera principale "ricette"
    Su quale tabella poggia questa maschera?
    La maschera "ricette" poggia sulla tabella "ricette",

    ?
    due sotto maschere ("preparati1", "preparati2") che puntano alla stessa tabella. "preparati1" è in visualizzazione foglio dati, mentre "preparati2" in visualizzazione maschera.
    Quale tabella?...la stessa della maschera "Ricette"?
    le due sotto maschere "preparati1", "preparati2", poggiano sulla tabella "preparati", quindi non è la stessa della maschera "Ricette".
    Potresti indicare "SOLO" gli Id e i nomi delle Tabelle e la relazione tra queste tabelle?
    La tabella "ricette" contiene i campi:
    [ID ricetta]
    + altri campi

    La tabella "preparati" contiene i campi:
    [ID preparato]
    + altri campi

    La relazione é:
    campo master [ID ricetta]
    campo secondario [ID preparato]
    per entrambe le sotto maschere

    Riesco a impostare la variabile Var01 e ne ho la conferma con il MsgBox, ma poi mi compare il messaggio:
    Sei sicuro che la dichiarazione di quella variabile sia corretta?
    Sì sono sicuro. Ho inserito la MsgBox proprio per verificare che la variabile sia impostata con il valore numerico di [ID preparato]. Infatti la MsgBox mi visualizza il valore numerico corretto.

    Perchè cerchi il primo record usando "Id preparato" che in quanto "indice" è univoco?
    Da quello che ho capito "acFirst" indica il punto di partenza. In realtà il comando
    SearchForRecord
    è l'unico che ho trovato consultando vari siti che mi sembrasse aver senso provare, ma in realtà potrebbe non essere il comando giusto o essere usato male, o forse mancano dei passaggi logici che necessitano altri comandi che non conosco.
    Per questo chiedevo un consiglio per un link dove potermi chiarire le idee.
    Perchè hai scelto l'azione "su Current" se prima hai detto che l'azione si sarebbe dovuto scatenare selezionando un record?
    Mah... a me non pare sia urgente stabilire se la maschera sia aperta o meno (comunque non è aperta).
    Ma guarda, questo funziona. Quando seleziono un record nella sotto maschera la variabile viene impostata. Non escludo esista un comando più appropriato, ma non ne so abbastanza.

    L'oggetto 'ricette.preparati2' non è aperto."
    Secondo te l'oggetto segnalato dal messaggio cosa sarebbe?
    Secondo me fa riferimento proprio alla sotto maschera "preparati2"


    saluti e grazie
  • Re: Sotto maschere parallele

    harry61 ha scritto:



    La tabella "ricette" contiene i campi:
    [ID ricetta]
    + altri campi

    La tabella "preparati" contiene i campi:
    [ID preparato]
    + altri campi

    La relazione é:
    campo master [ID ricetta]
    campo secondario [ID preparato]
    per entrambe le sotto maschere
    Sicuro che nella tabella 'preparati' non manchi qualcosa che la relazioni con la tabella 'ricette' (i.e. IDricetta) ?
    E che quindi, conseguentemente la relazione master/detail diventi :
    campo master : 'ricette.IDricetta'
    campo secondario : 'preparati.IDricetta'

    P.S. - evita caratteri speciali nei nomi dei campi/maschere/report/file, così come è meglio evitare anche lo spazio : IDRicetta o ID_Ricetta è meglio di ID Ricetta.
  • Re: Sotto maschere parallele

    Buongiorno Max e grazie

    hai ragione, scusami, ho sbagliato a scrivere il mesaggio me ne sono accorto anch'io. Rettifico:

    La tabella "ricette" contiene i campi:
    [ID ricetta]
    + altri campi

    La tabella "preparati" contiene i campi:
    [ID preparato]
    [ID ricetta]
    + altri campi

    La relazione é:
    campo master [ID ricetta]
    campo secondario [ID ricetta]
    per entrambe le sotto maschere

    grazie anche dei consigli


    saluti
  • Re: Sotto maschere parallele

    Salve,
    Bene adesso lo scenario è chiaro
    fermo restando quando suggerito da Max
    provo a rispondere a questo

    harry61 ha scritto:


    ... che contiene due sotto maschere ("preparati1", "preparati2") che puntano alla stessa tabella. "preparati1" è in visualizzazione foglio dati, mentre "preparati2" in visualizzazione maschera. Vorrei che quando seleziono un record dalla prima, la seconda visualizzasse lo stesso record
    
    Private Sub Form_Current()
    Dim Criterio as string      'La dichiarazione della variabile va inserita quì
    Criterio ="IdPreparato="& IdPreparato 'i nome dei campi li ho scritti come uso scriverli io vedi tu se vuoi continuare a scrivere perentesi
     Criterio = "idPreparato=" & idPreparato
        Forms!Ricette!preparati2.Form.FilterOn = False
        Forms!Ricette!preparati2.Form.Filter = Criterio
        Forms!Ricette!preparati2.Form.FilterOn = True
    End Sub
    
    Prova e facci sapere
    Saluti
    Gianni
  • Re: Sotto maschere parallele

    Non conviene mettere FulterOn=False prima... genera un Requery inutile... basta assegnare la proprietà Filter e forzare nuovamente FilterOn=True dopo per aggiornare.
  • Re: Sotto maschere parallele

    Grazie Alex

    @Alex ha scritto:


    Non conviene mettere FulterOn=False prima... genera un Requery inutile... basta assegnare la proprietà Filter e forzare nuovamente FilterOn=True dopo per aggiornare.
    Io ho fatto, credo sempre così...ma allora quando bisogna portare a false il filtro, solo quando si resetta?
    Non si finisce mai di imparare,bene così.
    Saluti
    Gianni
  • Re: Sotto maschere parallele

    Io in generale in una maschera che consente i filtri va valutato, ma si se si rimuovono i filtri si passa FilyerOn=Palse prima e si mette la proprietà Filter=vbNullstring dopo.
  • Re: Sotto maschere parallele

    Grazie Gianni,
    funziona perfettamente, salvo un piccolo problema, che vado ad esporre:

    Usando l'evento "Current" (sul quale già avevi avanzato qualche perplessità):
    Private Sub Form_Current()
    Dim Criterio As String
    Criterio = "IDpreparato =" & IDpreparato
    Forms!Ricette!preparati2.Form.Filter = Criterio
    Forms!Ricette!preparati2.Form.FilterOn = True
    End Sub
    quando apro la maschera "ricette" mi da l'errore:
    Errore di run-time '2455':
    Riferimento non valido alla proprietà Form/Report nell'espressione.

    Ho ripiegato allora associando l'evento Click al campo IDpreparato e raccogliendo anche il suggerimento di Alex, che ringrazio, il codice diventa:
    Private Sub IDpreparato_Click()
    Dim Criterio As String
    Criterio = "IDpreparato =" & IDpreparato
    Forms!Ricette!preparati2.Form.Filter = Criterio
    Forms!Ricette!preparati2.Form.FilterOn = True
    End Sub
    
    Funziona benissimo e realizza quello che desideravo fare.

    Un grazie a tutti per il tempo speso e la cortesia
Devi accedere o registrarti per scrivere nel forum
9 risposte