Problema trap error 3022

di il
5 risposte

Problema trap error 3022

Buongiorno a tutti!

come da topic, sto avendo qualche problema nell'intercettare l' errore 3022. Il mio progetto si basa su un form con campi unbound, utile alla registrazione dei record...una volta inseriti tutti i valori, clickando sul pulsante dedicato viene prima effettuato un check sui campi obbligatori e successivamente il record viene salvato.

Ora, ho provato ad inserire del codice per trappare l'error generato dal tentativo di duplicazione record ma senza successo!
Ho provato a ricollegare sia all'evento FormError che BeforeUpdate ma con risultati nulli....

Ho provato I seguenti codici:

Private Sub Form_Error (DataErr ad Integer, Response as Integer)
Const conDuplicateKey = 3022
   If DataErr = conDuplicateKey Then
      response = acDataErrContinue
      MsgBox "Error: blablablabla"
   End if
End sub
 
e anche

Private Sub Form_Error(DataErr As Integer, Response As Integer)
     Response = acDataErrContinue
     Select Case DataErr
         Case 3022
             MsgBox "Error: blablabla."
     End Select
End Sub
Any help?

5 Risposte

  • Re: Problema trap error 3022

    Se i controlli sono UNBOUND come puoi pensare che la forma restituisca l'errore..?
    Puoi intercettarla eventualmente nella routine in cui vai a scrivere i dati nella tabella.... ma non hai minimamente mostrato come fai....
  • Re: Problema trap error 3022

    Cavolo, ho proprio cannato concettualmente!
    Come posso fare? Attualmente il codice che uso, depurato delle parti superflue, è il seguente:
    
    Combo10.SetFocus
    If Len(Combo10.Value & vbNullString) = 0 Then
    err = err + 1
    MsgBox "Please insert almost the MAIN area of excellence"
    End If
    
        '' STESSA OPERAZIONE PER I 4 CAMPI OBBLIGATORI
    
    If err < 1 Then
    Set db = CurrentDb
    Set rst = db.OpenRecordset("DATABASE")
     With rst
         .AddNew
        !Company_Name = CompanyName
         '' COPIA SUL DATABASE DEI VARI CAMPI PRESENTI NEL FORM
         .Update
        MsgBox "New contact: " & CompanyName & " has been successfully added"
    
     End With
     rst.Close
     End If
    Combo10.Value = ""
        '' STESSA OPERAZIONE CON TUTTI I CAMPI PER AVERE UN CLEAR FORM
    
    Non è la soluzione più elegante ma funziona bene. Ora, essendo che il debugger mi evidenzia il .Update, essendo a quel punto della routine in cui la registrazione ovviamente fallisce, come posso implementare l'error handler ? Ho qualche problemino a capirne la sintassi, data la mia conoscenza livello capra T_T
    Grazie ancora a tutti !
  • Re: Problema trap error 3022

    tamaeril ha scritto:


    Cavolo, ho proprio cannato concettualmente!
    Assolutamente SI.

    tamaeril ha scritto:


    Come posso fare? Attualmente il codice che uso, depurato delle parti superflue, è il seguente...
    Il codice che scrivi è corretto in linea di massima e, il problema come hai anche già capito è proprio durante l'uso del metodo UPDATE...!
    Hai scritto tuttavia una Routione senza la gestione errori, quindi non puoi gestirlo, ti basta implementare la gestione errori e vedrai che intercetti l'errore
    
    
    Private Function NomeFunction(....) As Boolean
      On Error Goto Err_Trap
      ......
      
    Exit_Here:
      On Error Resume Next
      NomeFunction=Err=0
      ' Azioni da fare prima di uscire
      ' come chiudere recordset o distruggere Oggetti...
      Exit Function
    Err_Trap:
      Select Case Err.Number
          Case 3022
               ' ECCOLO....
          Case Else
               MsgBox Err.Number  & " - " & err.Description
       End Select
    End Function
    Ora nel Case 3022 inserisci quello che avresti fatto in caso di errore...
  • Re: Problema trap error 3022

    Domanda: se non inserisco questa parte, inserendo all'interno dell'Err_Trap sia l'rst.close che il Me.Undo, cosa cambia?
    
    Exit_Here:
      On Error Resume Next
      NomeFunction=Err=0
      ' Azioni da fare prima di uscire
      ' come chiudere recordset o distruggere Oggetti...
      Exit Function
    
    Perchè ho testato il codice completo e mi da errore (causa ignoranza mia, devo sicuramente aver scritto qualche castroneria), mentre accorpando l'operazione di chiusura record e cancellazione ultimo record (che mi riconosce come quello caricato sulla maschera) all'handler sembrerebbe funzionare bene dopo i primi test....

    Scusa, probabilmente ti ho chiesto un'ennesima ovvietà, ma usando Access solo molto sporadicamente alcune meccaniche mi sfuggono
  • Re: Problema trap error 3022

    tamaeril ha scritto:


    Domanda: se non inserisco questa parte, inserendo all'interno dell'Err_Trap sia l'rst.close che il Me.Undo, cosa cambia?
    
    Exit_Here:
      On Error Resume Next
      NomeFunction=Err=0
      ' Azioni da fare prima di uscire
      ' come chiudere recordset o distruggere Oggetti...
      Exit Function
    
    Perchè ho testato il codice completo e mi da errore (causa ignoranza mia, devo sicuramente aver scritto qualche castroneria),
    Quale errore...?
    Il Close lo devi mettere LI dove ti ho detto... ed anche la distruzione...!
    
    Exit_Here:
      On Error Resume Next
      NomeFunction=Err=0
      rst.Close
      Set rst=Nothing
    
      Exit Function
    
    Mentre l'UNDO lo dovresti mettere nel CASE 3022... solo li avrebbe senso l'UNDO, ma nel tuo caso siccome NON E' una Form Associata l'undo che senso ha...???????
    Err_Trap:
      Select Case Err.Number
          Case 3022
               Me.Undo ' NON NEL TUO CASO...!!!!!
          Case Else
               MsgBox Err.Number  & " - " & err.Description
       End Select

    tamaeril ha scritto:


    mentre accorpando l'operazione di chiusura record e cancellazione ultimo record (che mi riconosce come quello caricato sulla maschera) all'handler sembrerebbe funzionare bene dopo i primi test....

    Scusa, probabilmente ti ho chiesto un'ennesima ovvietà, ma usando Access solo molto sporadicamente alcune meccaniche mi sfuggono
    Credo ti sfuggano diverse dinamiche...
Devi accedere o registrarti per scrivere nel forum
5 risposte