Condividi tramite

Access: gestione "errori applicativi"

Anonimo
2015-10-17T19:12:13+00:00

Ciao a tutti

ho creato una tabella (ovviamente non solo quella!) in cui devo inserire uno o più records.

Utilizzo istruzioni simili a queste (semplificate):


Dim dbs As DAO.Database

dim strInsert as string

strinsert = "INSERT INTO TAB1 (A,B) VALUES 1,2;"

dbs.Execute strINS


Tutto bene, il record viene inserito senza problemi (supponiamo che A sia chiave, non duplicata).

Facendo girare nuovamente la routine, tutto ok (il record non viene inserito doppio).

Forse, al solito, non ho ben approfondito gli argomenti, ma c'è un modo (semplice) per

  • sapere se il record è stato effettivamente inserito oppure no (in particolare, la prima volta che lancio la routine)
  • sapere se il record non è stato inserito e per quale motivo (ad esempio: chiave duplicata).

Grazie e buon lavoro

Ivo

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

2 risposte

Ordina per: Più utili
  1. Anonimo
    2015-10-18T10:06:50+00:00

    Grazie, Sandro,

    avevo già provato con la "On Error GoTo", ma non avevo ottenuto nessun risultato.

    Mettendo invece l'opzione da te indicata "dbfailonerror", viene generato l'errore e quindi funziona anche "On Error". Avevo cercato, infatti, quali fossero le opzioni utilizzabili con la dbs.Execute, ma non le avevo trovate (ora invece le ho trovate su "https://msdn.microsoft.com/en-us/library/bb243015%28v=office.12%29.aspx").

    Grazie ancora e buona giornata

    Ivo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-10-17T21:52:28+00:00

    ciao Ivo53,

    1)puoi gestire l'errore con procedura specifica

    Sub tuaSub()

    On Error GoTo errorHandler

    ' tuo codice...

    '...

    ext_errorHandler:

    Exit Sub

    errorHandler:

      With Err

        If Err.Number = 3022 Then

            VBA.MsgBox "stai inserendo una chiave duplicata...", vbCritical, "warning!"

        Else

            MsgBox "ERR#" & .Number _

                 & vbNewLine & .Description _

                 , vbOKOnly Or vbCritical

        End If

      End With

      Resume ext_errorHandler

    End Sub

    2)io preferirei prevenirlo con una dcount ad esempio, se la chiave già presente la dcount restituirà 1, avvisi l'utente ed esci, altirmenti accodi.

    lo stesso metodo può essere adottato per verificare se effettivamente inserito.

    se inserisci l'accodamento in un loop non vedrei male effettuarlo con una transazione, e qui

    dbs.Execute strINS

    vedrei meglio un

    dbs.Execute strINS,dbfailonerror

    potresti inoltre richiamare direttamente il metodo execute da dbengine.

    [...]

     Grazie e buon lavoro

    [...]

     

    anche a te:-)

     Ivo

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento