{"id":55001021,"date":"2016-02-01T00:00:00","date_gmt":"2020-05-22T19:04:23","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1021"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"SQLText_fuer_Filterbedingungen_mit_Klasse","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/","title":{"rendered":"SQL-Text f&uuml;r Filterbedingungen mit Klasse"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/8ab76f8cc1854c999b9bc90627760e94\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Mit dem Einsatz von Klassen k&ouml;nnen Sie Ihren Programmcode &uuml;bersichtlich gestalten. Wenn Sie konkrete Aufgaben mittels wiederverwendbarer Klassen umsetzen, erhalten Sie zus&auml;tzlich eine Code-Sammlung, die die Code-Qualit&auml;t erh&ouml;ht, weil Sie Korrekturen im Code nur noch an einer Stelle umsetzen m&uuml;ssen. Die in diesem Beitrag beschriebenen Klassen sind wiederverwendbare Klassen f&uuml;r die Erstellung eines Filterausdrucks, die Sie ohne &auml;nderung in Ihre Anwendung importieren und nutzen k&ouml;nnen.<\/b><\/p>\n<h2>Ziel<\/h2>\n<p>Das Erstellen von SQL-Filterausdr&uuml;cken soll standardisiert und ohne hohen Programmieraufwand f&uuml;r unterschiedliche SQL-Dialekte anwendbar werden.<\/p>\n<h2>Ausgangssituation<\/h2>\n<p>SQL-Text zum Filtern von Formulardaten oder als Bestandteil von SQL-Anweisungen f&uuml;r Recordsets wird regelm&auml;&szlig;ig ben&ouml;tigt. Beim Zusammenstellen der SQL-Anweisungen muss auf die passende Konvertierung in Text geachtet werden. Die Konvertierung sowie das Zusammenf&uuml;gen mehrerer Filter-Kriterien k&ouml;nnen zu schlecht lesbarem Code f&uuml;hren. Eine Sammlung von Hilfsprozeduren und Klassen soll diese Aufgaben vereinfachen.<\/p>\n<h2>Anforderungen<\/h2>\n<p>Die L&ouml;sung stellt die folgenden Anforderungen:<\/p>\n<ul>\n<li>Unterst&uuml;tzung f&uuml;r verschiedene SQL-Dialekte<\/li>\n<li>Unterschiedliche Einsatzm&ouml;glichkeiten &#8211; von der Konvertierung eines Wertes zu SQL-Text &uuml;ber das Erstellen eines einzelnen Kriteriums bis zur automatischen Filterung in Formularen, wenn Werte in Filter-Steuerelementen ge&auml;ndert werden.<\/li>\n<li>Definieren statt programmieren<\/li>\n<li>&uuml;bersichtlicher Code in den Prozeduren, die die Klassen verwenden<\/li>\n<li>Wiederverwendbarer Code<\/li>\n<\/ul>\n<h2>L&ouml;sungsansatz<\/h2>\n<p>Der L&ouml;sungsansatz beinhaltet die folgenden Elemente:<\/p>\n<ul>\n<li>Klassen mit konkreten Aufgaben (Single-Responsibility-Prinzip)<\/li>\n<li>Austauschbare Klassen &#8211; falls spezielle Anforderungen ben&ouml;tigt werden<\/li>\n<li>Anforderungen f&uuml;r unterschiedliche SQL-Dialekte &uuml;ber Parameter\/Eigenschaften einstellbar<\/li>\n<\/ul>\n<h2>Klasse SqlTools<\/h2>\n<p>Die Klasse <b>SqlTools <\/b>stellt Methoden zum Erstellen eines SQL-Ausdrucks bereit. Die Methoden <b>TextToSqlText<\/b>, <b>NumberToSqlText<\/b>, <b>DateToSqlText <\/b>und <b>BooleanToSqlText <\/b>konvertieren Werte mit einem bestimmten Datentyp in einen SQL-konformen Text.<\/p>\n<p>Damit diese Konvertierungsfunktion Text f&uuml;r verschiedene SQL-Dialekte erzeugen k&ouml;nnen, m&uuml;ssen Sie die gew&uuml;nschten Formate als Parameter an die Konvertier-Funktionen weitergeben oder Sie stellen die Formate mit den Eigenschaften <b>SqlDateFormat<\/b>, <b>SqlBooleanTrueString <\/b>und <b>SqlWildCardString <\/b>f&uuml;r die Klassen-Instanz ein. Die Methode <b>ConvertToSqlText <\/b>bildet einen zentralen Einstiegspunkt dieser Konvertierungsfunktionen. In Listing 1 sehen Sie Ausz&uuml;ge aus der Beispiele-Datei <b>SqlTools_Beispiele.mdb<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>DatentypToSqlText()\r\n     [...]\r\n     FilterWert = DateSerial(2015, 12, 24)\r\n     SqlText = SqlTools.DateToSqlText(FilterWert, \"\\#yyyy-mm-dd\\#\")\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Aus \"; FilterWert; \" wird \"; SqlText\r\n     '' --&gt; Aus 24.12.2015  wird #2015-12-24#\r\n     [...]\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>ConvertToSqlText_JetDaoDialekt()\r\n     [...]\r\n     ''SQL-Formate einstellen\r\n     <span style=\"color:blue;\">With<\/span> SqlTools\r\n         .SqlDateFormat = \"\\#yyyy-mm-dd\\#\"\r\n         .SqlBooleanTrueString = \"True\"\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     [...]\r\n     FilterWert = DateSerial(2015, 12, 24)\r\n     SqlText = SqlTools.ConvertToSqlText(FilterWert, SQL_Date)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Aus \"; FilterWert; \" wird \"; SqlText\r\n     [...]\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Einsatz der Konvertierungsfunktionen<\/span><\/b><\/p>\n<p>Zum Erstellen eines Filterausdrucks &uuml;bergeben Sie den Datenfeldnamen, den Datentyp, den gew&uuml;nschten Vergleichsausdruck und den Wert an die Methode <b>BuildCriteria<\/b>. Innerhalb der Methode wird der Wert &uuml;ber die Konvertierungsfunktion f&uuml;r den jeweiligen Datentyp in SQL-Text umgeformt. Aus den <b>Enum<\/b>-Werten vom <b>RelationalOperator<\/b>-Parameter wird der Vergleichsausdruck erstellt.<\/p>\n<p>Diese Texte werden mit dem Feldnamen zu einem Filterausdruck zusammengef&uuml;gt und als Funktionsergebnis zur&uuml;ckgegeben. Die Beispiele in Listing 2 zeigen &uuml;bliche Varianten f&uuml;r Vergleichsausdr&uuml;cke.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>BuildCriteria_EqualGreaterThan()\r\n     [...]\r\n     FilterWert = \"O''Neill\"\r\n     SqlText = SqlTools.BuildCriteria(\"Textfeld\", SQL_Text, SQL_Equal + SQL_GreaterThan, FilterWert)\r\n    <span style=\"color:blue;\">Debug.Print<\/span> \"SQL_Text:\", SqlText\r\n    '' --&gt; Textfeld &gt;= ''O''''Neill''\r\n     [...]\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>BuildCriteria_Like()\r\n     [...]\r\n    FilterWert = \"abc\"\r\n    SqlText = SqlTools.BuildCriteria(\"Textfeld\", SQL_Text, SQL_Like, FilterWert)\r\n    <span style=\"color:blue;\">Debug.Print<\/span> \"SQL_Text:\", SqlText\r\n    '' --&gt; Textfeld Like ''abc''\r\n    FilterWert = \"a\"\r\n    SqlText = SqlTools.BuildCriteria(\"Textfeld\", SQL_Text, SQL_Like + SQL_Add_WildCardSuffix, FilterWert)\r\n    <span style=\"color:blue;\">Debug.Print<\/span> \"SQL_Text:\", SqlText\r\n    '' --&gt; Textfeld Like ''a*''\r\n    FilterWert = \"c\"\r\n    SqlText = SqlTools.BuildCriteria(\"Textfeld\", SQL_Text, SQL_Like + SQL_Add_WildCardPrefix, FilterWert)\r\n    <span style=\"color:blue;\">Debug.Print<\/span> \"SQL_Text:\", SqlText\r\n    '' --&gt; Textfeld Like ''*c''\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: BuildCriteria-Beispiele<\/span><\/b><\/p>\n<p>F&uuml;r <b>Between<\/b>-Filterbedingungen gibt es spezielle Features in der <b>SqlTools<\/b>-Klasse. Wenn Sie beispielsweise einen Datumsfilter erzeugen wollen und in den zu filternden Werten auch die Uhrzeit enthalten ist, k&ouml;nnen Sie <b>SQL_Add_WildCardSuffix <\/b>verwenden, um den ganzen Tag des Ende-Datums anzugeben. Der <b>Between<\/b>-Ausdruck wird zu einem <b>Feld >= Startdatum And Feld < (EndDatum+1)<\/b>-Ausdruck umgeschrieben.<\/p>\n<p>&uuml;bergeben Sie <b>Null<\/b> an einen der Wert-Parameter, wird der <b>Between<\/b>-Ausdruck wieder umgeformt, da <b>Null <\/b>standardm&auml;&szlig;ig als Filterwert nicht ber&uuml;cksichtigt werden soll. Beispiele zu diesen Features sehen Sie in Listing 3.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>BuildCriteria_Between_Features()\r\n     [...]\r\n     ''Datum + SQL_Add_WildCardSuffix:\r\n     ErsterWert = DateSerial(2015, 12, 1)\r\n     ZweiterWert = DateSerial(2015, 12, 31)\r\n     SqlText = SqlTools.BuildCriteria(\"Datumsfeld\", SQL_Date, _\r\n         SQL_Between + SQL_Add_WildCardSuffix, ErsterWert, ZweiterWert)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"SQL_Date + SQL_Add_WildCardSuffix: zwischen \"; _\r\n         ErsterWert; \"und \"; ZweiterWert; \"ergibt:\"; vbNewLine; SqlText\r\n     '' --&gt; Datumsfeld &gt;= #2015-12-01# And Datumsfeld &lt; #2016-01-01#\r\n     ''Nullwerte:\r\n     ErsterWert = 1\r\n     ZweiterWert = Null\r\n     SqlText = SqlTools.BuildCriteria(\"Zahlenfeld\", SQL_Numeric, _\r\n         SQL_Between, ErsterWert, ZweiterWert)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"ZweiterWert = Null: \"; SqlText\r\n     '' --&gt; Zahlenfeld &gt;= 1\r\n     ErsterWert = Null\r\n     ZweiterWert = 5\r\n     SqlText = SqlTools.BuildCriteria(\"Zahlenfeld\", SQL_Numeric, _\r\n         SQL_Between, ErsterWert, ZweiterWert)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"ErsterWert = Null: \"; SqlText\r\n     '' --&gt; Zahlenfeld &lt;= 5\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 3: BuildCriteria: Between-Features<\/span><\/b><\/p>\n<p>Wie Ihnen bereits bei der <b>Between<\/b>-Bedingung aufgefallen ist, kann man an die <b>BuildCriteria<\/b>-Methode mehr als einen Filterwert f&uuml;r eine Filterbedingung &uuml;bergeben. F&uuml;r einen <b>Between<\/b>-Ausdruck werden immer zwei Werte ben&ouml;tigt. F&uuml;r einen <b>In<\/b>-Filterausdruck k&ouml;nnen Sie ein Array als &uuml;bergabewert verwenden.<\/p>\n<p>Listing 4 zeigt neben der <b>In<\/b>-Variante noch eine weitere Variante, mit der Sie mehrere Filterwerte f&uuml;r ein Datenfeld in einer <b>BuildCriteria<\/b>-Zeile verwenden k&ouml;nnen. Wenn Sie ein Array mit Werten &uuml;bergeben und als <b>RelationalOperator <\/b>nicht <b>SQL_In <\/b>verwenden, wird f&uuml;r jeden Array-Wert ein Filterausdruck erzeugt und diese Filterausdr&uuml;cke werden mit <b>Or <\/b>verbunden.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>BuildCriteria_ArrayUebergabe()\r\n     [...]\r\n     '' In(...):\r\n     SqlText = SqlTools.BuildCriteria(\"Textfeld\", SQL_Text, _\r\n         SQL_In, Array(\"a\", \"c\", \"l\"))\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"SQL_Text, In(...):\", SqlText\r\n     '' --&gt; Textfeld In (''a'',''c'',''l'')\r\n     SqlText = SqlTools.BuildCriteria(\"Zahlenfeld\", SQL_Numeric, _\r\n         SQL_In, Array(1, 3, 5))\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"SQL_Numeric, In(...):\", SqlText\r\n     '' --&gt; Zahlenfeld In (1,3,5)\r\n     '' Mehrere Filter mit Or kombiniert\r\n     SqlText = SqlTools.BuildCriteria(\"Textfeld\", SQL_Text, _\r\n         SQL_Like + SQL_Add_WildCardSuffix, Array(\"a\", \"c\", \"l\"))\r\n     '' --&gt; Textfeld Like ''a*'' Or Textfeld Like ''c*'' Or Textfeld Like ''l*''\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: BuildCriteria: Array-&uuml;bergabe<\/span><\/b><\/p>\n<p>Die bisher erw&auml;hnten Methoden und Eigenschaften sind f&uuml;r den Aufgabenbereich der Klasse ausreichend. In der Klasse sind noch zwei weitere Methoden enthalten, die die Verwendung der Klasse vereinfachen. Mit Clone k&ouml;nnen Sie eine vorhandene Instanz einschlie&szlig;lich der Formateinstellungen kopieren. NewInstance erm&ouml;glicht die Erstellung einer neuen Instanz mit der M&ouml;glichkeit, die SQL-Formate als Parameter einzustellen. Die letzten zwei Methoden sind n&uuml;tzlich, da SqlTools selbst-instanziierend gestaltet ist. Sie k&ouml;nnen den Klassennamen direkt in VBA einsetzen und auf eine Factory-Methode verzichten.<\/p>\n<p>Das ist vorteilhaft, wenn Sie haupts&auml;chlich einen bestimmten SQL-Dialekt verwenden und nur selten SQL-Text f&uuml;r einen anderen Dialekt ben&ouml;tigen. Sie m&uuml;ssen daf&uuml;r nur einmalig beim Anwendungsstart die SQL-Formate &uuml;bergeben oder im Code der SqlTools-Klasse die Konstanten im Klassenkopf f&uuml;r die Standardwerte entsprechend einstellen.<\/p>\n<h2>Klasse FilterStringBuilder<\/h2>\n<p>In vielen F&auml;llen werden mehr als ein Filterkriterium ben&ouml;tigt. F&uuml;r diese Aufgabe &#8211; das Zusammenf&uuml;hren von mehreren Filterbedingungen &#8211; ist die Klasse <b>FilterStringBuilder <\/b>zust&auml;ndig. Zum Erstellen eines kombinierten Filterausdrucks erzeugen Sie eine neue Instanz der <b>FilterStringBuilder<\/b>-Klasse. Falls die Instanz nicht die Standard-Instanz der <b>SqlTools <\/b>verwenden soll, &uuml;bergeben Sie an die Eigenschaft <b>SqlTool <\/b>eine passende Referenz von  einer <b>SqlTools<\/b>-Instanz oder Sie stellen &uuml;ber die Methode <b>ConfigSqlFormat <\/b>die ben&ouml;tigten SQL-Formate ein. F&uuml;r die Verwendung in einer Prozedur k&ouml;nnen Sie einen <b>With<\/b>-Ausdruck zum Erzeugen einer Instanz verwenden. In Listing 5 sehen Sie eine Grundstruktur f&uuml;r einen Code, der mittels <b>FilterStringBuilder<\/b> einen Filterausdruck erzeugt.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>FilterStringBuilder_Grundstruktur()\r\n     <span style=\"color:blue;\">Dim <\/span>FilterString<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">With<\/span> <span style=\"color:blue;\">New<\/span> FilterStringBuilder\r\n     ''SQL-Formate einstellen\r\n         .ConfigSqlFormat \"\\#yyyy-mm-dd\\#\", \"True\", \"*\"\r\n         ''oder neue SqlTools-Instanz erzeugen:\r\n         ''<span style=\"color:blue;\">Set<\/span> .SqlTool = SqlTools.Clone(\"\\#yyyy-mm-dd\\#\", \"True\", \"*\")\r\n         ''oder vorhandene SqlTools-Instanz verwenden:\r\n         ''<span style=\"color:blue;\">Set<\/span> .SqlTool = DaoSqlTools \r\n         ''Filterbedingungen anf&uuml;gen:\r\n         .Add \"Datumsfeld\", SQL_Date, SQL_LessThan, DateSerial(2015, 12, 24)\r\n         .Add \"Zahlenfeld\", SQL_Numeric, SQL_Equal + SQL_GreaterThan, 1.23\r\n         '' ...\r\n         ''Filterausdruck ausgeben:\r\n         FilterString = .ToString(SQL_And)\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     <span style=\"color:blue;\">Debug.Print<\/span> FilterString\r\n     '' --&gt; (Datumsfeld &lt; #2015-12-24#) And (Zahlenfeld &gt;= 1.23)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: FilterStringBuilder verwenden<\/span><\/b><\/p>\n<p>Die im Filterausdruck ben&ouml;tigten Kriterien f&uuml;gen Sie mittels <b>Add<\/b>-Methode an. Den Text f&uuml;r den SQL-Filterausdruck lesen Sie &uuml;ber die Methode <b>ToString <\/b>aus.<\/p>\n<p>In dieser Methode k&ouml;nnen Sie optional den Verkettungsausdruck einstellen, damit die einzelnen Filterbedingungen mit <b>And <\/b>oder <b>Or <\/b>verkettet werden. Verwenden Sie die Methode <b>AddCriteria <\/b>zum Anf&uuml;gen eines fertigen SQL-Textes als Filterausdruck. Die Parameter der <b>Add<\/b>-Methode sind identisch mit den Parametern der <b>BuildCriteria<\/b>-Methode aus der <b>SqlTools<\/b>-Klasse. Die Parameterwerte werden innerhalb der <b>Add<\/b>-Methode ohne Zwischenbearbeitung direkt an die <b>BuildCriteria<\/b>-Methode der eingestellten <b>SqlTools<\/b>-Instanz &uuml;bergeben.<\/p>\n<p>Ein Vorteil bei der Verwendung der <b>FilterStringBuilder<\/b>-Klasse ist, dass Filterwerte, die in der Ausschlussliste enthalten sind, nicht in den Filterstring &uuml;bernommen werden. Die Ausschlussliste k&ouml;nnen Sie &uuml;ber den Parameter <b>IgnoreValue <\/b>der <b>Add<\/b>-Methode je Filterbedingung einstellen. Als Standardwert ist <b>Null <\/b>eingestellt, da in der &uuml;blichen Verwendung bei Filtersteuerelementen in Formularen <b>Null <\/b>als Inhalt von leeren Steuerelementen nicht als Filterwert dienen soll, sondern der Filter auf das dazugeh&ouml;rige Feld nicht angewendet werden soll. Der Code in Listing 6 zeigt den Einsatz des Parameters <b>IgnoreValue<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>FilterStringBuilder_IgnoreValue()\r\n     <span style=\"color:blue;\">Dim <\/span>FilterString<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">With<\/span> <span style=\"color:blue;\">New<\/span> FilterStringBuilder\r\n         .ConfigSqlFormat \"\\#yyyy-mm-dd\\#\", \"True\", \"*\"\r\n    ''Filterbedingungen:\r\n       .Add \"A\", SQL_Text, SQL_Equal, vbNullString\r\n       .Add \"B\", SQL_Text, SQL_Equal, vbNullString, , _\r\n                 Array(Null, vbNullString)\r\n       .Add \"C\", SQL_Numeric, SQL_In, Array(1, 3, 5, 7, 11, 13, 17), , _\r\n                 Array(1, 3, 5)\r\n       .Add \"D\", SQL_Text, SQL_Equal, Null, , 0\r\n       FilterString = .ToString(SQL_And)\r\n    End <span style=\"color:blue;\">With<\/span>\r\n    <span style=\"color:blue;\">Debug.Print<\/span> FilterString\r\n    '' --&gt; (A = '''') And (C In (7,11,13,17)) And (D Is Null)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: FilterStringBuilder: Einsatz von IgnoreValue<\/span><\/b><\/p>\n<p>Wie Sie im Ergebnis von <b>Debug.Print <\/b>sehen, wird die Filterbedingung f&uuml;r das Feld <b>A <\/b>erzeugt. Wenn Sie bei Textwerten neben <b>Null <\/b>auch Leerstrings ignorieren wollen, k&ouml;nnen Sie ein Array mit <b>Null <\/b>und <b>vbNullString <\/b>&uuml;bergeben. Dies wurde beim Definieren der Filterbedingung f&uuml;r das Feld <b>B <\/b>verwendet, daher ist der Filterausdruck f&uuml;r <b>B <\/b>nicht im Filtertext enthalten.<\/p>\n<p>Beim Filterausdruck f&uuml;r das Feld <b>C <\/b>sehen Sie, dass von den mittels Array &uuml;bergebenen Filterwerten die Werte aus dem <b>IgnoreValue<\/b>-Array nicht vorkommen. Wenn Sie <b>Null<\/b>-Filterwerte zulassen wollen, k&ouml;nnen Sie, wie im Filterausdruck f&uuml;r <b>D <\/b>gezeigt, den Standardwert mit einem Wert &uuml;berschreiben, die nie zum ausgew&auml;hlten Datentyp passen wird. Beim Textdatentyp verwenden Sie beispielsweise eine Zahl und bei allen anderen Datentypen verwenden Sie einen Buchstaben. Damit werden alle &uuml;bergebenen Filterwerte im Filterausdruck ber&uuml;cksichtigt und aus einem Null-Filterwert wird ein Filterausdruck mit <b>Is Null<\/b>.<\/p>\n<h2>Einsatz in der Praxis<\/h2>\n<p>&uuml;blicherweise werden Sie die <b>FilterStringBuilder<\/b>-Klasse nicht, wie bisher in den Beispielen gezeigt, mit konstanten Filterwerten verwenden, sondern die Werte aus Variablen oder Formularsteuerelementen einsetzen. Da Sie mittels <b>Add<\/b>-Methode nur die Filterbedingung definieren, m&uuml;ssen Sie im Code nicht darauf achten, welcher Wert in der Variablen oder im Steuerelement enthalten ist. Die korrekte Konvertierung in SQL-Text oder das Auslassen der Bedingung im Filterausdruck, weil der Filterwert ignoriert werden soll, nimmt Ihnen der Code in der Klasse ab.<\/p>\n<p>Das letzte Beispiel im Beitrag <b>Filterbedingungen einfach zusammenstellen <\/b>(<b>www.access-im-unternehmen.de\/47<\/b>) zeigt einen &uuml;blichen Einsatz in einem Formular zu Datenfilterung. Das Formular mit dem vollst&auml;ndigen Code ist in der Beispielanwendung <b>Suedsturm-FilterForm.mdb <\/b>enthalten. In Listing 7sehen Sie einen Auszug aus diesem Code. Dieser Code ist nach der Struktur aus Listing 5 aufgebaut. Anstelle von konstanten Filterwerten werden die Werte aus Steuerelementen verwendet.<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>CreateFilterString()<span style=\"color:blue;\"> As String<\/span>\r\n     ''Diese Prozedur erzeugt den Filterausdruck \r\n     ''aus den Filter-Steuerelementen\r\n     <span style=\"color:blue;\">With<\/span> <span style=\"color:blue;\">New<\/span> FilterStringBuilder\r\n         <span style=\"color:blue;\">Set<\/span> .SqlTool = DaoSqlTools\r\n         .Add \"KundenCode\", SQL_Text, SQL_Like, Me.fctlKundenCode.Value\r\n         .Add \"Kunde_Firma\", SQL_Text, SQL_Like, Me.fctlKundeFirma.Value\r\n         [...]\r\n         CreateFilterString = .ToString(SQL_And)\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 7: CreateFilterString aus einem Suchformular<\/span><\/b><\/p>\n<h2>Kopieren der Klassen in eine Access-Anwendung<\/h2>\n<p>Die Filter-Klassen sind in der Quellcode-Verwaltung von <b>access-codelib.net<\/b> gespeichert. Zum Einf&uuml;gen in Ihre Anwendung k&ouml;nnen Sie den <b>ACLib-FilterForm-Wizard <\/b>verwenden. Dieses Access-Add-In wird regelm&auml;&szlig;ig aktualisiert, sobald Fehler in den Filter-Klassen behoben oder Features erg&auml;nzt werden. Im Beitrag <b>Der ACLib-FilterForm-Wizard <\/b>(<b>www.access-im-unternehmen.de\/1020<\/b>) wird die Verwendung des Add-Ins beschrieben. Wenn Sie den aktuellsten Code der Klassen verwenden wollen, k&ouml;nnen Sie die Klassen direkt aus der Quellcodeverwaltung einsetzen.<\/p>\n<p>Daf&uuml;r &uuml;bertragen Sie den aktuellen Code mit TortoiseSVN aus der Quellcodeverwaltung in Ihr Dateisystem und nutzen den ACLib-Import-Wizard zum Einf&uuml;gen bzw. Aktualisieren der Code-Module.<\/p>\n<h2>Quellen:<\/h2>\n<ul>\n<li>ACLib-FilterForm-Wizard: <b>http:\/\/wiki.access-codelib.net\/ACLib-FilterForm-Wizard<\/b><\/li>\n<li>ACLib-Import-Wizard: <b>http:\/\/wiki.access-codelib.net\/ACLib-Import-Wizard<\/b><\/li>\n<li>Kurzbeschreibung f&uuml;r den Zugriff mit TortoiseSVN: <b>http:\/\/wiki.access-codelib.net\/Subversion-Repository<\/b><\/li>\n<\/ul>\n<h2>Weiterentwicklung der Klassen<\/h2>\n<p>Die gezeigten Filterklassen sind nicht als Beispiel-Code gedacht, den Sie anpassen m&uuml;ssen, um eine funktionierende Klasse zu erhalten. Diese Klassen stellen vielmehr eine Code-Sammlung dar, die Sie ohne Ver&auml;nderung nutzen k&ouml;nnen. Nat&uuml;rlich d&uuml;rfen Sie individuelle Verbesserungen in die Klassen einbauen, dann profitieren Sie aber m&ouml;glicherweise sp&auml;ter nicht mehr von den Verbesserungen anderer Entwickler.<\/p>\n<p>Wenn Sie beispielsweise die <b>SqlTools<\/b>-Klasse &auml;ndern wollen, &auml;ndern Sie nicht diese Klasse, sondern erstellen Sie eine neue Klasse, die die Schnittstelle von <b>SqlTools <\/b>unterst&uuml;tzt. Anschlie&szlig;end k&ouml;nnen Sie Ihre neue Klasse an die <b>FilterStringBuilder<\/b>-Klasse &uuml;bergeben, ohne diese &auml;ndern zu m&uuml;ssen. F&uuml;r allgemeine Verbesserungsvorschl&auml;ge dienen das Forum und der Bugtracker in <b>http:\/\/access-codelib.net<\/b>.<\/p>\n<h2>Code-Qualit&auml;t<\/h2>\n<p>Wenn Sie einen Fehler in den Klassen finden, schreiben Sie diesen bitte in den Bugtracker unter <b>http:\/\/bug.access-codelib.net\/<\/b>, damit der Fehler im Code-Archiv behoben wird. Sie d&uuml;rfen nat&uuml;rlich den Fehler selbst beheben und den korrigierten Code in den Entwurfszeig der Quellcodeverwaltung stellen. Daf&uuml;r ben&ouml;tigen Sie allerdings Schreibrechte f&uuml;r das Subversion-Repository, welches Sie nach Anmeldung im Forum beantragen k&ouml;nnen.<\/p>\n<p>Die Funktionsweise der Klassen wird mit Unit-Tests sichergestellt. Die Unit-Tests beschreiben das gew&uuml;nschte Verhalten der Klassen. Bevor eine Klasse in den trunk-Zweig (freigegebener, gepr&uuml;fter Code) der Quellcodeverwaltung kopiert wird, m&uuml;ssen alle Tests erfolgreich durchlaufen werden.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Die Filter-Klassen dienen als Werkzeug f&uuml;r die Filterstring-Erstellung. F&uuml;r Konvertierung in SQL-Text dient die <b>SqlTools<\/b>-Klasse. Die <b>FilterStringBuilder<\/b>-Klasse erzeugt aus einzelnen Filterbedingungen einen zusammengefassten Filterausdruck. Zum Filtern in Formularen &uuml;ber Steuerelemente &uuml;bernimmt die, in diesem Beitrag nicht gezeigte, <b>FilterControlManager<\/b>-Klasse die Steuerung. In der <b>Suedsturm<\/b>-Beispielanwendung ist ein Formular mit <b>Filterstring<\/b>-Erzeugung durch diese Klasse enthalten.<\/p>\n<p>Die <b>FilterControlManager<\/b>-Klasse nutzt die <b>FilterStringBuilder<\/b>&#8211; und die <b>SqlTools<\/b>-Klasse, um aus Filterwert&auml;nderungen in den Steuerelementen den Filterstring zu aktualisieren. Auf eine &auml;hnliche Art k&ouml;nnten Sie eine Klasse erstellen, die nicht nur den Filterstring erzeugt, sondern direkt in das Filterformular eingreift und den Filter &uuml;ber eine passende Filtermethode anwendet. <\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>FilterStringBuilder-Beispiele.mdb<\/p>\n<p>SqlTools-Beispiele.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{5AA92151-8D5D-40D3-BDA1-75BDB976ED38}\/aiu_1021.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit dem Einsatz von Klassen k&ouml;nnen Sie Ihren Programmcode &uuml;bersichtlich gestalten. Wenn Sie konkrete Aufgaben mittels wiederverwendbaren Klassen umsetzen, erhalten Sie zus&auml;tzlich eine Code-Sammlung, die die Code-Qualit&auml;t erh&ouml;ht, weil Sie Korrekturen im Code nur noch an einer Stelle umsetzen m&uuml;ssen. Die in diesem Beitrag beschriebenen Klassen sind wiederverwendbare Klassen f&uuml;r die Erstellung eines Filterausdrucks, die Sie ohne &Auml;nderung in Ihre Anwendung importieren und nutzen k&ouml;nnen.<\/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":[66012016,662016,44000025],"tags":[],"class_list":["post-55001021","post","type-post","status-publish","format-standard","hentry","category-66012016","category-662016","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>SQL-Text f&uuml;r Filterbedingungen mit Klasse - 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\/SQLText_fuer_Filterbedingungen_mit_Klasse\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL-Text f&uuml;r Filterbedingungen mit Klasse\" \/>\n<meta property=\"og:description\" content=\"Mit dem Einsatz von Klassen k&ouml;nnen Sie Ihren Programmcode &uuml;bersichtlich gestalten. Wenn Sie konkrete Aufgaben mittels wiederverwendbaren Klassen umsetzen, erhalten Sie zus&auml;tzlich eine Code-Sammlung, die die Code-Qualit&auml;t erh&ouml;ht, weil Sie Korrekturen im Code nur noch an einer Stelle umsetzen m&uuml;ssen. Die in diesem Beitrag beschriebenen Klassen sind wiederverwendbare Klassen f&uuml;r die Erstellung eines Filterausdrucks, die Sie ohne &Auml;nderung in Ihre Anwendung importieren und nutzen k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T19:04:23+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/8ab76f8cc1854c999b9bc90627760e94\" \/>\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=\"12\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"SQL-Text f&uuml;r Filterbedingungen mit Klasse\",\"datePublished\":\"2020-05-22T19:04:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/\"},\"wordCount\":1958,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/8ab76f8cc1854c999b9bc90627760e94\",\"articleSection\":[\"1\\\/2016\",\"2016\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/\",\"name\":\"SQL-Text f&uuml;r Filterbedingungen mit Klasse - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/8ab76f8cc1854c999b9bc90627760e94\",\"datePublished\":\"2020-05-22T19:04:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/8ab76f8cc1854c999b9bc90627760e94\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/8ab76f8cc1854c999b9bc90627760e94\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQLText_fuer_Filterbedingungen_mit_Klasse\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL-Text f&uuml;r Filterbedingungen mit Klasse\"}]},{\"@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":"SQL-Text f&uuml;r Filterbedingungen mit Klasse - 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\/SQLText_fuer_Filterbedingungen_mit_Klasse\/","og_locale":"de_DE","og_type":"article","og_title":"SQL-Text f&uuml;r Filterbedingungen mit Klasse","og_description":"Mit dem Einsatz von Klassen k&ouml;nnen Sie Ihren Programmcode &uuml;bersichtlich gestalten. Wenn Sie konkrete Aufgaben mittels wiederverwendbaren Klassen umsetzen, erhalten Sie zus&auml;tzlich eine Code-Sammlung, die die Code-Qualit&auml;t erh&ouml;ht, weil Sie Korrekturen im Code nur noch an einer Stelle umsetzen m&uuml;ssen. Die in diesem Beitrag beschriebenen Klassen sind wiederverwendbare Klassen f&uuml;r die Erstellung eines Filterausdrucks, die Sie ohne &Auml;nderung in Ihre Anwendung importieren und nutzen k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T19:04:23+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/8ab76f8cc1854c999b9bc90627760e94","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"12\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"SQL-Text f&uuml;r Filterbedingungen mit Klasse","datePublished":"2020-05-22T19:04:23+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/"},"wordCount":1958,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/8ab76f8cc1854c999b9bc90627760e94","articleSection":["1\/2016","2016","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/","url":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/","name":"SQL-Text f&uuml;r Filterbedingungen mit Klasse - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/8ab76f8cc1854c999b9bc90627760e94","datePublished":"2020-05-22T19:04:23+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/8ab76f8cc1854c999b9bc90627760e94","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/8ab76f8cc1854c999b9bc90627760e94"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/SQLText_fuer_Filterbedingungen_mit_Klasse\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"SQL-Text f&uuml;r Filterbedingungen mit Klasse"}]},{"@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\/55001021","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=55001021"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001021\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001021"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}