Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Im Beitrag „RDBMS-Zugriff per VBA: Verbindungen“ haben wir die Grundlage für den Zugriff auf SQL Server-Datenbanken geschaffen, „RDBMS-Zugriff per VBA: Daten abfragen“ zeigt, wie Sie die Daten einer SQL Server-Datenbank ermitteln. Im vorliegenden Teil dieser Beitragsreihe erfahren Sie, wie Sie die Daten einer SQL Server-Datenbank bearbeiten.
Fehlerbehandlung
Wie bereits im vorherigen Teil der Beitragsreihe (RDBMS-Zugriff per VBA: Daten bearbeiten, www.access-im-unternehmen.de/1074) an einem kleinen Beispiel demonstriert, können Sie die durch den SQL Server ausgelösten Fehler zwar wie üblich über das Err-Objekt von VBA auslesen. Allerdings hält dieses nur eine einzige Fehlernummer für SQL Server-Fehler vor. Genauere Informationen erhalten Sie über die Errors-Auflistung. Wenn Ihre Anwendung eine Fehlerbehandlung enthält, müssen Sie Informationen über solche Fehler etwas anders aufzeichnen oder bearbeiten als zuvor.
Als Ausgangsbasis verwenden wir eine einfache Fehlerbehandlungsfunktion wie die aus Listing 1. Diese erwartet das Modul, die Prozedur, die Zeile und eine optionale Bemerkung als Pa-ra-meter, die Eigenschaften des Err-Objekts sind ja bereits global verfügbar. Die gesammelten In-for-ma-tio-nen werden dann in eine Textdatei geschrieben. Sie können diese auch direkt in einer Meldung ausgeben, per Mail an den Entwickler schicken et cetera – an dieser Stelle sollen die Daten jedoch erst mal in einer Textdatei landen.
Public Function Fehlerbehandlung(strModul As String, strRoutine As String, lngZeile As Long, _ Optional strBemerkungen As String) Open CurrentProject.Path & "\Fehler.log" For Append As #1 Print #1, "Datum: " & Format(Now, "yyyy-mm-dd, hh:nn:ss") Print #1, "Datenbankpfad: " & CurrentDb.Name Print #1, "Modul: " & strModul Print #1, "Routine: " & strRoutine Print #1, "Benutzer: " & CurrentUser() Print #1, "Fehlernummer: " & Err.Number Print #1, "Fehlerbeschreibung: " & Err.Description Print #1, "Zeile: " & lngZeile Print #1, "Bemerkungen: " & strBemerkungen Close #1 Reset MsgBox "Es ist ein Fehler aufgetreten. " & vbCrLf & "Weitere Informationen finden " _ "Sie in der Datei Fehler.log im Verzeichnis dieser Datenbank." End Function
Listing 1: Ausgangsprozedur zur Fehlerbehandlung
Diese wird beispielsweise wie folgt ausgelöst – in diesem Fall durch das erneute Anlegen eines Wertes in einem eindeutig indizierten Feld. Dazu fügen wir die Fehlerbehandlung in eine Prozedur ein, die wie in Listing 2 aussieht. Dabei wollen wir einen Eintrag für ein eindeutig indiziertes Feld zwei Mal anlegen, was einen Fehler auf Seiten des SQL Servers auslösen sollte. Die Prozedur erstellt ein leeres QueryDef-Objekt und ermittelt die Standardverbindungszeichenfolge mit der Funktion Standardverbindungszeichenfolge, die Sie in dieser Beitragsreihe bereits mehrfach eingesetzt haben. Diese landet in der Connect-Eigenschaft des QueryDef-Objekts – ebenso wie der Wert False für die Eigenschaft ReturnsRecords.
Public Sub FehlerAusloesen() Dim db As DAO.Database Dim qdf As DAO.QueryDef Set db = CurrentDb Set qdf = db.CreateQueryDef("") With qdf On Error GoTo Fehler .Connect = Standardverbindungszeichenfolge .ReturnsRecords = False .SQL = "DELETE FROM tblKategorien WHERE Kategoriename = ''Test''" .Execute .SQL = "INSERT INTO tblKategorien(Kategoriename) VALUES(''Test'')" .Execute .SQL = "INSERT INTO tblKategorien(Kategoriename) VALUES(''Test'')" .Execute End With Ende: Exit Sub Fehler: Fehlerbehandlung "mdlFehlerbehandlung", "FehlerAusloesen", Erl Resume Ende End Sub
Listing 2: Fehlerauslösende Prozedur
Die erste SQL-Anweisung löscht den eventuell bereits vorhandenen Eintrag der Tabelle tblKategorien mit dem Kategorienamen Test. Dann fügt sie diesen zwei Mal hinzu – oder versucht dies zumindest. Es erscheint das in der Fehlerbehandlungsprozedur Fehlerbehandlung ausgelöste Meldungsfenster, außerdem legt die Prozedur eine Datei mit der Fehlermeldung an. Diese sieht wie in Bild 1 aus.
Bild 1: Durch die Fehlerbehandlung generierte Fehlerdatei
Mit der hier angebotenen Fehlermeldung kann man natürlich nicht viel anfangen, also erweitern wir die Fehlerbehandlung so, dass diese die Fehler im SQL Server erkennt und gesondert ausgibt. Fehler auf SQL Server-Seite haben die Fehlernummer 3146, sodass wir gezielt nach solchen Fehlern suchen können – in diesem Fall durch die Prüfung innerhalb einer If…Then-Bedingung. Ist die Bedingung erfüllt, durchläuft die Prozedur eine Schleife über die Anzahl der Elemente der Errors-Auflistung, wobei wir mit dem Index 0 beginnen. In dieser Schleife gibt die Prozedur die Nummer, die Beschreibung und die Quelle des Fehlers eingerückt aus. Die neue Version der Fehlerbehandlung sieht nun in gekürzter Form wie in Listing 3 aus.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo