Il metodo refresh non aggiorna.

di il
6 risposte

Il metodo refresh non aggiorna.

Buonasera. Vorrei porre un quesito. Ho due sottomaschera in due maschere distinte. Applico il metodo refresh alle due sottomaschere dopo modifica di record. In una delle due sottamaschere l' aggiornamento avviene, nell' altra no. Ovviamente il metodo requery ha effetto in entrambi i casi ma vorrei capire perché di questo comportamento. So di dare pochissime informazioni, ma forse mi sfugge qualcosa sul metodo refresh? Grazie.

6 Risposte

  • Re: Il metodo refresh non aggiorna.

    Spiega meglio lo scenario perché se l'aggiornamento che funziona è nella subform direttamente collegata campi Master/Secondari alla form in cui esegui la chiamata probabilmente è il motivo della differenza.

    Immagino innanzitutto che per modifica tu intenda Edit e non Addnew altrimenti sarebbe ancora più esplicito.

    La subform diretta collegata campi Master/Secondari esegue a prescindere il Requery.

    Non so se ho compreso lo scenario.

  • Re: Il metodo refresh non aggiorna.

    Si esplicito meglio. Nella maschera sono presenti controlli non associati utilizzati per indicare i valori da inserire o modificare all' interno delle tabelle del database. I dati saranno poi visibili nelle sottomaschere che ovviamente contengono controlli associati.

  • Re: Il metodo refresh non aggiorna.

    Se parli di INSERIRE il Refresh NON VA BENE, devi usare Requery… ed i motivo per il quale si usa sempre e solo il REQUERY è proprio per non andare a differenziare ADDNEW da EDIT… 

    https://learn.microsoft.com/en-us/office/vba/api/access.form.requery

    https://learn.microsoft.com/en-us/office/vba/api/access.form.refresh

    La frase importante la trovi nel metodo Refresh:

    n an Access database, the Refresh method shows only changes made to records in the current set.
    Because the Refresh method doesn't actually requery the database, 
    the current set won't include records that have been added or exclude records that have been deleted 
    since the database was last requeried
  • Re: Il metodo refresh non aggiorna.

    Il problema nell' uso del Requery risiede nella necessità del riposizionamento su record modificato. Il metodo Requery riposizione sul primo record. L' unico modo che mi viene in mente per il riposizionamento è ricorrere al metodo Findfirst del recordset subito dopo il Requery ma non funziona, io credo, poiché l' operazione avviene  prima della fine dell'aggiornamento della query.

  • Re: Il metodo refresh non aggiorna.

    12/06/2024 - Antony73 ha scritto:


    Il problema nell' uso del Requery risiede nella necessità del riposizionamento su record modificato. Il metodo Requery riposizione sul primo record. L' unico modo che mi viene in mente per il riposizionamento è ricorrere al metodo Findfirst del recordset subito dopo il Requery ma non funziona, io credo, poiché l' operazione avviene  prima della fine dell'aggiornamento della query.

    Come fai a riposizionarti…? Cerca di essere più tecnico altrimenti impieghiamo troppo.

    Premesso che NON puoi usare REFRESH in caso di Aggiunte, ribadisco che serve il Requery, il metodo per riposizionarsi dopo il requery è banale ne hai 3 almeno perfettamente funzionanti:

    • Un metodo che non uso perchè genera Flikering, ma non sposta il Record attivo, è questo:
    Form!TuaForm!TuaSubFormContainer.Form.RecordSet.Requery
    • Usare il Record Corrente, lo memorizzi fai il Requery e riaggiorni
    Dim frm As Access.Form
    Dim ActRecord As Long
    
    Set frm=Form!TuaForm!TuaSubFormContainer.Form
    ActRecord = frm.CurrentRecord
    frm.Requery
    DoEvents
    Set frm.CurrentRecord=ActRecord 
    • Memorizzi la PK e dopo il requery sempre sul RecordsetClone fai il FindFirst alla PK memorizzata (io uso sempre e solo questo)
    Dim frm As Access.Form
    Dim rs  As DAO.Recordset
    Dim pk	As Long
    Set frm=Form!TuaForm!TuaSubFormContainer.Form
    pk = frm.Controls(NomeCampoPK).Value
    frm.Requery
    DoEvents
    Set rs = frm.RecordsetClone
    rs.FindFirst "[" & NomeCampoPK& "]=" & pk
    frm.Bookmark = rs.Bookmark

    Quale di questi hai usato…? ;-)

  • Re: Il metodo refresh non aggiorna.

    Il terzo metodo. Ma ho omesso il DoEvents. Ok, grazie.

Devi accedere o registrarti per scrivere nel forum
6 risposte