Newsgroup: it.comp.appl.access
Titolo: intercettare errore run time

Ciao a tutti
vorrei intercettare un errore di run-time (il 3022), per questo ho
scritto sull'eveto click di un pulsante:
Private Sub CmdSalva_Click()
Dim ctl As Access.Control
Dim messaggio As String
On Error GoTo Err_CmdSalva_Click
   For Each ctl In Me.Controls
      With ctl
         Select Case .ControlType
            Case acTextBox, acComboBox
               If ctl.Tag = "X" Then
                  .BackColor = vbWhite
                  If IsNull(.Value) Or .Value = "" Then
                     .BackColor = vbRed
                           MsgBox UCase(ctl.Controls(0).Caption) &
vbCrLf & _
                                    "Inserire i dati mancanti nel
Campo", vbExclamation, "AVVISO"
                           .SetFocus
                           Set ctl = Nothing
                           Exit Sub
                  End If
               End If
         End Select
      End With
   Next
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
MsgBox "Dati salvati correttamente", vbInformation, "SALVATAGGIO"
Me.CmdNuovo.Enabled = True
Me.CmdChiudi.Enabled = True
Me.CmdAnnulla.Enabled = False
Me.CmdCancella.Enabled = True
Exit Sub
Exit_CmdSalva_Click:
Exit Sub
Err_CmdSalva_Click:
If Err.Number = 3022 Then
    messaggio = "Attenzione!" & vbCrLf & "PERID già attribuito ad
altro dipendente! "
    MsgBox messaggio, vbExclamation, "A T T E N Z I O N E"
    Me.Undo
    Me.PerID.SetFocus
End If
Resume Exit_CmdSalva_Click
End Sub
ciononostante l'errore di run time, quando si realizza non viene
intercettato.
Dove sbaglio?

 ha scritto nel messaggio
Err_CmdSalva_Click:
If Err.Number = 3022 Then
    messaggio = "Attenzione!" & vbCrLf & "PERID già attribuito ad
altro dipendente! "
    MsgBox messaggio, vbExclamation, "A T T E N Z I O N E"
    Me.Undo
    Me.PerID.SetFocus
End If
ciononostante l'errore di run time, quando si realizza non viene
intercettato.
Dove sbaglio?
--------------------------------------------------------
Sicuro (verificalo con un Msgbox) che il codice d'errore provocato sia il
3022?
Saluti.

 ha scritto nel messaggio 
news:1187888362.6...@q3g2000prf.googlegroups.com...


Exit_CmdSalva_Click:
Exit Sub

End Sub

l'errore 3022 si verifica quando si tenta di duplicare un dato impostato 
come univoco in un campo di una tabella.
tu hai impostato la tabella affinche' cio si verifichi?
Altrimenti è possibile che tu non riproduca effettivamente l'errore e per 
questo non riesci ad ottenere un riscontro.
-- 
Ciao
Access

 ha scritto nel messaggionews:1187888362.6...@q3g2000prf.googlegroups.com...

Sicuramente non sono riuscito a spiegare qual' è il problema
Ovvero:
quando duplico il dato "PerID" (che per impostazione è univoco nonchè
chiave primaria) access mi da il seguente errore:
Errore di run-time '3022' ecc ecc
Io voglio intercettare quell'errore e invece di avere un messaggio che
per l'utente finale risulta incomprensibile, deve avere un testo
diverso ecco xchè ho scritto
...
Err_CmdSalva_Click:
If Err.Number = 3022 Then
    messaggio = "Attenzione!" & vbCrLf & "PERID già attribuito ad
altro dipendente! "
    MsgBox messaggio, vbExclamation, "A T T E N Z I O N E"
    Me.Undo
    Me.PerID.SetFocus
End If
Resume Exit_CmdSalva_Click
...
solo che ciò non avviene infatti continua ad uscirmi il messaggio
sdreuso di access

 ha scritto nel messaggio 
news:1187894667....@r23g2000prd.googlegroups.com...


Non saprei che dirti, io ho provato il codice che tu hai postato e funzione 
perfettamente.
A questo punto prova a creare un nuovo db e fai una prova. Cosi puoi capire 
se è un problema isolato a quel db.
-- 
Ciao
Access 

Dove sbaglio?
Se la form nella quale hai il pulsante è associata alla tabella su cui tenti di registrare il dato duplicato, l'errore
devi intercettarlo nella routine associata all'evento Before update del controllo associato al campo che deve contenere
valori univoci.
Nel pulsante è troppo tardi: non appena il controllo associato al campo perde il focus, Access tenta di aggiornare il
record associato alla maschera e quindi si verifica l'errore 3022.
Vincenzo Turturro
Certificato Eucip Core Level
ITA 0000-002299 del 14/05/2007
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
risorse Access:
http://www.accessgroup.it
---------------------------------------------
Il sito comune di it.comp.as400
http://www.faq400.com
---------------------------------------------

Err_CmdSalva_Click:
MSGBOX  ERR.NUMBER
Ti restituisce 3022?
If Err.Number = 3022 Then
    messaggio = "Attenzione!" & vbCrLf & "PERID già attribuito ad
altro dipendente! "
    MsgBox messaggio, vbExclamation, "A T T E N Z I O N E"
    Me.Undo
    Me.PerID.SetFocus
End If
Resume Exit_CmdSalva_Click
...
solo che ciò non avviene infatti continua ad uscirmi il messaggio
sdreuso di access
----------------------------------------------------------------------
Che significa "messaggio sdreuso di access"?
Errore irreversibile?
Saluti

 record associato alla maschera e quindi si verifica l'errore 3022.
A dire il vero io ho provato e l'errore viene intercettato regolarmente 
anche con il pulsante.
-- 
Ciao
Access 

Access 
