Evitare salvataggio automatico di dati inseriti con una maschera continua di access

Anonimo
2018-11-22T14:05:47+00:00

Buongiorno,

premetto che non sono esperto di vba... ho provato a cercare in rete la soluzione al mio problema, ma non ho trovato nulla che facesse al caso mio.

Ho una maschera continua in cui l'utente deve modificare una serie di record già precedentemente accodati in una tabella: vorrei evitare il salvataggio automatico all'uscita della maschera continua (tipo avere un pulsante di conferma).

Le soluzioni che ho trovato in rete riguardano tutte l'inibizione del salvataggio di un singolo record (quindi relativamente a maschere che agiscono su un record alla volta) o di un singolo campo... ma nel mio caso l'utente interviene, all'interno della maschera continua, su più record nella stessa maschera.

Spero di essere stato chiaro!

Grazie anticipatamente

Francesco

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2018-11-22T23:16:08+00:00

Ciao Vladimiro, 

scusa se ti rompo ancora... ma a proposito di quello che ti ho scritto nella mia risposta  (cioè del fatto che nella mia maschera io filtro solo una parte dei records presenti nella tabella "vera"), per evitare di ricopiare ogni volta tutti records (cioè anche quelli non coinvolti nella maschera) da una parte all'altra, dovrei utilizzare il tuo ciclo non partendo da zero e non finendo con l'ultimo record.

Cerco di essere più preciso: la tabella viene filtrata attraverso una data di calendario, scelta in una maschera precedente, tramite una combo.

Potrei fare in questa maniera: all'apertura della mia maschera dovrei contare i records della tabella con data minore a quella della data della maschera e lo memorizzo in una variabile 1, e poi fare la stessa cosa per i record con data maggiore e memorizzare il numero sulla variabile 2.

A questo punto il ciclo inizierebbe con il numero della variabile 1 e finirebbe con quello della variabile 2.

Fammi sapere cosa ne pensi.

Grazie ancora.

Francesco

Ciao Francesco,

perché vuoi complicarti la vita?

Dovresti eliminare i soli dati filtrati per implementarli nella tabella d'appoggio e successivamente ricollocarli, con le dovute modifiche o aggiunte di nuovi record, nella tabella principale e fin qui nessun problema.

Ma poi, se decidi di non salvare i dati, mi dici come fai a ripristinarli originali così come li hai prelevati la prima volta di nuovo nella tabella principale?

Certo, un'altra soluzione ci sarebbe, cioè l'impiego di una terza tabella.

Mi spiego.

Nel momento in cui prelevi ed allo stesso tempo elimini i dati filtrati dalla tabella originale potresti implementare due tabelle d'appoggio invece di una.

Avresti la possibilità in questo modo, una volta fatte le dovute modifiche o aggiunte, di salvare i dati prelevandoli direttamente dalla tabella in cui stai operando, oppure, di non salvare i dati  e riprenderli dalla seconda tabella d'appoggio dove non è stata fatta nessuna modifica.

Ma come ti ripeto, a che serve tutto ciò se in apertura maschera, pur vedendo e agendo solo sui dati filtrati, la tabella origine record della maschera in cui stai operando, te la trovi già clonata?

Vladimiro

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-11-22T20:32:13+00:00

    Ciao Vladimiro, 

    scusa se ti rompo ancora... ma a proposito di quello che ti ho scritto nella mia risposta  (cioè del fatto che nella mia maschera io filtro solo una parte dei records presenti nella tabella "vera"), per evitare di ricopiare ogni volta tutti records (cioè anche quelli non coinvolti nella maschera) da una parte all'altra, dovrei utilizzare il tuo ciclo non partendo da zero e non finendo con l'ultimo record.

    Cerco di essere più preciso: la tabella viene filtrata attraverso una data di calendario, scelta in una maschera precedente, tramite una combo.

    Potrei fare in questa maniera: all'apertura della mia maschera dovrei contare i records della tabella con data minore a quella della data della maschera e lo memorizzo in una variabile 1, e poi fare la stessa cosa per i record con data maggiore e memorizzare il numero sulla variabile 2.

    A questo punto il ciclo inizierebbe con il numero della variabile 1 e finirebbe con quello della variabile 2.

    Fammi sapere cosa ne pensi.

    Grazie ancora.

    Francesco

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-11-22T18:33:48+00:00

    Grazie infinite Vladimiro, 

    avevo pensato a qualcosa del genere... ma ovviamente dal punto di vista pratico mi mancano le conoscenze tecniche per poterlo realizzare. 

    L'unica modifica che dovrei fare, rispetto al tuo codice, è quello di condizionare la cancellazione dei dati dalla tabella originaria (tabella 1) alla porzione di dati che sono in quel momento visualizzati dalla maschera... e quindi mettere un "where" al tuo CurrentDb.Execute "Delete * From Tabella2".

    Appena riesco provo.

    Spero di non avere problemi in merito.

    Grazie ancora!

    Francesco

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-11-22T17:59:05+00:00

    Buongiorno,

    premetto che non sono esperto di vba... ho provato a cercare in rete la soluzione al mio problema, ma non ho trovato nulla che facesse al caso mio.

    Ho una maschera continua in cui l'utente deve modificare una serie di record già precedentemente accodati in una tabella: vorrei evitare il salvataggio automatico all'uscita della maschera continua (tipo avere un pulsante di conferma).

    Le soluzioni che ho trovato in rete riguardano tutte l'inibizione del salvataggio di un singolo record (quindi relativamente a maschere che agiscono su un record alla volta) o di un singolo campo... ma nel mio caso l'utente interviene, all'interno della maschera continua, su più record nella stessa maschera.

    Spero di essere stato chiaro!

    Grazie anticipatamente

    Francesco

    Ciao Francesco,

    una soluzione ci sarebbe visto che non è possibile farlo tra un record ed un altro della stessa maschera continua in quanto modificando un controllo di un record, nel momento in cui passi al successivo o al precedente, automaticamente il record viene salvato.

    Dicevo, ci sarebbe un escamotage, cioè di crearti una tabella d'appoggio che viene implementata nel momento in cui apri la maschera prendendo i dati dalla tabella originale (per comodità, senza avere il RowSource dinamico di una sola maschera, potresti crearti due maschere gemelle, una con origine record la tabella principale e l'altra con origine record la tabella d'appoggio. Naturalmente se hai bisogno di lavorare su due maschere distinte) e nel momento in cui finisci di inserire o modificare i dati, alla chiusura della maschera chiedi se si vogliono salvare i dati. A questo punto se risponde si, svuoti la tabella originale e la implementi con i nuovi dati della tabella d'appoggio svuotando naturalmente la stessa, viceversa se risponde no, lasci tutto com'è svuotando solo la tabella d'appoggio.

    Facciamo conto che la tabella originale si chiami Tabella1 e la tabella d'appoggio si chiami Tabella2

    In apertura maschera inserisci la seguente routine:

    Dim rs As Dao.Recordset

    Dim rs1 As Dao.Recordset

    Dim i As Integer

      CurrentDb.Execute "Delete * From Tabella2" 

    Set rs = CurrentDb.OpenRecordset("Tabella1", dbOpenDynaset, dbSeeChanges)

            Set rs1 = CurrentDb.OpenRecordset("Tabella2", dbOpenDynaset, dbSeeChanges)

        Do Until rs.EOF

            rs1.AddNew

                For i = 0 To rs.Fields.Count - 1

                    rs1(i) = rs(i)

                Next i

            rs1.Update

            rs.MoveNext

        Loop

        rs.Close

        rs1.Close

        Set rs = Nothing

        Set rs1 = Nothing

    Ed in chiusura maschera:

    Dim rs As DAO.Recordset

    Dim rs1 As DAO.Recordset

    Dim i As Integer

    If MsgBox("Vuoi salvare i dati?", vbInformation + vbYesNo, "Opzione salvataggio dati") = vbNo Then

    Else

        CurrentDb.Execute "Delete * From Tabella1"

        Set rs = CurrentDb.OpenRecordset("Tabella2", dbOpenDynaset, dbSeeChanges)

            Set rs1 = CurrentDb.OpenRecordset("Tabella1", dbOpenDynaset, dbSeeChanges)

        Do Until rs.EOF

            rs1.AddNew

                For i = 0 To rs.Fields.Count - 1

                    rs1(i) = rs(i)

                Next i

            rs1.Update

            rs.MoveNext

        Loop

        rs.Close

        rs1.Close

        Set rs = Nothing

        Set rs1 = Nothing

        MsgBox "I dati sono stati salvati correttamente.", vbInformation

    End If

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2018-11-22T15:06:56+00:00

    Ciao,

    in una maschera di tipo continuo lo spostarsi da un record all'altro implica la finalizzazione di eventuali modifiche del primo record. Come tu dici, su una lista normalmente non si consentono modifiche. Selezionando un record si attiva la relativa maschera di dettaglio.

    Comunque puoi provare l'evento prima di aggiornare per chiederne conferma.

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento