| 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 CreaTabellaErrSe 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: |