Modules

5.19 Creare una tabella che contenga l'elenco degli errore Access
  Roberto
Tranne alcuni errori particolari che non è possibile autoducumentare, per i quali c'è un riferimento dell'help, per la stragrande maggioranza Access spiega l'errore al momento che viene segnalato, quindi non vengono spiegati anche nell'help.
Se comunque si ritiene opportuno avere a portata di mano l'elenco di tutti gli errori comprensivo del numero errore e della relativa descrizione, è possibile crearsi da VBA una tabella che possa contenere tali informazini e poi popolarla automaticamente.
Per fare questo inserire in un modulo di un database le seguenti funzioni e sub:
Public Function IsNothing(varToTest As Variant) As Integer
    IsNothing = True
    Select Case VarType(varToTest)
        Case vbEmpty
            Exit Function
        Case vbNull
            Exit Function
        Case vbBoolean
            If varToTest Then IsNothing = False
        Case vbByte, vbInteger, vbLong, vbSingle, _
            vbDouble, vbCurrency
            If varToTest <> 0 Then IsNothing = False
        Case vbDate
            IsNothing = False
        Case vbString
            If (Len(varToTest) <> 0 And varToTest <> " ") _
            Then IsNothing = False
    End Select
End Function

Private Sub SetFieldProperty(MyField As Field, _
PropertyName As String, PropertyType As Integer, _
PropertyValue As Variant)
  Const ERR_PROPERTY_NONEXISTENT = 3265
  Const ERR_PROPERTY_NOTFOUND = 3270
  Dim MyProperty As Property
  On Error Resume Next
  MyField.Properties(PropertyName) = PropertyValue
  If Err <> 0 Then
    If Err <> ERR_PROPERTY_NONEXISTENT _
        And Err <> ERR_PROPERTY_NOTFOUND Then
      On Error GoTo 0
      MsgBox "Couldn't set property '" & PropertyName _
      & "' on field '" & MyField.Name & "'", _
      vbExclamation, "SetFieldProperty"
    Else
      On Error GoTo 0
      Set MyProperty = _
      MyField.CreateProperty(PropertyName, _
      PropertyType, PropertyValue)
      MyField.Properties.Append MyProperty
    End If
  End If
End Sub

Public Sub CreaTabellaErr()
Dim dbMyDatabase As DAO.Database, tblTabellaErr _
    As DAO.TableDef, fldMyField As DAO.Field
Dim rcdErrRecSet As DAO.Recordset, lngErrCode As Long, _
    intMsgRtn As Integer
Dim varReturnVal As Variant, varErrString As _
    Variant, ws As DAO.Workspace
Set dbMyDatabase = CurrentDb()
Set ws = DBEngine.Workspaces(0)
On Error Resume Next
Set rcdErrRecSet = _
    dbMyDatabase.OpenRecordset("TabellaErr")
Select Case Err
Case 0
    On Error GoTo 0
    intMsgRtn = MsgBox("La TabellaErr esiste già. " & _
        "Proseguo per cancellare e ricostruire " & _
        "tutte le righe?", 52)
    If intMsgRtn = 6 Then
        DoCmd.SetWarnings False
        DoCmd.RunSQL "DELETE * FROM TabellaErr;"
        DoCmd.SetWarnings True
    Else
        rcdErrRecSet.Close
        Exit Sub
    End If
Case 3011, 3078
    On Error GoTo 0
    Set tblTabellaErr = _
        dbMyDatabase.CreateTableDef("TabellaErr")
    Set fldMyField = _
        tblTabellaErr.CreateField("CodiceErrore", dbLong)
    tblTabellaErr.Fields.Append fldMyField
    Set fldMyField = _
        tblTabellaErr.CreateField("StringaErrore", dbText)
    tblTabellaErr.Fields.Append fldMyField
    dbMyDatabase.TableDefs.Append tblTabellaErr
    SetFieldProperty tblTabellaErr![StringaErrore], _
        "ColumnWidth", dbInteger, 7200
    Set rcdErrRecSet = _
        dbMyDatabase.OpenRecordset("TabellaErr")
Case Else
    MsgBox "Errore sconosciuto in CeeaTabellaErr " _
        & Err & ", " & Error$(Err), 16
    Exit Sub
End Select
varReturnVal = SysCmd(acSysCmdInitMeter, _
    "popolo la Tabella Errori", 32767)
DoCmd.Hourglass True
ws.BeginTrans
For lngErrCode = 1 To 32767
    varErrString = AccessError(lngErrCode)
    If Not IsNothing(varErrString) Then
        If varErrString <> "Errore definito dall'applicazione " & _
            "o dall'oggetto" Then
            rcdErrRecSet.AddNew
            rcdErrRecSet("codiceErrore") = lngErrCode
            rcdErrRecSet("StringaErrore") = _
                Left$(varErrString, 255)
            rcdErrRecSet.Update
        End If
    End If
    varReturnVal = SysCmd(acSysCmdUpdateMeter, _
        lngErrCode)
Next lngErrCode
ws.CommitTrans
rcdErrRecSet.Close
DoCmd.Hourglass False
varReturnVal = SysCmd(acSysCmdClearStatus)
DoCmd.SelectObject acTable, "TabellaErr", True
MsgBox "La Tabella Errori è stata creata."
End Sub
Quindi eseguire il seguente codice VBA:
Call CreaTabellaErr
Se nel database già esiste una tabella TabellaErr la sub CreaTabellaErr la svuota e la ripopola con il codice e la descrizione di tutti gli errori che Access è in grado di segnalare.
Se invece tale tabella non esiste nel database corrente, allora la sub prima la crea e poi la popola con i codici e le descrizioni degli errori di Access.
Durante la creazione della tabella TabellaErr l'evolversi dell'elaborazione viene evidenziata con la clessidra e con la barra di progressione della barra di stato di Access.
Alla fine dell'elaborazione la tabella di cui sopra conterrà tutti i codici di errore di Access comprensivi della loro descrizione.
Le funzioni/sub di cui sopra fanno riferimento alla libreria Microsoft DAO quindi, se si usa una versione di Access successiva ad Access 97, si deve aggiungere al database i riferimenti a tale libreria.

Download:
 
  ErroriAccess.zip (28Kb) MSAccess97 database


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.