Verstecke letzte Bearbeiter
gru 1.1 1 {{content/}}
2
gru 4.1 3 Datenbankabfragen verhalten sich ähnlich wie [[Datenquellen>>doc:Sources]] (XML, CSV, JSON), werden jedoch nicht statisch hinterlegt, sondern dynamisch aus einer Datenbank ausgelesen.
gru 1.1 4
5 {{info}}
awa 4.2 6 Bei der Erstellung einer Abfrage wird eine bereits angelegte [[Verbindung>>doc:DBConnections]] zu einer Datenbank benötigt.
gru 1.1 7 {{/info}}
8
9 == Anlegen einer SQL-Abfrage ==
10
nlo 9.1 11 {{id name="data_db_query"/}}
nlo 32.1 12 {{figure image="data_db_query_de.png"}}Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.{{/figure}}
gru 1.1 13
awa 67.4 14
15 {{html wiki="true"}}
XIMA Admin 71.1 16 <div class='xm-figure xm-float-right xm-clear-h2' data-alt='Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.'><div class='xm-figure-inner' style='width:310px'>{{lightbox image='data_db_query_de.png' width='300' group='$height' group='$group' title='Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.'/}}<div class='xm-figure-caption'>Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.</div></div></div>
17 {{/html}}
18
19
20
21 {{html wiki="true"}}
22 <div class='xm-figure xm-float-right xm-clear-h2' data-alt='Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.'><div class='xm-figure-inner' style='width:310px'>{{lightbox image='data_db_query_de.png' width='300' group='$height' group='$group' title='Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.'/}}<div class='xm-figure-caption'>Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.</div></div></div>
23 {{/html}}
24
25
26
27 {{html wiki="true"}}
28 <div class='xm-figure xm-float-right xm-clear-h2' data-alt='Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.'><div class='xm-figure-inner' style='width:310px'>{{lightbox image='data_db_query_de.png' width='300' group='$height' group='$group' title='Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.'/}}<div class='xm-figure-caption'>Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.</div></div></div>
29 {{/html}}
30
31
32
33 {{html wiki="true"}}
awa 67.4 34 <div class='xm-figure xm-float-right xm-clear-global' data-alt='Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.'><div class='xm-figure-inner' style='width:310px'>{{lightbox image='data_db_query_de.png' width='300' group='$height' group='$group' title='Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.'/}}<div class='xm-figure-caption'>Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.</div></div></div>
35 {{/html}}
36
37
nlo 16.1 38 * Öffnen Sie das Modul "DB-Abfragen" und klicken Sie auf die Schaltfläche "Neu" {{ficon name="plus-circle-outline"/}} in der Kopzeile der Liste (siehe [[Abbildung>>||anchor="fig_data_db_query"]]).
nlo 19.1 39 * Für die Datenbank-Abfrage werden folgende Daten benötigt:
40 ** **Name**: Ein eindeutiger Name der Datenbank-Abfrage
nlo 16.1 41 ** **Beschreibung**: Eine optionale Beschreibung der Datenbank-Abfrage
nlo 17.1 42 ** **Verbindung**: Die [[DB-Verbindung>>doc:DBConnections]], die verwendet werden soll
nlo 16.1 43
nlo 18.1 44 * Die eigentliche **SQL-Abfrage** wird im Editor in der Mitte einegeben (siehe [[Abbildung>>||anchor="data_db_query"]]).
gru 1.1 45
gru 69.2 46 Das eingegebene Statement wird als //Prepared-Statement// ausgeführt, so dass keine sogenannte //SQL-Injection// moglich ist. Verwenden Sie daher auch keine Hochkommas. Prinzipiell können auch Übergabeparameter verwendet werden. In der Abfrage setzen Sie an die Stelle des Übergabeparameters ein Fragezeichen {{code language="none"}}?{{/code}}.
gru 1.1 47
nlo 69.1 48 {{version major="6" minor="4" patch="0"/}} In den SQL-Statements können [[Platzhalter>>doc:Formcycle.UserInterface.Variables.WebHome]] verwendet werden.
49
gru 1.1 50 == Verwenden der Abfrage ==
51
52 Die Datenbankabfrage ist innerhalb und außerhalb eines Formulars über das hierfür vorgesehene //Servlet// unter Verwendung der entsprechenden Parameter abrufbar. Die URL zur Datenbankabfrage lautet wie folgt:
53
gru 69.2 54 {{code language="none"}}
gru 1.1 55 http://<server>/formcycle/datenabfragedb
56 {{/code}}
57
nlo 67.1 58 Die Servlet-URL wird unterhalb der Einstellungen angezeigt (siehe [[Abbildung>>||anchor="data_db_query"]]).
gru 1.1 59 Folgende URL-Parameter sind hierbei möglich:
60
awa 4.2 61 {{table dataTypeAlpha="0" preSort="0-asc"}}
gru 1.1 62 |=Parametername|=Beschreibung|=Erforderlich
63 |name|Muss dem Namen der Datenbank-Abfrage entsprechen.|Ja
gru 70.1 64 |mandantName|Muss dem Namen des Mandanten entsprechen, unter welchen diese Datenbank-Abfrage erstellt wurde.|Ja, wenn //projektId// nicht gegeben
gru 1.1 65 |projektId|Muss der ID des Formulars entsprechen. Diese Information kann über {{code language="javascript"}}XFC_METADATA.currentProject.id{{/code}} abgerufen werden.|Ja, wenn //mandantName// nicht gegeben
gru 70.12 66 |--sqlParameter--|Synonym für //queryParameter//. Sollte in {{formcycle/}} Version 6 nicht mehr verwendet werden und wird voraussichtlich in der nächsten Major-Version entfernt.|Nein
gru 70.1 67 |queryParameter|Nur erforderlich, wenn innerhalb der Datenbank-Abfrage Platzhalter in Form eines Fragezeichens verwendet werden. Ist dies der Fall, so entspricht dieser der komma-separierten Listen der zu verwendeten Parameter.
68
69 Wenn möglich sollte für neue Projekte anstelle des Parameters //queryParameter// der Parameter //queryParameterValues// verwendet werden, da //queryParameter// in einer zukünftigen Version von {{formcycle/}} nicht mehr unterstützt werden wird.|Nein
70 |delimiter|Trennzeichen, welches die einzelnen Werte des //queryParameter// trennt. Standardmäßig ein Komma {{code language="none"}},{{/code}}.
71
72 Wenn möglich sollte für neue Projekte anstelle der Parameter //delimiter// und //queryParameter// der Parameter //queryParameterValues// verwendet werden, da //delimiter// in einer zukünftigen Version von {{formcycle/}} nicht mehr unterstützt werden wird.|Nein
73 |queryParameterValues|{{version major="6" minor="6" patch="3"/}}Ab {{formcycle/}} Version 6.6.3 zur Verfügung stehende Alternative zu den Parametern //queryParameter// und //delimiter//. Wie diese Parameter ist auch //queryParameterValues// nur dann erforderlich, wenn innerhalb der Datenbank-Abfrage Platzhalter in Form eines Fragezeichens {{code language="none"}}?{{/code}} verwendet werden. Ist dies der Fall, werden die einzelnen Abfrageparameter hintereinander jeweils als ein eingener Parameter //queryParameterValues// übergegeben, wodurch auch die Verwendung des Parameters //delimiter// entfällt.|Nein
gru 1.1 74 |varName|Gibt den Namen des JSON-Response-Objektes an. Ist dieser nicht gesetzt, so besitzt das JSON-Objekt keinen expliziten Namen.|Nein
awa 4.2 75 {{/table}}
gru 1.1 76
gru 69.2 77 Bei Zugriff aus einem Formular verwenden Sie bitte immer das globale Variablenobjekt //XFC_METADATA//, siehe hierzu auch die [[Metadaten>>doc:Formcycle.FormDesigner.CodingPanel.ScriptTab.FormMetadata]]. In diesem Objekt stehen alle relevanten URLs von {{formcycle case="dat"/}} zur Verfügung, sodass diese Beispielhaft wie folgt ermittelt werden kann: {{code language="javascript"}}XFC_METADATA.urls.datasource_db{{/code}}.
gru 1.1 78
awa 67.4 79 Ferner empfehlen wir, innerhalb des Formulars die JavaScript-Funktion {{jsdoc page="xutil" name="getdataquery"/}} zu verwenden, die das manuelle Aufbauen der Servlet-Abfrage erspart.
gru 1.1 80
81 Die Rückgabe des Abfrage-Ergebnisses erfolgt im //JSON//-Format und kann somit innerhalb des Formulars direkt genutzt werden.
82
nlo 21.1 83 == Testen der Abfrage ==
84
nlo 52.1 85 {{info}}
gru 69.2 86 Zum schnellen Testen der Abfrage steht die Tastenkombination {{code language="none"}}Strg + Enter{{/code}} zur Verfügung.
nlo 52.1 87 {{/info}}
88
nlo 67.3 89 Datenbank-Abfragen können direkt in der Konfigurationsoberfläche getestet werden. Hierzu steht eine Testkonsole unterhalb des SQL-Editors zur Verfügung (siehe [[Abbildung>>||anchor="data_db_query"]]).
nlo 33.1 90 Im Header der Testkonsole befindet sich eine Reihe von Buttons zur Steuerung der Abfrage:
nlo 34.1 91
nlo 33.1 92 * {{ficon name="database-search"/}}**Abfrage ausführen**
gru 69.2 93 Führt die Datenbank-Abfrage aus. Werden //Abfrageparameter// ({{code language="none"}}?{{/code}}) verwendet, wird der Nutzer aufgefordert Werte für diese Parameter einzugeben. Ist dies nicht der Fall wird das Ergebnis der Abfrage direkt in der //Tabellenansicht// dargestellt.{{lightbox image="data_db_query_test_de.png" title="Abfrage ausführen"/}}
nlo 33.1 94 * {{icon name="question"/}}**Abfrageparameter**
gru 69.2 95 Maske zum Eingeben von Werten für Abfrageparameter. Diese Option steht nur zur Verfügung, wenn Abfrageparameter ({{code language="none"}}?{{/code}}) in der SQL-Abfrage verwendet werden. Die einzelnen Abfrageparameter werden nummeriert im SQL-Query dargestellt. Ein Klick auf "Parameter für Abfrage verwenden" {{ficon name="arrow-right-bold-circle-outline2"/}} führt die Abfrage mit den eingebenen Parametern aus. Das Ergebnis wird in der //Tabellenansicht// dargestellt.
awa 67.4 96 {{lightbox image="data_db_query_test_param_de.png" title="Die Paramter der Abfrage werden nummeriert."/}}
97 Eigentliche Abfrage im SQL-Editor:{{lightbox image="data_db_query_example_de.png" title="Beispielabfrage"/}}
nlo 34.1 98 * {{ficon name="table-large"/}}**Tabellenansicht**
awa 67.4 99 Abfrageergebnis in Tabellenform{{lightbox image="data_db_query_test_table_de.png" title="Abfrageergebnis in Tabellenform"/}}
nlo 34.1 100 * {{icon name="code"/}}**Quellcodeansicht**
awa 67.4 101 Abfrageergebnis im JSON-Format{{lightbox image="data_db_query_test_code_de.png" title="Abfrageergebnis im JSON-Format"/}}
nlo 43.1 102 * {{icon name="Terminal"/}}**Generiertes SQL**
awa 67.4 103 Zeigt das generierte SQL-Statement mit eingefügten Parameterwerten{{lightbox image="data_db_query_test_sql_de.png" title="Zeigt den generierten SQL-Query mit eingefügten Parameterwerten"/}}
nlo 30.1 104
gru 1.1 105 == Sonderfall Auswahlelement ==
106
awa 4.2 107 Soll das Ergebnis einer Datenbankabfrage direkt in ein [[Auswahlelement>>doc:Formcycle.FormDesigner.FormElements.Selection]] geladen werden, erfolgt dies über die Eigenschaften des Auswahlelements im {{designer case="dat"/}}.
gru 1.1 108
XIMA Admin 71.1 109 {{info}}
110 Abfragen die in Auswahlelementen eingesetzt werden, dürfen kein "?" beinhalten, da diese Abfragen einen Übergabeparameter erwarten und dies bei Auswahlelementen nicht möglich ist. Abfragen mit einem "?" werden nicht als Datenquelle bei Auswahlelementen angeboten.
111 {{/info}}
112
nlo 54.1 113 {{figure image="data_db_query_designer_de.png"}}
nlo 64.2 114 Verwenden des Ergebnises einer Datenbankabfrage als Datenquelle für ein Auswahlelement im {{designer case="dat"/}}.
nlo 54.1 115 {{/figure}}
gru 1.1 116
awa 4.2 117 Der Inhalt der SQL-Datenbankabfrage wird in einem [[Auswahlelement>>doc:Formcycle.FormDesigner.FormElements.Selection]] in folgender Reihenfolge verwendet.
gru 1.1 118
119 {{box}}
120 Sichtbarer Wert, Übertragener Wert, Optionaler Wert 1, Optionaler Wert 2, ...
121 {{/box}}
122
123 Alle übertragenenen Werte werden als Wert des HTML-Attribut //col0// (//sichtbarer Wert//), //col1// (//übertragener Wert//), //col2// (//optionaler Wert 1//), //col3// (//optionaler Wert 2//) usw. an das jeweilige //option//-Element angefügt.
124
125 Der //sichtbare Wert// wird in der Auswahlliste im Formular angezeigt. Der //übertragene Wert// wird als Wert des HTML-Attributs //value// beim Absenden des Formulars übertragen.
126
127 Werden zudem noch ein oder mehrere //optionale Werte// von der SQL-Datenbankabfrage zurückgegeben, so können diese per //Javascript// über den folgenden //jQuery-Selector// abgerufen werden.
128
129 {{code language="javascript"}}
130 $('[name=sel2]').find('option:selected').attr('col2') // Selektiert die Aktive Option des Auswahlelements mit Name 'sel2' und liefert den ersten optionalen Wert zurück.
131 {{/code}}
132
133 == Beipiele ==
134
gru 70.10 135 {{info}}
XIMA Admin 71.1 136 {{version major="6" minor="6" patch="3"/}}Ab {{formcycle/}} Version 6.6.3 kann Anstelle des Parameters //queryParameter// der Parameter //queryParameterValues// verwendet werden. Letzterer wird für neue Projekte empfohlen, da der Parameter //queryParameter// in einer zukünftigen Version von {{formcycle/}} nicht mehr unterstützt werden wird. In den folgenden Beispielen wird für jede SQL-Abfrage daher jeweils eine Servlet-Abfrage mit //queryParameter// und mit //queryParameterValues// gezeigt.
137 {{/info}}
gru 70.9 138
gru 70.10 139
gru 1.1 140 {{code language="sql"}}
awa 4.2 141 select name, vorname from tabelle where vorname like(?)
gru 1.1 142 {{/code}}
143
nlo 21.1 144 Diese SQL-Abfrage liefert die Namen aller Personen zurück, die einen bestimmten Vornamen haben. Nach welchem Vornamen gesucht werden soll, kann über einen URL-Parameter angegeben werden.
awa 4.2 145
gru 70.11 146 Abfrage per Servlet:
147 {{code language="none"}}http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameter=Mustermann{{/code}}
148
149 {{version major="6" minor="6" patch="3"/}}Ab {{formcycle/}} Version 6.6.3 mögliche Abfrage per Servlet:
150 {{code language="none"}}http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameterValues=Mustermann{{/code}}
XIMA Admin 71.1 151 \\
gru 70.7 152
gru 1.1 153 {{code language="sql"}}
awa 4.2 154 select name, vorname from tabelle where id=?
gru 1.1 155 {{/code}}
156
awa 4.2 157 Diese SQL-Abfrage liefert die Person mit einer bestimmten ID zurück. Die ID wird als URL-Parameter übergeben.
158
gru 70.11 159 Abfrage per Servlet:
160 {{code language="none"}}http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameter=100{{/code}}
161
162 {{version major="6" minor="6" patch="3"/}}Ab {{formcycle/}} Version 6.6.3 mögliche Abfrage per Servlet:
163 {{code language="none"}}http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameterValues=100{{/code}}
XIMA Admin 71.1 164 \\
gru 70.7 165
gru 1.1 166 {{code language="sql"}}
awa 4.2 167 select name, vorname from tabelle where ort like(?) AND plz = ?
gru 1.1 168 {{/code}}
169
awa 4.2 170 Diese SQL-Abfrage liefert die Namen aller Personen zurück, die an einem bestimmten Ort wohnen. Der Ort mit Postleitzahl wird über URL-Parameter übergeben.
171
gru 70.11 172 Abfrage per Servlet:
173 {{code language="none"}}http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameter=Entenhausen,02442{{/code}}
174
175 {{version major="6" minor="6" patch="3"/}}Ab {{formcycle/}} Version 6.6.3 mögliche Abfrage per Servlet:
176 {{code language="none"}}http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameterValues=Entenhausen&queryParameterValues=02442{{/code}}
XIMA Admin 71.1 177 \\
gru 70.7 178
MKO 68.1 179 {{code language="sql"}}
180 select name, vorname from tabelle where ort like concat(?, '%')
181 {{/code}}
182
183 Diese SQL-Abfrage liefert die Namen aller Personen zurück, die in einem Ort wohnen der mit den gesuchten Buchstaben/Zeichen **beginnt**. Das '%'-Zeichen dient als Platzhalter für beliebig viele beliebige Zeichen. Je nach verwendetem DBMS kann die Syntax geringfügig abweichen (hier: MySQL). Der gesuchte Wert wird über URL-Parameter übergeben.
184
gru 70.11 185 Abfrage per Servlet:
186 {{code language="none"}}http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameter=Entenhau{{/code}}
187
188 {{version major="6" minor="6" patch="3"/}}Ab {{formcycle/}} Version 6.6.3 mögliche Abfrage per Servlet:
189 {{code language="none"}}http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameterValues=Entenhau{{/code}}
XIMA Admin 71.1 190 \\
gru 70.7 191
MKO 68.1 192 {{code language="sql"}}
193 select name, vorname from tabelle where lower(ort) like concat('%', lower(?), '%')
194 {{/code}}
195
196 Diese SQL-Abfrage liefert die Namen aller Personen zurück, die in einem Ort wohnen der die gesuchten Buchstaben/Zeichen **beinhaltet**. Hierbei ist spielt die Klein/Groß-Schreibung keine Rolle, da die Abfrage in der Datenbank sowohl die Werte-Spalte als auch den eigentlichen Filter-Wert zu Kleinschreibung umwandelt (lower(...)). Der gesuchte Wert wird über URL-Parameter übergeben.
197
gru 70.11 198 Abfrage per Servlet:
199 {{code language="none"}}http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameter=teHaUs{{/code}}
200
201 {{version major="6" minor="6" patch="3"/}}Ab {{formcycle/}} Version 6.6.3 mögliche Abfrage per Servlet:
202 {{code language="none"}}http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameterValues=teHaUs{{/code}}
Copyright 2000-2024