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