Query-Analyzer für Access

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

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

Quellcode 1 (Fortsetzung)

Hinweis

Auf der CD zu dieser Ausgabe finden Sie zwei Versionen des Query-Analyzers, eine für Access XP und eine für Access 2000. Der Unterschied besteht darin, dass in der Access-XP-Version die Anzahl der Spalten mit Hilfe der Recordset-Eigenschaft des Listenfeldes ermittelt werden kann. Dies ist bei Access 2000 leider nicht möglich, weswegen die Spaltenanzahl immer auf 255 gesetzt wird. Weiterhin ist die Erkennung von Fehlern in der SQL-Anweisung bei der XP-Variante zuverlässiger. Die 2000er-Variante geht dagegen schon dann von einem Fehler in der Anweisung aus, wenn keine Datensätze zurückgeliefert werden (was ja nicht unbedingt einem Fehler in der Anweisung gleichkommt). In der Praxis hat dies jedoch kaum negative Auswirkungen. Aufgrund des besseren Funktionsumfangs wird im Folgenden die Version für Access XP beschrieben.

Damit der Query-Analyzer problemlos in andere Datenbanken importiert werden kann, befindet sich die gesamte Logik innerhalb des Formulars frmQueryAnalyzer beziehungsweise dem dazugehörigen Formularmodul.

Dies ist auch der Grund dafür, warum beim öffnen einer gespeicherten Abfrage nicht ein Auswahlfenster erscheint, sondern der obere Eingabebereich des Formulars durch eine Auswahlliste ersetzt wird. Abbildung 7 zeigt den Aufbau des Formulars in der Entwurfsansicht.

Bild 7: Der Query-Analyzer in der Entwurfsansicht

Ausführen einer Abfrage

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

Schreibe einen Kommentar