Newsgroup: it.comp.appl.access
Titolo: Problema con la gestione degli errori

Intanto buona Domenica a tutti (per chi c'è).
Dunque, sono alle prese con una gestione multipla degli errori, che per comodità di comprensione 
riporto a seguito. Premetto che nelle opzioni ho settato "interrompi ad ogni errore non gestito" e 
che ho inserito sopra la clausola "On Error Goto ErrorFunc"
-----------------------------------------------------------------------------
ErrorFunc:
Select Case Err.Number
Case 32813, -
2147467259
, 438
    Err.Clear
    Resume Next
Case 2091
    Err.Clear
    Echo True
    MsgBox "Non risulta la proprietà """ & rcd!Proprietà.Value & """.", vbExclamation, "Attenzione"
    Echo False
    Resume Next
Case 3012
    Err.Clear
    GoTo NextRel
Case Else
    Echo True
    Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
End Select
---------------------------------------------------------------------------
Quando termina il primo spezzone di codice che potrebbe generare gli errori -
2147467259
 e 438, e qui 
tutto funziona correttamente, quando passo al secondo pezzo dove mi servirebbe il Resume Next per 
l'errore 32813, invece di gestirmi l'errore si blocca l'esecuzione sulla riga di codice e mi si 
presenta l'errore a monitor come se non avessi mai utilizzato la gestione degli errori.
Vi informo che ho già provato a fare CopiaIncolla con il modulo, a riavviare Windows e ad importare 
tutto in un altro db. "Err.Clear" l'ho inserito in un secondo momento ma senza risolvere niente.
Che cos'altro posso fare? Non mi è mai capitata una cosa del genere. Io uso WinXPsp2 e Acc2002.
Grazie a chiunque riesca a darmi una mano.
---------------------------
Michele (Giò)
joyl...@alice.it
 

 ha scritto nel messaggio 
news:4531f8f4$0$25885$4faf...@reader1.news.tin.it...

Non tutti gli errori sono intercettabili (vedi errori intercettabili) e 
probabilmente questo è uno di questi.
Potresti provare con:
If err.number = 32813 then
err.number = 0
end if
Magari usato lì dove si genera l'errore.
Ciao, Carlo 

 Intanto buona Domenica a tutti (per chi c'è).
cut
Questo codice crea una tabella "Errori" da 1 a 1000...forse ti può servire.
E' presa dalla guida di A97.
Ciao, Carlo
Sub CreaTabellaErrori()
    Dim dbs As Database, tdf As TableDef, fld As Field
    Dim rst As Recordset, lngCodice As Long
    Const conErroreOggAppl = "Errore definito da applicazioni o da oggetti"
    ' Crea la tabella Errori in cui sono presenti i campi NumeroErrore e 
DescrizioneErrore.
    Set dbs = CurrentDb
    Set tdf = dbs.CreateTableDef("Errori")
    Set fld = tdf.CreateField("CodiceErrore", dbLong)
    tdf.Fields.Append fld
    Set fld = tdf.CreateField("StringaErrore", dbText, 255)
tdf.Fields.Append fld
    dbs.TableDefs.Append tdf
    ' Apre il set di record della tabella Errori.
    Set rst = dbs.OpenRecordset("Errori")
    ' Esegue un ciclo sui primi 1000 codici di errore di Visual Basic.
    For lngCodice = 1 To 1000
        On Error Resume Next
        ' Rileva ciascun errore.
        Err.Raise lngCodice
        DoCmd.Hourglass True
        ' Omette codici di errore che generano errori definiti da 
applicazioni o da oggetti.
        If Err.Description <> conErroreOggAppl Then
' Aggiunge ogni stringa e codice di errore alla tabella Errori.
            rst.AddNew
            rst!CodiceErrore = Err.Number
            rst!StringaErrore = Err.Description
            rst.Update
        End If
        ' Cancella oggetto Err.
        Err.Clear
    Next lngCodice
    ' Chiude il set di record.
    rst.Close
    DoCmd.Hourglass False
    MsgBox "Creata tabella Errori."
End Sub

 Ciao, Carlo
Gli errori sono tutti intercettabili purtroppo, e questo lo dico perchè, anche se inverto il primo 
spezzone di codice con il secondo (sempre all'interno di una stessa funzione), il primo viene 
gestito egregiamente, il secondo va sempre in blocco.
Adesso voglio provare a scomporre la Function in Function + n Private Function all'interno del 
modulo, ognuna con la gestione degli errori, e vediamo quel che succede.
Intanto grazie, ti farò sapere.
Michele 


Caro Carlo, proprio come mi aspettavo......
Scomponendo la f principale in più pezzi, ognuno con la gestione degli errori ad hoc (scomposta 
quindi pure quella) fa funzionare il modulo che è una meraviglia.
Se ti dovesse capitare......sai come fare
Grazie
Michele