Interazione tra maschere

di il
6 risposte

Interazione tra maschere

Buongiorno a tutti...il solito neofita rompiscatole...
Ho gia' creato un database funzionante ma ora vorrei ottimizzarlo...vengo al mio problema...
Ho una tabella 'tblProdotti' con diversi campi e una tabella 'tblTipogia_Vaso' relazionate 1 a molti...ho quindi creato la frmProdotti per l'inserimento dei Prodotti nuovi. All' interno della maschera ho una combo dove dovro' dargli un valore scelto per la tipogia del vaso e relativa misura...
Infatti a sua volta la 'tblTipolgia_Vaso' e' relazionata con una tabella 'tblMisura_Vaso' dove la FK e' in 'tblTipogia_Vaso' e la PK in 'tblMisura_Vaso'...
Per l'inserimento di un nuovo dato dalla 'frmProdotti' in 'tblTipologia_Vaso' ho creato l'apertura della maschera 'frmTipologia_Vaso' attraverso un evento doppio clik...nella quale dovro' inserire sia la tipologia vaso sia la misura per poi ritrovarmi una stringa concatenata nella maschera 'frmProdotti' al campo 'Tipogia_Vaso'...
E fin qui essun problema...funziona itutto...
Il problema e' che quando chiudo la 'frmTipolgia_Vaso' e ritorno alla 'frmProdotti' per finire gli inserimenti dati devo andare a selezionare nella combo la nuova 'Tipologia_Vaso' appena inserita mentre il mio desiderio e' quella di vederla gia' inserita in automatico nella combo...
Se qualcuno mi puo' dare dei link dove poter risolvere questo problema inerente alla mia richiesta di ottimizzazione ve ne sarei grato...ho cercato parecchio ma probabilmente non inserisco le ricerche giuste...tipo sincronizzazione tra maschere o interazione tra maschere ma non ho trovato quello che fa al mio caso...e come facile capire il mio VBA per il momento e' ancora precario....grazie

6 Risposte

  • Re: Interazione tra maschere

    ...forse era meglio postassi anche il codice che ho immesso sulla combo 'Tipologia_Vaso' in evento doppio click che è il seguente:

    Private Sub Tipologia_Vaso_DblClick(Cancel As Integer)
    On Error GoTo Err_Tipologia_Vaso_DblClick
    Dim lngProductID As Long

    If IsNull(Me![Tipologia_Vaso]) Then
    Me![Tipologia_Vaso].Text = ""
    Else
    lngProductID = Me![Tipologia_Vaso]
    Me![Tipologia_Vaso] = Null
    End If
    DoCmd.OpenForm "frmTipologia_Vaso", , , , , acDialog, "Gotonew"
    Me![Tipologia_Vaso].Requery
    If lngProductID <> 0 Then Me![Tipologia_Vaso] = lngProductID
    Exit_Tipologia_Vaso_DblClick:
    Exit Sub

    Err_Tipologia_Vaso_DblClick:
    MsgBox Err.Description
    Resume Exit_Tipologia_Vaso_DblClick

    End Sub

    Sicuramente ora mi manca l'evento su un bottone che chiude la maschera 'frmTipologia_Vaso' e che mi fa ritrovare il dato appena inserito nella mia maschera principale frmProdotti nella combo 'Tipologia_Vaso'....qualcuno mi da un input da dove cominciare?
  • Re: Interazione tra maschere

    Prova a leggere questo documento
  • Re: Interazione tra maschere

    Mi permetto darti del "tu"...intanto grazie...allora prima ho provato ad inserire il codice VBA copiandolo dal link che mi hai mandato (con le dovute sostituzioni dei nomi) e continuava a darmi errore...pensando fosse colpa mia ho creato pari pari il database del documento con stessi nomi e mi dava errore di runtime anche con quello...(semmai se te la senti prova a dare una controllata al VBA..)...allora ho provato con le Macro e finalmente con le Macro funziona...però c'è un però... il mio scopo era quello che una volta tornato in maschera B (faccio riferimento all'esempio db del documento che mi hai mandato) è quello di ritrovarmi il dato nuovo appena inserito nella casella combinata già inserito...invece devo andarlo a selezionare...ma a ciò ci ero arrivato anch'io...
    Grazie se mi risponderai...
  • Re: Interazione tra maschere

    Requery (o RieseguiQuery per le macro) provvedono ad aggiornare automaticamente la casella combinata, subito dopo l'"assegnazione" valore.
    DoCmd.OpenForm "frmTipologia_Vaso", , , , , acDialog, "Gotonew"
    Tieni presente che questa istruzione contiene acDialog. È una particolarissima situazione per cui il codice in questo punto SI FERMA e pone l'attenzione sulla maschera frmTipologia_Vaso. Il codice continuerà solo quando frmTipologia_Vaso verrà chiusa cliccando su X in alto (come si fa per qualsiasi finestra). Infatti l'istruzione subito dopo è proprio
    Me![Tipologia_Vaso].Requery
    Forse ti manca un codice che deve risiedere dentro frmTipologia_Vaso che deve IMPOSTARE il proprio valore dentro la casella combinata della PrimaMaschera (A nel mio documento).
    If lngProductID <> 0 Then Me![Tipologia_Vaso] = lngProductID
    Questa riga non ha senso dentro PrimaMaschera, l'assegnazione la deve fare frmTipologia_Vaso verso PrimaMaschera![Tipologia_Vaso]

    P.S.: Ti consiglio di lasciar perdere la via macro e sfruttare "Non in elenco" (NotInList) tutto con il VBA.
  • Re: Interazione tra maschere

    Gian63 ha scritto:


    ...forse era meglio postassi anche il codice che ho immesso sulla combo 'Tipologia_Vaso' in evento doppio click che è il seguente:

    Private Sub Tipologia_Vaso_DblClick(Cancel As Integer)
    On Error GoTo Err_Tipologia_Vaso_DblClick
    Dim lngProductID As Long

    If IsNull(Me![Tipologia_Vaso]) Then
    Me![Tipologia_Vaso].Text = ""
    Else
    lngProductID = Me![Tipologia_Vaso]
    Me![Tipologia_Vaso] = Null
    End If
    DoCmd.OpenForm "frmTipologia_Vaso", , , , , acDialog, "Gotonew"
    Me![Tipologia_Vaso].Requery
    If lngProductID <> 0 Then Me![Tipologia_Vaso] = lngProductID
    Exit_Tipologia_Vaso_DblClick:
    Exit Sub

    Err_Tipologia_Vaso_DblClick:
    MsgBox Err.Description
    Resume Exit_Tipologia_Vaso_DblClick

    End Sub

    Sicuramente ora mi manca l'evento su un bottone che chiude la maschera 'frmTipologia_Vaso' e che mi fa ritrovare il dato appena inserito nella mia maschera principale frmProdotti nella combo 'Tipologia_Vaso'....qualcuno mi da un input da dove cominciare?
    Se tu gestissi la cosa su Evento NotinList sarebbe tutto estremamente pià tecnico.
    L'evento NotInList, preposto proprio a questo, restituisce 2 parametri:
    
    Private Sub cboDept_NotInList(NewData As String, Response As Integer)
    Il parametro [NewData] è quello che viene digitato nella Combo e che, dal momento che non è compreso nella lista genera l'evento.
    Immagino la combo abbia colonna(0)Larghezza=0 e Colonna(1) Larghezza>0...!

    A questoi punto se l'inserimento non richiede altri dettagli, basterebbe:
    1) Aprire il RS sulla tabella
    2) Fare un AddNew inserendo solo il Testo nel campo Descrizione in quanto la PK immagino sia Counter
    3) Update del RS
    4) Requery della combo
    5) Combo=[NewData]

    Se invece dei aprire una Maschera esterna per completare altri campi, fai la stessa cosa:
    1) Aprire la maschera esterna in modalità Aggiungi Record ed acDialog, passando come Args il valore [NewData]
    2) Su evento LOAD leggi OpenArgs e lo assegni come valore alla TextBox
    3) Fai le tue modifiche
    4) Chiudi la Form
    5) Requery della combo
    6) Combo=[NewData]

    P.S. quel "Gotonew" è decisamente inguardabile... dal momento che il parametro DataMode prevede acFormAdd.
  • Re: Interazione tra maschere

    ...sono commosso...primo perchè mi fate capire quanto sia ancora indietro e secondo (con invidia) quanto siete avanti e disponibili...ora comincerò a fare le mie prove con i Vs. consigli...prove che non saranno prive di sconforti psicofisici....Grazie mille...!!!
    P.S.: Il mio nick non riguarda la classe ma l'età...ora che sono in pensione avendo più tempo mi sono appassionato ancor di più a questo mondo dei db e con Access in quanto primo amore... ma spero di non dovermene pentire perchè non nascondo di fare una fatica immane soprattutto a livello di codice VBA...finora solo fatto semplici db funzionanti ma quando si comincia a credere di sapere se approfondisci invece realizzi quanto non ne sai...soprattutto capendolo da persone come voi che ne sanno...se risolvo da solo...ve lo farò sapere...grazie ancora
Devi accedere o registrarti per scrivere nel forum
6 risposte