{"id":55000134,"date":"2003-12-01T00:00:00","date_gmt":"2021-02-11T20:47:17","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=134"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"QueryAnalyzer_fuer_Access","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/","title":{"rendered":"Query-Analyzer f&uuml;r Access"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/855ef14e17b5410dbb4a8451136c9b05\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Christoph Spielmann, D&uuml;sseldorf<\/b><\/p>\n<p><b>Wenn Sie schon einmal mit dem Microsoft SQL-Server gearbeitet haben, werden Sie sicherlich den Query-Analyzer sch&auml;tzen gelernt haben. Mit diesem Tool k&ouml;nnen Sie schnell und einfach eine SQL-Abfrage ausf&uuml;hren und das Ergebnis begutachten. Dieser Artikel stellt Ihnen einen Query-Analyzer zum Einsatz unter Access vor.<\/b><\/p>\n<p>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&uuml;r das  Betriebssystem OS\/2 herausgebracht, das damals noch unter der Federf&uuml;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&uuml;r Unix und VMS. Das Typische f&uuml;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&uuml;gen von Benutzern, die Vergabe von Zugriffsrechten und nat&uuml;rlich auch das Abfragen von Daten. Die Eingabe von SQL-Anweisungen erfolgt hierbei &uuml;ber den Query-Analyzer (siehe Bild 1) beziehungsweise das DOS-Gegenst&uuml;ck &#8222;iSQL&#8220;. Erst sp&auml;ter stellte Microsoft mit dem Enterprise-Manager eine Benutzeroberfl&auml;che zur Verf&uuml;gung, die dem Benutzer Aufgaben wie beispielsweise die Anlage von Tabellen auch ohne komplizierte SQL-Anweisungen erm&ouml;glichte.<\/p>\n<p><IMG height=\"410\" src=\"..\/fileadmin\/_temp_\/{FE2AB2C6-0CBB-439A-ABC3-198D8DD43089}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Der Query-Analyzer des Microsoft SQL-Servers<\/span><\/b><\/p>\n<p>Trotz Enterprise-Managers wird der Query-Analyzer noch von vielen Benutzern eingesetzt, da zum Beispiel die Eingabe von DELETE FROM Kunden zum L&ouml;schen von Datens&auml;tzen f&uuml;r viele der schnellste Weg ist.<\/p>\n<p>Auch zum Test und zur Fehlerbehebung von SQL-Anweisungen ist der Query-Analyzer gut geeignet.<\/p>\n<p>Die hier vorgestellte L&ouml;sung des Query-Analyzers bietet die wichtigsten Funktionen nun auch unter Access. Hierzu z&auml;hlen die Eingabe und Ausf&uuml;hrung von SQL-Statements sowie das Speichern und Laden von Abfragen.<\/p>\n<p><IMG height=\"365\" src=\"..\/fileadmin\/_temp_\/{FE2AB2C6-0CBB-439A-ABC3-198D8DD43089}\/pic002.png\" width=\"467\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Erforderliche Verweise zum Einsatz des Query-Analyzers<\/span><\/b><\/p>\n<p><IMG height=\"362\" src=\"..\/fileadmin\/_temp_\/{FE2AB2C6-0CBB-439A-ABC3-198D8DD43089}\/pic003.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3:  Der Access-Query-Analyzer in der Ergebnistabellenansicht &#8230;<\/span><\/b><\/p>\n<p><IMG height=\"362\" src=\"..\/fileadmin\/_temp_\/{FE2AB2C6-0CBB-439A-ABC3-198D8DD43089}\/pic004.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4:  &#8230; und in der Ergebnisansicht<\/span><\/b><\/p>\n<p>Der Query-Analyzer f&uuml;r Access besteht aus einem einzelnen Formular, das Sie problemlos in Ihre Datenbank importieren k&ouml;nnen. Von dort aus k&ouml;nnen Sie den Query-Analyzer dann aus dem Datenbankfenster heraus &ouml;ffnen und einsetzen.<\/p>\n<p>Voraussetzung ist lediglich, dass Sie Ihrem Projekt Verweise auf die Objekte ADO und ADOX hinzuf&uuml;gen (siehe Bild 2).<\/p>\n<p>Ein Einsatz des Query-Analyzers als Add-In ist leider nicht m&ouml;glich, wie sp&auml;ter noch erl&auml;utert wird.<\/p>\n<p><b>Eingabe- und Ergebnisbereich<\/b><\/p>\n<p>Das Formular des Query-Analyzers ist zweigeteilt. Im oberen Bereich befindet sich der Eingabebereich f&uuml;r SQL-Anweisungen. <\/p>\n<p>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.<\/p>\n<p>Bei allen anderen Anweisungen &#8211; die keine Datens&auml;tze zur&uuml;ckliefern &#8211; erscheint eine entsprechende Meldung.<\/p>\n<p>Daten und Meldungen sind im unteren Bereich durch ein Register-Steuerelement umschaltbar (s. Abb. 3 und Abb. 4).<\/p>\n<p>Bei SELECT-Abfragen wird automatisch die Ergebnistabelle gef&uuml;llt. Als Meldung wird die Anzahl der zur&uuml;ckgelieferten Datens&auml;tze ausgegeben.<\/p>\n<p>Bei allen anderen Abfrage-Typen (zum Beispiel DELETE, UPDATE oder INSERT INTO) wird das Register Daten automatisch ausgeblendet und lediglich das Meldungsfenster angezeigt.<\/p>\n<p>Hier wird dann die Anzahl der von der Anweisung betroffenen Datens&auml;tze ausgegeben.<\/p>\n<p>Bei DELETE-Anweisungen ist dies zum Beispiel die Anzahl der gel&ouml;schten Datens&auml;tze. <\/p>\n<p>Sollte die angegebene Anweisung einen Fehler enthalten, wird dieser ebenfalls als Meldung ausgegeben (siehe Bild 5).<\/p>\n<p><IMG height=\"362\" src=\"..\/fileadmin\/_temp_\/{FE2AB2C6-0CBB-439A-ABC3-198D8DD43089}\/pic005.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5:  Die Anzeige einer Fehlermeldung<\/span><\/b><\/p>\n<p><IMG height=\"362\" src=\"..\/fileadmin\/_temp_\/{FE2AB2C6-0CBB-439A-ABC3-198D8DD43089}\/pic006.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6:  Auswahl einer gespeicherten Abfrage<\/span><\/b><\/p>\n<p><b>Ausf&uuml;hren undpr&uuml;fen von Anweisungen<\/b><\/p>\n<p>Im Kopf des Query-Analyzers befindet sich eine Symbolleiste. Mit Hilfe des Pfeil-Symbols f&uuml;hren Sie die aktuelle Abfrage aus. Alternativ k&ouml;nnen Sie die SQL-Anweisung auch nach dem Vorbild des SQL-Servers mit der Taste F5 starten.<\/p>\n<p>Eine besondere Bedeutung hat das Pr&uuml;f-Symbol direkt links daneben. Hiermit k&ouml;nnen Sie eine Abfrage pr&uuml;fen, ohne dass hierbei die Daten ver&auml;ndert werden. Dies ist insbesondere bei komplexen L&ouml;schabfragen hilfreich.<\/p>\n<p><b>&ouml;ffnen undspeichern vonAbfragen<\/b><\/p>\n<p>Eine weitere wichtige Funktion ist das Speichern und &ouml;ffnen einer Abfrage.<\/p>\n<p>Zu diesem Zweck stehen im Kopfbereich zwei entsprechende Symbole zur Verf&uuml;gung.<\/p>\n<p>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.<\/p>\n<p>Auch beim Laden einer Abfrage greifen Sie auf alle Access-Abfragen zu.<\/p>\n<p>Beim Laden einer Abfrage &auml;ndert sich der Eingabebereich des Query-Analyzers in eine Auswahlliste (siehe Bild 6).<\/p>\n<p>Hier k&ouml;nnen Sie eine Abfrage durch einen Doppelklick ausw&auml;hlen, deren SQL-Anweisung dann im Eingabebereich angezeigt wird.<\/p>\n<pre>Private Sub ExecuteSQL(CheckOnly As Boolean)\r\n    Dim SQLError As Boolean\r\n    If SQL = \"\" Then\r\n        MsgBox \"Bitte geben Sie eine SQL-Anweisung ein!\", vbInformation\r\n        Exit Sub\r\n    End If\r\n    Me.txtMessage.Value = \"\"\r\n    If ReturnsData() Then\r\n        If CheckOnly = False Then\r\n            Me.lstData.RowSource = SQL\r\n            Me.lstData.Requery\r\n            On Error Resume Next\r\n            Me.lstData.ColumnCount = Me.lstData.Recordset.Fields.Count\r\n            If Err = 0 Then\r\n                SQLError = False\r\n            Else\r\n                SQLError = True\r\n            End If\r\n            On Error GoTo 0\r\n        End If\r\n        If SQLError = True Or CheckOnly = True Then\r\n            Dim tempData As New Recordset\r\n            With tempData\r\n                .ActiveConnection = CurrentProject.Connection\r\n                .Source = SQL\r\n                .CursorType = adOpenStatic\r\n                .LockType = adLockReadOnly\r\n                .CursorLocation = adUseClient\r\n                On Error Resume Next\r\n                .Open\r\n                If Err &lt;&gt; 0 Then\r\n                    Me.txtMessage.Value = Err.Description\r\n                    Me.tabMessage.SetFocus\r\n                    Me.tabData.Visible = False\r\n                Else\r\n                    If CheckOnly Then\r\n                        Me.txtMessage.Value = \"Die SQL-Anweisung wurde erfolgreich \" _                            & \"gepr&uuml;ft\"\r\n                        Me.tabMessage.SetFocus\r\n                        Me.tabData.Visible = False<\/pre>\n<p><b>Quellcode 1 (Start)<\/b><\/p>\n<pre>                    Else\r\n                        Me.tabData.Visible = True\r\n                        Me.tabData.SetFocus\r\n                    End If\r\n                End If\r\n            End With\r\n        Else\r\n            Me.tabData.Visible = True\r\n            Me.tabData.SetFocus\r\n            Me.txtMessage.Value = CStr(Me.lstData.ListCount - 1) _                & \" Datens&auml;tze abgefragt\"\r\n        End If\r\n    Else\r\n        Me.tabMessage.SetFocus\r\n        Me.tabData.Visible = False\r\n        Dim RecordsAffected As Long\r\n        If CheckOnly Then CurrentProject.Connection.BeginTrans\r\n        On Error Resume Next\r\n        CurrentProject.Connection.Execute SQL, RecordsAffected\r\n        If Err &lt;&gt; 0 Then\r\n            Me.txtMessage.Value = Err.Description\r\n        Else\r\n            If CheckOnly Then\r\n                Me.txtMessage.Value = \"Die SQL-Anweisung wurde erfolgreich gepr&uuml;ft\"\r\n            Else\r\n                Me.txtMessage.Value = CStr(RecordsAffected) & \" Datens&auml;tze betroffen\"\r\n            End If\r\n        End If\r\n        If CheckOnly Then CurrentProject.Connection.RollbackTrans\r\n    End If\r\n    Me.txtSQL.SetFocus\r\n    Me.txtSQL.SelLength = 0\r\nEnd Sub<\/pre>\n<p><!--30percent--><\/p>\n<p><b>Quellcode 1 (Fortsetzung)<\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>Auf der CD zu dieser Ausgabe finden Sie zwei Versionen des Query-Analyzers, eine f&uuml;r Access XP und eine f&uuml;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&ouml;glich, weswegen die Spaltenanzahl immer auf 255 gesetzt wird. Weiterhin ist die Erkennung von Fehlern in der SQL-Anweisung bei der XP-Variante zuverl&auml;ssiger. Die 2000er-Variante geht dagegen schon dann von einem Fehler in der Anweisung aus, wenn keine Datens&auml;tze zur&uuml;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&uuml;r Access XP beschrieben. <\/p>\n<p>Damit der Query-Analyzer problemlos in andere Datenbanken importiert werden kann, befindet sich die gesamte Logik innerhalb des Formulars frmQueryAnalyzer beziehungsweise dem dazugeh&ouml;rigen Formularmodul.<\/p>\n<p>Dies ist auch der Grund daf&uuml;r, warum beim &ouml;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.<\/p>\n<p><IMG height=\"392\" src=\"..\/fileadmin\/_temp_\/{FE2AB2C6-0CBB-439A-ABC3-198D8DD43089}\/pic007.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7:  Der Query-Analyzer in der Entwurfsansicht<\/span><\/b><\/p>\n<p><b>Ausf&uuml;hren einer Abfrage<\/b><\/p>\n<p>Das Ausf&uuml;hren einer Abfrage erledigt die Prozedur ExecuteSQL (s. Quellcode 1).<\/p>\n<p>Die Prozedur pr&uuml;ft zun&auml;chst, ob &uuml;berhaupt eine SQL-Anweisung eingegeben wurde. Wenn dies nicht der Fall ist, gibt sie eine Fehlermeldung aus.<\/p>\n<p>Anschlie&szlig;end wird ein eventuell vorhandener Meldungstext gel&ouml;scht und mittels ReturnsData-Funktion gepr&uuml;ft, ob es sich bei der SQL-Anweisung um eine Auswahl-Abfrage (SELECT) oder eine Aktionsabfrage (DELETE, INSERT INTO, UPDATE &#8230;) handelt.<\/p>\n<p>Den Aufbau dieser Funktion lernen Sie sp&auml;ter noch kennen.<\/p>\n<p>Im Falle einer Auswahlabfrage muss das Ergebnis abgefragt und angezeigt werden. Zu diesem Zweck befindet sich im Ergebnisbereich ein Listenfeld namens lstData. Diesem wird mittels RowSource-Eigenschaft die SQL-Anweisung zugewiesen und das Ergebnis mittels Requery-Methode abgefragt und angezeigt.<\/p>\n<p>Schlie&szlig;lich wird noch die Anzahl der Felder ermittelt und diese der ColumnCount-Eigenschaft zugewiesen. Diese Anweisung ist in eine Fehlerbehandlung mittels On Error Resume Next gekapselt. Das hat den folgenden Grund: Wenn die SQL-Anweisung fehlerhaft ist, tritt beim Aufruf der Requery-Methode kein Fehler auf. Dies ist jedoch beim Zugriff auf die Recordset-Eigenschaft der Fall. Hier muss der Fehler also abgefangen werden. Zus&auml;tzlich wird die Variable SQLError auf True gesetzt, um den nachfolgenden Anweisungen mitzuteilen, dass die SQL-Anweisung einen Fehler enth&auml;lt.<\/p>\n<p>Zur Vervollst&auml;ndigung sei noch erw&auml;hnt, dass die Aktualisierung der Liste nur dann erfolgt, wenn die SQL-Anweisung nicht gepr&uuml;ft, also wirklich ausgef&uuml;hrt werden soll.<\/p>\n<h3>Hinweis<\/h3>\n<p>Der Einsatz des Listenfeldes ist der Grund daf&uuml;r, warum die Datenbank nicht als Add-In eingesetzt werden kann. Die RowSource-Eigenschaft des Listenfeldes kann nicht aus einem Add-In heraus auf die Daten der Benutzerdatenbank zur&uuml;ckgreifen. Die einzige L&ouml;sung w&auml;re, das Abfrageergebnis in einer dynamisch erzeugten Access-Tabelle zwischenzuspeichern, was jedoch insbesondere bei gro&szlig;en Datenmengen zu deutlichen Performanceeinbu&szlig;en f&uuml;hren w&uuml;rde.  <\/p>\n<pre>Private Property Get SQL() As String\r\n    Dim SQLText As String\r\n    Me.txtSQL.SetFocus\r\n    SQL = FullTrim(Me.txtSQL.Text)\r\nEnd Property<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<pre>Private Function FullTrim(ByVal Text As String) _    As String\r\n    Dim i As Integer\r\n    For i = 1 To Len(Text)\r\n        If Asc(Mid(Text, i, 1)) &lt; 32 Then\r\n            Mid(Text, i, 1) = \" \"\r\n        End If\r\n    Next i\r\n    FullTrim = Trim(Text)\r\nEnd Function<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<pre>Private Function ReturnsData() As Boolean\r\n    If Left(SQL, 6) = \"SELECT\" Then\r\n        ReturnsData = True\r\n    Else\r\n        ReturnsData = False\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<pre>Private Sub btnExecuteSQL_Click()\r\n    ExecuteSQL False\r\nEnd Sub<\/pre>\n<p><b>Quellcode 5<\/b><\/p>\n<pre>Private Sub txtSQL_KeyDown(KeyCode As _    Integer, Shift As Integer)\r\n    If KeyCode = 116 Then\r\n        ExecuteSQL False\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Quellcode 6<\/b><\/p>\n<p>Wenn in der SQL-Anweisung ein Fehler vorhanden ist, wird die Abfrage nochmals ausgef&uuml;hrt, diesmal jedoch unter Zuhilfenahme eines ADO-Recordset-Objekts.<\/p>\n<p>Bei der Ausf&uuml;hrung der Open-Methode tritt hier der erwartete Laufzeitfehler auf, dessen Meldung schlie&szlig;lich als Text ausgegeben wird.<\/p>\n<p>Das ADO-Recordset kommt auch dann zur Ausf&uuml;hrung, wenn die SQL-Anweisung lediglich gepr&uuml;ft werden sollte. Wenn die Pr&uuml;fung erfolgreich verl&auml;uft, erscheint eine Erfolgsmeldung, andernfalls eine Fehlermeldung.<\/p>\n<p>Je nachdem wird auch das Register Daten oder Meldung eingeblendet, damit der Benutzer das Ergebnis der SQL-Anweisung direkt begutachten kann.<\/p>\n<p>Im unteren Teil der ExecuteSQL-Prozedur befindet sich der Block zur Ausf&uuml;hrung von Aktionsabfragen. Wesentlich ist hierbei die Ausf&uuml;hrung der Execute-Methode des Objekts CurrentProject.Connection.<\/p>\n<p>Als Parameter werden der SQL-Befehl sowie die leere Variable RecordsAffected &uuml;bergeben.<\/p>\n<p>Letztere f&uuml;llt Access nach erfolgreicher Ausf&uuml;hrung mit der Anzahl der betroffenen Datens&auml;tze.<\/p>\n<p>Diese Information ist zum Beispiel bei L&ouml;sch- oder Aktualisierungsabfragen interessant. Sollte ein Fehler auftreten, erfolgt wieder die Ausgabe des Fehlertextes.<\/p>\n<p>Besondere Wichtigkeit liegt bei der Handhabung der Pr&uuml;f-Funktion: Da Aktionsabfragen die Daten ver&auml;ndern, muss mit Hilfe einer Transaktion gearbeitet werden.<\/p>\n<p>Diese wird mit CurrentProject.Connection.BeginTrans gestartet und am Ende der Pr&uuml;fung mit CurrentProject.Connection.Rollback wieder r&uuml;ckg&auml;ngig gemacht.<\/p>\n<h3>Hinweis<\/h3>\n<p>Transaktionen sind unter Access leider nicht sehr sicher. Anders als beim SQL-Server kann Access Transaktionen, die nicht durch Rollback oder CommitTrans beendet wurden, nicht mehr zur&uuml;ckfahren. Dies w&auml;re zum Beispiel bei einem Absturz von Access oder einem Stromausfall der Fall. Die Pr&uuml;f-Funktion ist also mit gewisser Vorsicht zu verwenden. <\/p>\n<pre>Private Sub btnOpen_Click()\r\n    Dim QueryList As String\r\n    Dim MyCatalog As New ADOX.Catalog\r\n    Dim i As Integer\r\n    MyCatalog.ActiveConnection = CurrentProject.Connection\r\n    For i = 0 To MyCatalog.Views.Count - 1\r\n         QueryList = QueryList + MyCatalog.Views(i).Name + \";\"\r\n    Next i\r\n    For i = 0 To MyCatalog.Procedures.Count - 1\r\n        If Left(MyCatalog.Procedures(i).Name, 1) &lt;&gt; \"~\" Then\r\n            QueryList = QueryList + MyCatalog.Procedures(i).Name + \";\"\r\n        End If\r\n    Next i\r\n    If Len(QueryList) &gt; 0 Then\r\n        QueryList = Left(QueryList, Len(QueryList) - 1)\r\n    End If\r\n    With Me.lstQueryList\r\n        .RowSource = QueryList\r\n    End With\r\n    SetQuerySelectMode True\r\nEnd Sub<\/pre>\n<p><b>Quellcode 7<\/b><\/p>\n<p><b>Einsatz von Hilfsfunktionen<\/b><\/p>\n<p>Wie bereits zu Beginn erw&auml;hnt, werden von der Prozedur ExecuteSQL einige Hilfsprozeduren verwendet.<\/p>\n<p>Eine hiervon ist als Eigenschaft ausgelegt. Sie tr&auml;gt den Namen SQL und ermittelt den vom Benutzer eingegebenen SQL-Text (Quellcode 2).<\/p>\n<p>Die Besonderheit ist hierbei, dass mit Hilfe der FullTrim-Eigenschaft alle f&uuml;hrenden Leerzeichen und Leerzeilen abgeschnitten werden. Die Funktion hat den in Quellcode 3 beschriebenen Aufbau.<\/p>\n<p>Mit einer Schleife werden hier alle Sonderzeichen mit einem ASCII-Code kleiner als 32 durch Leerzeichen ersetzt.<\/p>\n<p>Abschlie&szlig;end wird noch die Trim-Funktion von Access aufgerufen, um f&uuml;hrende und nachfolgende Leerzeichen abzuschneiden.<\/p>\n<p>Die Hilfsfunktion ReturnsData haben Sie bereits kennen gelernt. Sie pr&uuml;ft, ob es sich bei der Abfrage um eine Auswahl oder eine Aktionsabfrage handelt. Zu diesem Zweck pr&uuml;ft die Funktion, ob die SQL-Anweisung mit dem Text SELECT beginnt. Hierbei greift sie auf die SQL-Eigenschaft zu, die bereits f&uuml;hrende Leerzeichen und -zeilen entfernt hat (s. Quellcode 4).<\/p>\n<pre>Public Sub SetQuerySelectMode(Activate As Boolean)\r\n    If Activate Then\r\n        Me.lstQueryList.Visible = True\r\n        Me.lstQueryList.SetFocus\r\n        Me.txtSQL.Visible = False\r\n        Me.btnSelectQueryCancel.Visible = True\r\n        Me.btnSelectQueryOK.Visible = True\r\n    Else\r\n        Me.txtSQL.Visible = True\r\n        Me.txtSQL.SetFocus\r\n        Me.lstQueryList.Visible = False\r\n        Me.btnSelectQueryCancel.Visible = False\r\n        Me.btnSelectQueryOK.Visible = False\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Quellcode 8<\/b><\/p>\n<pre>Private Sub btnSelectQueryOK_Click()\r\n    If Me.lstQueryList.ItemsSelected.Count = 0 Then\r\n        MsgBox \"Bitte Abfrage markieren.\", vbInformation\r\n    Else\r\n        Dim SQLName As String\r\n        Dim MyCatalog As New ADOX.Catalog\r\n        Dim MyView As ADOX.View\r\n        Dim MyProc As ADOX.Procedure\r\n        MyCatalog.ActiveConnection = _            CurrentProject.Connection\r\n        SQLName = Me.lstQueryList.Value\r\n        On Error Resume Next\r\n        Set MyView = MyCatalog.Views(SQLName)\r\n        Me.txtSQL.Value = MyView.Command.CommandText\r\n        If Err &lt;&gt; 0 Then\r\n            Set MyProc = MyCatalog.Procedures(SQLName)\r\n            Me.txtSQL.Value = MyProc.Command.CommandText\r\n        End If\r\n        SetQuerySelectMode False\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Quellcode 9<\/b><\/p>\n<p>Der Start der ExecuteSQL-Funktion erfolgt sowohl von der Schaltfl&auml;che der Symbolleiste aus, als auch durch Dr&uuml;cken der Taste F5.<\/p>\n<p>Hierf&uuml;r sind die folgenden beiden Ereignisprozeduren aus Quellcode 5 und 6 verantwortlich. Letztere ist mit dem KeyDown-Ereignis des Textfeldes verbunden. Sie pr&uuml;ft, ob es sich bei dem KeyCode um die Nummer 116 handelt, die der F5-Taste entspricht.<\/p>\n<p><b>Laden von SQL-Anweisungen<\/b><\/p>\n<p>Das Laden von SQL-Anweisungen erledigt die Ereignisprozedur btnOpen_Click (s. Quellcode 7).<\/p>\n<p>Die Prozedur erzeugt eine Liste aller Abfragen, indem sie mittels ADOX die Namen aller Auswahl-Abfragen (View) und Aktionsabfragen (Procedures) zu einer mit Semikolons getrennten Zeichenkette zusammen stellt und diese der Auswahlliste lstQueryList als Werteliste zuweist. Bei Aktionsabfragen werden hierbei die von Access angelegten tempor&auml;ren Abfragen ignoriert. Diese sind an einer f&uuml;hrenden Tilde im Namen zu erkennen.<\/p>\n<p>Nach F&uuml;llen der Liste wird das Formular in den Abfrageauswahlmodus umgeschaltet. Dies bedeutet, dass der Eingabebereich ausgeblendet und die Auswahlliste zusammen mit den beiden Schaltfl&auml;chen OK und Abbrechen eingeblendet wird. Diese Aufgabe erledigt die Prozedur SetQuerySelectMode (s. Quellcode 8).<\/p>\n<p>Sofern der Benutzer eine Abfrage ausgew&auml;hlt und auf OK geklickt hat, wird die Prozedur aus Quellcode 9 ausgef&uuml;hrt. Diese greift mittels ADOX auf die Abfrage zu und liest die SQL-Anweisung aus. Da die Prozedur anhand des Namens nicht unterscheiden kann, ob es sich um eine Auswahlabfrage (View) oder eine Aktionsabfrage (Procedure) handelt, versucht sie zun&auml;chst den Zugriff per View und im Fehlerfall einen  Zugriff per Procedure. Die Anweisung wird schlie&szlig;lich mit der Command.CommandText-Eigenschaft ausgelesen und in das Eingabefeld eingetragen. Abschlie&szlig;end erfolgt durch Aufruf der SetQuerySelectMode-Prozedur wieder eine Umschaltung vom Abfrageauswahlmodus in den Eingabemodus.<\/p>\n<pre>Private Sub btnSave_Click()\r\n    If SQL = \"\" Then\r\n        MsgBox \"SQL-Anweisung eingeben!\", vbInformation\r\n        Exit Sub\r\n    End If\r\n    Dim QueryName  As String\r\n    Dim MyCommand As New ADODB.Command\r\n    QueryName = InputBox(\"Abfragename\")\r\n    If Len(QueryName) &gt; 0 Then\r\n    On Error GoTo ErrHandler\r\n        Dim MyCatalog As New ADOX.Catalog\r\n        MyCatalog.ActiveConnection = _            CurrentProject.Connection\r\n        If ReturnsData Then\r\n            MyCommand.CommandText = SQL\r\n            MyCatalog.Views.Append QueryName, MyCommand\r\n        Else\r\n            MyCommand.CommandText = SQL\r\n            MyCatalog.Procedures.Append QueryName, _                MyCommand\r\n        End If\r\n    End If\r\n    Exit Sub\r\nErrHandler:\r\n    MsgBox Err.Description, vbCritical\r\n    Exit Sub\r\nEnd Sub<\/pre>\n<p><b>Quellcode 10<\/b><\/p>\n<p><b>Speichern von SQL-Anweisungen<\/b><\/p>\n<p>Das Speichern von SQL-Anweisungen funktioniert ebenfalls mit ADOX:<\/p>\n<p>Nach der Pr&uuml;fung, ob eine SQL-Anweisung vorhanden ist, wird der Benutzer zur Eingabe eines Abfragenamens aufgefordert. Danach erfolgt die Anlage der View beziehungsweise Procedure (s. Quellcode 10).<\/p>\n<p>Unter Umst&auml;nden ist die neue Abfrage nicht direkt im Datenbankfenster sichtbar.<\/p>\n<p>Schalten Sie in diesem Fall einfach in ein anderes Register um und danach in das Abfragen-Register zur&uuml;ck.<\/p>\n<h3>Hinweis<\/h3>\n<p>Aus Sicherheitsgr&uuml;nden &uuml;berschreibt der Query-Analyzer generell keine Abfragen. Sollten Sie also eine Abfrage &ouml;ffnen, modifizieren und dann wieder unter dem gleichen Namen speichern, tritt ein Fehler auf. L&ouml;schen Sie in diesem Fall die Abfrage vorher aus dem Datenbankfenster von Access. <\/p>\n<p>Der Query-Analyzer d&uuml;rfte bereits im jetzigen Zustand f&uuml;r Access-Anwender mit SQL-Know-how eine deutliche Arbeitserleichterung bedeuten.<\/p>\n<p>Trotzdem besteht nat&uuml;rlich Potenzial f&uuml;r weitere Entwicklungen. Denkbar w&auml;ren zum Beispiel die folgenden Funktionen:<\/p>\n<li>&uuml;bersichtliche Formatierung von SQL-Anweisungen<\/li>\n<li>Implementierung als Add-In unter Inkaufnahme der Performance-Nachteile<\/li>\n<li>Speichern von Abfragen au&szlig;erhalb von Access als Textdateien<\/li>\n<li>Unterst&uuml;tzung von SQL-Scripten nach dem Vorbild des SQL-Servers<\/li>\n<p>Falls Sie weitere Anregungen und Ideen haben, senden Sie diese einfach per Mail an vorschlaege@access-im-unternehmen.de.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>acc0503ml01_XP.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/EBEA0636-C1CA-45F6-9E33-EB411F0654E3\/aiu_134.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Sie schon einmal mit dem Microsoft SQL-Server gearbeitet haben, werden Sie sicherlich den Query-Analyzer sch&auml;tzen gelernt haben. Mit diesem Tool k&ouml;nnen Sie schnell und einfach eine SQL-Abfrage ausf&uuml;hren und das Ergebnis begutachten. Dieser Artikel stellt Ihnen einen Query-Analyzer zum Einsatz unter Access vor.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662003,66062003,44000029,44000027],"tags":[],"class_list":["post-55000134","post","type-post","status-publish","format-standard","hentry","category-662003","category-66062003","category-Abfragetechnik_und_SQL","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Query-Analyzer f&uuml;r Access - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Query-Analyzer f&uuml;r Access\" \/>\n<meta property=\"og:description\" content=\"Wenn Sie schon einmal mit dem Microsoft SQL-Server gearbeitet haben, werden Sie sicherlich den Query-Analyzer sch&auml;tzen gelernt haben. Mit diesem Tool k&ouml;nnen Sie schnell und einfach eine SQL-Abfrage ausf&uuml;hren und das Ergebnis begutachten. Dieser Artikel stellt Ihnen einen Query-Analyzer zum Einsatz unter Access vor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T20:47:17+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/855ef14e17b5410dbb4a8451136c9b05\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Query-Analyzer f&uuml;r Access\",\"datePublished\":\"2021-02-11T20:47:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/\"},\"wordCount\":2239,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/855ef14e17b5410dbb4a8451136c9b05\",\"articleSection\":[\"2003\",\"6\\\/2003\",\"Abfragetechnik und SQL\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/\",\"name\":\"Query-Analyzer f&uuml;r Access - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/855ef14e17b5410dbb4a8451136c9b05\",\"datePublished\":\"2021-02-11T20:47:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/855ef14e17b5410dbb4a8451136c9b05\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/855ef14e17b5410dbb4a8451136c9b05\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/QueryAnalyzer_fuer_Access\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Query-Analyzer f&uuml;r Access\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Query-Analyzer f&uuml;r Access - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/","og_locale":"de_DE","og_type":"article","og_title":"Query-Analyzer f&uuml;r Access","og_description":"Wenn Sie schon einmal mit dem Microsoft SQL-Server gearbeitet haben, werden Sie sicherlich den Query-Analyzer sch&auml;tzen gelernt haben. Mit diesem Tool k&ouml;nnen Sie schnell und einfach eine SQL-Abfrage ausf&uuml;hren und das Ergebnis begutachten. Dieser Artikel stellt Ihnen einen Query-Analyzer zum Einsatz unter Access vor.","og_url":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T20:47:17+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/855ef14e17b5410dbb4a8451136c9b05","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Query-Analyzer f&uuml;r Access","datePublished":"2021-02-11T20:47:17+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/"},"wordCount":2239,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/855ef14e17b5410dbb4a8451136c9b05","articleSection":["2003","6\/2003","Abfragetechnik und SQL","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/","url":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/","name":"Query-Analyzer f&uuml;r Access - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/855ef14e17b5410dbb4a8451136c9b05","datePublished":"2021-02-11T20:47:17+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/855ef14e17b5410dbb4a8451136c9b05","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/855ef14e17b5410dbb4a8451136c9b05"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/QueryAnalyzer_fuer_Access\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Query-Analyzer f&uuml;r Access"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000134"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000134\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}