Christoph Spielmann, Düsseldorf
Wenn Sie schon einmal mit dem Microsoft SQL-Server gearbeitet haben, werden Sie sicherlich den Query-Analyzer schätzen gelernt haben. Mit diesem Tool können Sie schnell und einfach eine SQL-Abfrage ausführen und das Ergebnis begutachten. Dieser Artikel stellt Ihnen einen Query-Analyzer zum Einsatz unter Access vor.
Man mag es kaum glauben, aber auch der Microsoft SQL Server hat einmal in der Version 1.0 das Licht der Welt erblickt. 1989 hatte Microsoft die erste Version für das Betriebssystem OS/2 herausgebracht, das damals noch unter der Federführung von Microsoft in Zusammenarbeit mit IBM entwickelt wurde. Die Basis des SQL-Servers stammte hierbei vom Sybase SQL-Server 4.0, einem Datenbank-Server für Unix und VMS. Das Typische für diese Datenbank-Server war zu jener Zeit, dass jegliche Kommunikation zwischen Benutzer und Server nur via SQL erfolgen konnte. Dies betraf zum Beispiel das Anlegen von Tabellen, das Hinzufügen von Benutzern, die Vergabe von Zugriffsrechten und natürlich auch das Abfragen von Daten. Die Eingabe von SQL-Anweisungen erfolgt hierbei über den Query-Analyzer (siehe Bild 1) beziehungsweise das DOS-Gegenstück “iSQL”. Erst später stellte Microsoft mit dem Enterprise-Manager eine Benutzeroberfläche zur Verfügung, die dem Benutzer Aufgaben wie beispielsweise die Anlage von Tabellen auch ohne komplizierte SQL-Anweisungen ermöglichte.
Bild 1: Der Query-Analyzer des Microsoft SQL-Servers
Trotz Enterprise-Managers wird der Query-Analyzer noch von vielen Benutzern eingesetzt, da zum Beispiel die Eingabe von DELETE FROM Kunden zum Löschen von Datensätzen für viele der schnellste Weg ist.
Auch zum Test und zur Fehlerbehebung von SQL-Anweisungen ist der Query-Analyzer gut geeignet.
Die hier vorgestellte Lösung des Query-Analyzers bietet die wichtigsten Funktionen nun auch unter Access. Hierzu zählen die Eingabe und Ausführung von SQL-Statements sowie das Speichern und Laden von Abfragen.
Bild 2: Erforderliche Verweise zum Einsatz des Query-Analyzers
Bild 3: Der Access-Query-Analyzer in der Ergebnistabellenansicht …
Bild 4: … und in der Ergebnisansicht
Der Query-Analyzer für Access besteht aus einem einzelnen Formular, das Sie problemlos in Ihre Datenbank importieren können. Von dort aus können Sie den Query-Analyzer dann aus dem Datenbankfenster heraus öffnen und einsetzen.
Voraussetzung ist lediglich, dass Sie Ihrem Projekt Verweise auf die Objekte ADO und ADOX hinzufügen (siehe Bild 2).
Ein Einsatz des Query-Analyzers als Add-In ist leider nicht möglich, wie später noch erläutert wird.
Eingabe- und Ergebnisbereich
Das Formular des Query-Analyzers ist zweigeteilt. Im oberen Bereich befindet sich der Eingabebereich für SQL-Anweisungen.
Der untere Ergebnisbereich zeigt das Ergebnis an. Sollte es sich bei der Anweisung um eine SELECT-Anweisung handeln, wird das Ergebnis automatisch als Tabelle angezeigt.
Bei allen anderen Anweisungen – die keine Datensätze zurückliefern – erscheint eine entsprechende Meldung.
Daten und Meldungen sind im unteren Bereich durch ein Register-Steuerelement umschaltbar (s. Abb. 3 und Abb. 4).
Bei SELECT-Abfragen wird automatisch die Ergebnistabelle gefüllt. Als Meldung wird die Anzahl der zurückgelieferten Datensätze ausgegeben.
Bei allen anderen Abfrage-Typen (zum Beispiel DELETE, UPDATE oder INSERT INTO) wird das Register Daten automatisch ausgeblendet und lediglich das Meldungsfenster angezeigt.
Hier wird dann die Anzahl der von der Anweisung betroffenen Datensätze ausgegeben.
Bei DELETE-Anweisungen ist dies zum Beispiel die Anzahl der gelöschten Datensätze.
Sollte die angegebene Anweisung einen Fehler enthalten, wird dieser ebenfalls als Meldung ausgegeben (siehe Bild 5).
Bild 5: Die Anzeige einer Fehlermeldung
Bild 6: Auswahl einer gespeicherten Abfrage
Ausführen undprüfen von Anweisungen
Im Kopf des Query-Analyzers befindet sich eine Symbolleiste. Mit Hilfe des Pfeil-Symbols führen Sie die aktuelle Abfrage aus. Alternativ können Sie die SQL-Anweisung auch nach dem Vorbild des SQL-Servers mit der Taste F5 starten.
Eine besondere Bedeutung hat das Prüf-Symbol direkt links daneben. Hiermit können Sie eine Abfrage prüfen, ohne dass hierbei die Daten verändert werden. Dies ist insbesondere bei komplexen Löschabfragen hilfreich.
öffnen undspeichern vonAbfragen
Eine weitere wichtige Funktion ist das Speichern und öffnen einer Abfrage.
Zu diesem Zweck stehen im Kopfbereich zwei entsprechende Symbole zur Verfügung.
Im Gegensatz zum Query-Analyzer des SQL-Servers werden die Abfragen jedoch nicht in Text-Dateien, sondern innerhalb der Datenbank als normale Access-Abfragen gespeichert.
Auch beim Laden einer Abfrage greifen Sie auf alle Access-Abfragen zu.
Beim Laden einer Abfrage ändert sich der Eingabebereich des Query-Analyzers in eine Auswahlliste (siehe Bild 6).
Hier können Sie eine Abfrage durch einen Doppelklick auswählen, deren SQL-Anweisung dann im Eingabebereich angezeigt wird.
Private Sub ExecuteSQL(CheckOnly As Boolean) Dim SQLError As Boolean If SQL = "" Then MsgBox "Bitte geben Sie eine SQL-Anweisung ein!", vbInformation Exit Sub End If Me.txtMessage.Value = "" If ReturnsData() Then If CheckOnly = False Then Me.lstData.RowSource = SQL Me.lstData.Requery On Error Resume Next Me.lstData.ColumnCount = Me.lstData.Recordset.Fields.Count If Err = 0 Then SQLError = False Else SQLError = True End If On Error GoTo 0 End If If SQLError = True Or CheckOnly = True Then Dim tempData As New Recordset With tempData .ActiveConnection = CurrentProject.Connection .Source = SQL .CursorType = adOpenStatic .LockType = adLockReadOnly .CursorLocation = adUseClient On Error Resume Next .Open If Err <> 0 Then Me.txtMessage.Value = Err.Description Me.tabMessage.SetFocus Me.tabData.Visible = False Else If CheckOnly Then Me.txtMessage.Value = "Die SQL-Anweisung wurde erfolgreich " _ & "geprüft" Me.tabMessage.SetFocus Me.tabData.Visible = False
Quellcode 1 (Start)
Else Me.tabData.Visible = True Me.tabData.SetFocus End If End If End With Else Me.tabData.Visible = True Me.tabData.SetFocus Me.txtMessage.Value = CStr(Me.lstData.ListCount - 1) _ & " Datensätze abgefragt" End If Else Me.tabMessage.SetFocus Me.tabData.Visible = False Dim RecordsAffected As Long If CheckOnly Then CurrentProject.Connection.BeginTrans On Error Resume Next CurrentProject.Connection.Execute SQL, RecordsAffected If Err <> 0 Then Me.txtMessage.Value = Err.Description Else If CheckOnly Then Me.txtMessage.Value = "Die SQL-Anweisung wurde erfolgreich geprüft" Else Me.txtMessage.Value = CStr(RecordsAffected) & " Datensätze betroffen" End If End If If CheckOnly Then CurrentProject.Connection.RollbackTrans End If Me.txtSQL.SetFocus Me.txtSQL.SelLength = 0 End Sub