Conferma record su campi a valore default

di il
19 risposte

19 Risposte - Pagina 2

  • Re: Conferma record su campi a valore default

    Nel passato, per il salvataggio del record corrente, si poteva utilizzare il metodo di accesso ai menu,
    https://msdn.microsoft.com/en-us/library/office/ff822447.aspx
    ove con un pulsante di comando, attraverso l'autocomposizione, veniva implementato un codice come quello sottoriportato:
    
    Private Sub ComandoSalva_Click()
    On Error GoTo Err_ComandoSalva_Click
    
        DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    
    Exit_ComandoSalva_Click:
        Exit Sub
    
    Err_ComandoSalva_Click:
        MsgBox Err.Description
        Resume Exit_ComandoSalva_Click
    
    End Sub
    
    Con le nuove versioni è disponibile il comando:
    DoCmd.RunCommand acCmdSaveRecord
    https://msdn.microsoft.com/en-us/library/office/ff194612.aspx

    Ne consegue che il pulsante di comando effettua il salvataggio, del record corrente, qualora non vi siano vincoli nei dati ad esempio per avere prima il record relativo alla maschera principale (in modo da assicurare la chiave primaria) e poi quella della sotto-maschera a questa collegata; quindi il pulsante di comando deve far riferimento al salvataggio della maschera principale.

    Da tenere ben presente che la proprietà di Default Value (di un controllo nella maschera) non varia la proprietà Dirty della maschera stessa, per cui se si vuole che risulti a True (in modo da procedere nel salvataggio) si deve popolare attraverso codice.
    Vedi il post #10 di questa discussione:
    http://www.utteraccess.com/forum/Theoretical-Question-D-t1983107.html
  • Re: Conferma record su campi a valore default

    Salve,
    Forse potresti aggiungere un pulsante nella maschera e tramite macro o vba nell evento onclick fai valorizzare "esplicitamente" un campo con il suo valore predefinito e poi lanci il comando salva (da macro o vba)... Spero di non aver scritto inesattezze...
  • Re: Conferma record su campi a valore default

    Scusate tutti per la latitanza, da una parte non avevo visto le risposte nuove perchè su una nuova pagina del 3d, dall'altra perchè avevo temporaneamente sospeso il progetto
    Tornando ai vostri cortesi suggerimenti;
    x willy: nel primo post che ho scritto vedi che ho già provato sia con DoCmd.RunCommand acCmdSaveRecord che con la proprietà Dirty (quest'ultima non l'ho compresa bene ed è possibile che abbia commesso errori)
    x angelo_tdp: alla fine ho fatto proprio quello, ossia ho preso un valore di default di un campo testo a caso e l'ho riassegnato (tipo Me.TextBox=Me.TextBox.DefaultValue) al click del mio pulsante di salvataggio record. In questo modo il campo contatore viene valorizzato e il record può essere salvato. Tanto banale, quanto efficace.. averci pensato prima, o aver avuto prima il tuo suggerimento

    Tanto per chiarezza e a beneficio di chi un domani leggesse questo 3d, il problema come già spiegato non è neanche legato a sottomaschere o tabelle collegate; è legato al campo contatore. Ossia anche in una banale maschera su singola tabella non collegata, ma se è presente un campo contatore non c'è modo (almeno fin'ora non l'ho trovato) di far valorizzare ad access quel campo (e quindi salvare di conseguenza il record) se non andando a modificare esplicitamente un'altro campo, nonostante io possa aver già impostato su tutti un default accettabile e volerlo semplicemente confermare con un click ad esempio su un pulsante.
  • Re: Conferma record su campi a valore default

    NNL78 ha scritto:


    Tornando ai vostri cortesi suggerimenti;
    x willy: nel primo post che ho scritto vedi che ho già provato sia con DoCmd.RunCommand acCmdSaveRecord che con la proprietà Dirty (quest'ultima non l'ho compresa bene ed è possibile che abbia commesso errori)
    nel tuo primo post, hai solo controllato la proprietà Dirty che chiaramente ha valore falso (in quanto non sono state apportate modifiche alla form, anche se si è popolato il campo ID come contatore in automatico) pertanto l'operazione di salvataggio non avviene.
    Per impiegare la proprietà Dirty, devi spostare lo stato attivo su un controllo modificabile (nella maschera) e forzare la proprietà Dirty, in tal modo è possibile salvare il corrente record senza la necessità di modificare i dati presenti; un esempio è il similare:
    
    Private Sub ComandoSalva_Click()
    On Error GoTo Err_ComandoSalva_Click
        Me.TuoControlloAggiornabile.SetFocus
        Me.Dirty = True
        DoCmd.RunCommand acCmdSaveRecord
        
    Exit_ComandoSalva_Click:
        Exit Sub
    
    Err_ComandoSalva_Click:
        MsgBox Err.Description
        Resume Exit_ComandoSalva_Click
    
    End Sub
    
    Per un approfondimento della proprietà Dirty, della Form, puoi vedere:

    http://allenbrowne.com/bug-01.htm
    http://www.dbforums.com/showthread.php?1621100-Can-you-force-a-form-to-be-dirty
  • Re: Conferma record su campi a valore default

    Grande Willy, è esattamente la soluzione che cercavo dall'inizio!
    La proprietà dirty era la chiave, ma non conoscendola la usavo male.. grazie ancora per il suggerimento!
Devi accedere o registrarti per scrivere nel forum
19 risposte