Access – collegamento a dati esterni

Il collegamento ai dati esterni, per gli utilizzatori di MS Access è fondamentale. Microsoft Access ha gli strumenti fondamentali per trattare molti tipi di dati esterni. Vecchi database, HTML e XML sono i dati che più spoesso richiedono un collegamento esterno da parte di Access.

Immaginiamo, per esempio, di avere un’applicazione che si collega a un database esterno quale potrebe essere SQL Server, e che la rete si blocchi. Se un utente, che ignora il problema della rete, tenta di collegarsi e di aprire la fonte dati, si verifica un errore che lo mette sicuramente in difficoltà. Potrebbe anche capitare che un applicazione Access che si collega ad un file di Excel determini un errore perchè il file è stato spostao o cancellato o ha subito sostanziali modifiche.

Se quando apriamo l’applicativo creato con Access, controlliamo che tutti i link ai dati esterni siano disponibili, potremmo informare l’utente se qualcosa non è andato per il verso giusto ed eventualmente porvi rimedio.

Segue una funzione, da eseguire all’apertura dell’applicazione Access che, permette di verificare se un link è acora valido. La procedura prova ad accedere ai dati esterni, riceverndo il nome della tabella esterna per mezzo del paramentro “sTablename”. La funzione prova ad aprire la tabella come recordset, se il metodo “OpenRecordset” fallisce, significa che la tabella non esiste o che il collegamento si è perso. In questo sventurato casa, la funzione mostra un messaggio per informare l’utente che si è verificato un problema e che l’applicazione non funzionerà correttamente.

Public Function TestLink(sTablename As String) As Boolean
  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim iStartODBC As Integer
  Dim iEndODBC As Integer
  Dim sDataSrc As String
  Dim iODBCLen As Integer
  Dim sMessage As String
  Dim iReturn As Integer
 
On Error GoTo HandleError
 
  Set db = CurrentDb
 
  ‘Apre un recordset per forzare l’eventuale errore:
  Set rs = db.OpenRecordset(sTablename)
 
  ‘Se il link è valido si esce dalla funzione:
  TestLink = True
 
ExitHere:
 
  If Not rs Is Nothing Then
    rs.Close
    Set rs = Nothing
  End If
 
  If Not db Is Nothing Then
    db.Close
    Set db = Nothing
  End If
 
  Exit Function
 
HandleError:

  ‘Se il link non è valido, si cerca di determinare quale possa essere il problema
  ‘e comunque si esce dalla funzione:
  Select Case Err
     
      Case 3078    ‘La tabella non esiste:
     
          sMessage = “Table ‘” & sTablename & “‘ non esiste in questo database”
     
      Case 3151    ‘link inesistente
          ‘Ricavo il nome dell’odbc DSN
          ‘da usare nel messaggio di errore:
          iStartODBC = InStr(Error, “to ‘”) + 4
         
          iEndODBC = InStr(Error, “‘ failed”)
          iODBCLen = iEndODBC – iStartODBC
         
          sDataSrc = Mid$(Error, iStartODBC, iODBCLen)
         
          sMessage = “Tabella ‘” & sTablename & “‘ è linked a un ODBC datasource ‘” & sDataSrc _

         & “‘ non attualmente disponibile”
     
      Case Else
     
          sMessage = Err.Description
     
  End Select
 
  iReturn = MsgBox(sMessage, vbOKOnly)
 
  ‘Return failure:
  TestLink = False
 
  Resume ExitHere
 
End Function

Informazioni su scaccaglia

Sviluppo software nei linguaggi: Visual Basic, Visual C e Java. Mi occupo anche di trasferimento dati in reti LAN o WAN. Creazione software a misura del cliente. Access - Microsoft SQL Server - Word - Excel.

Pubblicato il 2 giugno 2011 su Access & SQL, Codice VBA. Aggiungi ai preferiti il collegamento . Lascia un commento.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: