Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    access - problema con il refresh nelle sottomaschere

    ciao a tutti,
    ho un problema di refresh nelle sottomaschere in un DB fornitori e fatture in access:

    Ho una maschera che chiamiamo A
    dentro la maschera ho diverse sottomaschere (sm);
    B sm di A,
    C sm di A,
    D sm di A
    E sm di A che a sua volta, al suo interno, ha una sottomaschera F sm di E sm di A

    nella maschera A ho una casella combinata per selezionare il fornitore sulla quale 1) ho aggiunto nella sua macro anche il comando "aggiorna", ma non aggiorna le sottomaschere.
    2) Allora ho aggiunto nelle sottomaschere il comando "aggiorna" anche nelle rispettive proprietà evento "su corrente", ma le sottomaschere non si aggiornano.
    3) poi ho aggiunto un tasto con il comando "aggiorna" nella maschera A e iesco ad aggiornare solo alcune cose delle sottomaschere, come ad esempio, una casella di riepilogo che sta nella sottomaschera B sm di A e che esegue un filtro in base al fornitore.
    se vado nelle sottomaschere che non si aggiornano, e ci clicco dentro con il mouse e poi premo F5, riesco ad aggiornare quella sottomaschera ma è molto scomodo.
    Domanda:
    come posso forzare il refresh? c'è qualche comando da merre nel codice?

    spero di essermi spiegato.
    ciao e grazie.
    G.

  2. #2
    p.s.:
    ho visto ora che il problema lo riscontro quando aggiorno un dato in una sottomaschera che influisce in un'altra sottomaschera.
    Se metto il comando "aggiorna" sul campo che modifico, l'aggiornamento avviene solo nella sottomaschera che ho modificato e non sull'insieme di maschere e sottomaschere.

    spero di essermi spiegato bene.

    più sintetico non potevo essere.
    Grazie in anticipo.
    G.

  3. #3
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    L'aggiornamento di Maschere con sottomaschere non è sempre immediato
    e dipende dalla "complessita" delle maschere in questione.


    __________________________________________________ ________

    La prima e fondamentale cosa è assicurarti che il dato scritto in maschera
    venga registrato nel DB

    Percio potresti partire con un "SalvaRecord"

    ( se sei nella maschera principale ti basta anche spostare
    il fuoco in una sottomaschera qualunque)

    __________________________________________________ ___

    poi devi fare in modo che quanto registrato nel DB ritorni alle sottomaschere
    e ai controlli calcolati della stessa maschera

    __________________________________________________ ___

    Per questo potresti usare il "Requery" ( RieseguiQuery )

    se devi aggiornare la maschera principale e piu sottomaschere devi:
    Portare il fuoco nella maschera principale e fare il requery
    Portare il fuoco nella 1° sottomaschera e fare il requery
    Eccetera fino a tutte le sottomaschere


    __________________________________________________ __

    Se ancora questo non dovesse bastare
    ( Ripeto dipende dalla complessita della tua maschera )

    devi usare il "Requery mirato" vale a dire che nella macro
    quandi imposti il Requery hai un campo facoltativo
    dove puoi scrivere il nome del controllo particolare che vuoi
    aggiornare.

    __________________________________________________ ___

    Se ancora non ti dovesse bastare puoi piu semplicemente
    ( ma è brutto ) andare al record successivo e tornare al precedente

    (Questo naturalmente ammesso che tu abbia SEMPRE un record successivo a
    disposizione altrimenti mandi in errore il sistema )

    __________________________________________________ _____

    Altro sistema MOLTO piu brutto è chiudere e riaprire la maschera

    __________________________________________________ ______




    Trascurando gli ultimi 2 sistemi brutali io mi concentrerei su
    Salva Record + Requery Mirati

    __________________________________________________ _____

    NB: Il comando aggiorna che citi mi sa che non è specifico
    per il tuo problema ma non ricordo bene a cosa serve



  4. #4
    ciao nman
    grazie per la velocità della risposta.
    siccome conosco poco VB mi servirebbe un aiuto più dettagliato per scrivere il codice perchè con la macro credo non si possa arrivare così nel dettaglio. "Dopo Aggiornamento" contiene già qualcosa:
    ------------------------------------------------
    Private Sub NumeroFattura_AfterUpdate()
    DataFattura = Date
    Me.IDFornitoreFT = Me.IDFornitore
    Refresh

    End Sub
    ------------------------------------------------
    cosa devo aggiungere al posto di refresh per dire:
    1 - salva Record
    2 - aggiona A (maschera prinicipale)
    3 - aggiorna B sm di A (sottomaschera)
    4 - aggiorna C sm di A (sottomaschera)
    5 - ...
    6 - ...
    7 - aggiorna F sm di E sm di A (sotto-sottomaschera)

    ----------------------------------------

    grazie ancora e ciao.
    G.

  5. #5
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Il pezzo di codice sottostante potrebbe adattarsi al tuo problema dopo
    avere modificato opportunamente i nomi dei campi.

    __________________________________________________ ________

    Ti ripeto pero che il risultato dipense dalla complessita
    della maschera e sottomaschere


    __________________________________________________ _________


    Si tratta comunque di operazioni semplici che puo fare benissimo
    una macro pertanto io te la consiglio almeno in fase iniziale

    e quando arrivi al tuo risultato c'e una funzione particolare
    che a partire dalla macro ti scrive il codice VBA automaticamente
    pertanto dopo le prove puoi andare solo a VBA


    codice:
    
    Private Sub GGG_AfterUpdate()
    
    '__________________________________________________________
    
    ' ID è un controllo qualunque della maschera principale A
    ' cominciamo a uscire dal controllo appena modificato
        DoCmd.GoToControl "ID"
    ' Su modifica del campo GGG dopo deve salvare sul DB quello che vedi a video
        DoCmd.RunCommand acCmdSaveRecord
        
    '____________________________________________________________
    
    ' Siamo nella maschera principale e la riaggiorna genericamente
        DoCmd.Requery ""
    ' Siamo nella maschera principale e riaggiorna specificamente il campo GGG
        DoCmd.Requery "GGG"
    '______________________________________________________________
    
    ' Si sposta nella sottomaschera con origine B  e nome  FiglioB
        DoCmd.GoToControl "FiglioB"
    ' riaggiorna genericamente FiglioB
        DoCmd.Requery ""
    ' Riaggiorna un campo specifico di figlio B
        DoCmd.Requery "GGGb"
        
    '________________________________________________________
    
    ' Si sposta nella sottomaschera con origine C  e nome  FiglioC
        DoCmd.GoToControl "FiglioC"
        DoCmd.Requery ""
        DoCmd.Requery "GGGc"
        
    '________________________________________________________
    
    ' Si sposta nella sottomaschera con origine D  e nome  FiglioD
        DoCmd.GoToControl "FiglioD"
        DoCmd.Requery ""
        DoCmd.Requery "GGGd"
        
    '________________________________________________________
    
    ' Si sposta nella sottomaschera con origine E  e nome  FiglioE
        DoCmd.GoToControl "FiglioE"
        DoCmd.Requery ""
        DoCmd.Requery "GGGe"
        
    '________________________________________________________
    
    ' Si sposta nella sottomaschera con origine F  e nome  FiglioF
    'Attento questa è una sottomaschera di FiglioE   percio prima
    'devi essere dentro in FiglioE  diveramente ti va in errore
    
    
        DoCmd.GoToControl "FiglioF"
        DoCmd.Requery ""
        DoCmd.Requery "GGGf"
        
        
    '____________________________________________________________
    '____________________________________________________________
    '____________________________________________________________
    ' Se hai sempre un record successivo te la puoi cavare solamente
    ' con le 2 righe qui sotto che ti mandano al successivo e poi ti
    ' ritornano al precedente che viene aggiornato vel cambio
        
        
        DoCmd.GoToRecord , "", acNext
        DoCmd.GoToRecord , "", acPrevious
    
    
    End Sub

  6. #6
    Utente di HTML.it L'avatar di nelsonblu
    Registrato dal
    Feb 2007
    Messaggi
    2,234
    All'evento della casella combinata da te scelto nella maschera "A" con sottomaschera B aggiungi questo codice in vba

    Forms![A]![B].Form.Requery
    Forms![A]![B].Form.Refresh

    e cosi via per le altre sottomaschere

  7. #7
    Qualche giorno per rispondere, sono stato occupato su altri fronti. Oggi ho provato subito i Vs. suggerimenti e Grazie ad entrambi.
    Ho preferito risolvere con il suggerimento di nelsonblu ma in un'altro punto ho già usato anche il comando (DoCmd.GoToRecord , "", acNext) suggerito nman.
    Grazie.
    G.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.