Wechseln zu: Navigation, Suche

Direkter Datenbank-Zugriff

Verwandte Themen:


Hinweis: Mit dem direkten Zugriff auf die Datenbank greifen Sie ggf. direkt in die Struktur der Datenbank ein. Wir können in diesem Fall nicht garantieren, dass diese Eingriffe auch in zukünftigen Versionen von JTL-Wawi einwandfrei funktionieren werden. Daher empfehlen wir nur ausgewiesenen Experten die Möglichkeit zu nutzen, direkt auf die Datenbank zuzugreifen.

Fehlerbehandlung

{% assign result = 'SELECT * FROM tBestellungEX' | DirectQuery -%}
"{{ result.Query }}" lieferte {% if result.Fehlerhaft %}den Status: {{ result.Fehler }}{% else %}keinen Fehler.{% endif -%}

#=> "SELECT * FROM tBestellungEX" lieferte den Status: Errorcode 7338
#=> "SELECT * FROM tBestellungEX" lieferte keinen Fehler.
In der Variable
result
wird in dem Fall das Ergebnis aus dem Select-Befehl gespeichert. Das es sich bei dem String um eine Datenbank-Abfrage handelt müssen Sie DotLiquid durch den zusätzlichen Filter
'string' | DirectQuery
begreiflich machen.
    1. Im
      result.Query
      wird der ursprüngliche String der Abfrage gespeichert und kann so nochmal abgerufen werden.
    2. In
      result.Fehlerhaft
      finden wir den booleschen Wert
      true
      oder
      false
      , je nachdem, ob die Abfrage richtig oder falsch war.
    3. Sollte die Abfrage einen Fehler enthalten und deshalb nicht erfolgreich abgeschlossen werden, so können wir mit
      result.Fehler
      die Fehlermeldung anzeigen lassen.
Wichtig sind die Begriffe nach dem Punkt, also Query, Daten, Fehlerhaft und Fehler! Die Variable kann über
{% assign %}
oder
{% capture %}
beliebig definiert werden.

Einfache Abfragen

{% assign result = 'SELECT COUNT(*) FROM tBestellung' | DirectQueryScalar -%}
Es gibt {{ result }} Bestellungen.

#=> Es gibt 425 Bestellungen.
Unter einfachen Abfragen verstehen wir ein SQL-Select welches genau ein Ergebnis zurück gibt. Ein solches Ergebnis verarbeiten Sie im Idealfall über den Filter
'string' | DirectQueryScalar
, so wird das Ergebnis direkt in der Variable gespeichert und kann weiter verarbeitet werden.

Komplexe Abfragen

1   {% assign result = 'SELECT TOP(4) * FROM tBestellung' | DirectQuery -%}
2   "{{ result.Query }}" lieferte {% if result.Fehlerhaft %}den Status {{ result.Fehler }}{% else %}keinen Fehler.{% endif %}
3   {% for item in result.Daten %}
4     Bestellung: {{ item.cBestellNr }}
5     {% capture itemquery %}SELECT * FROM tbestellpos WHERE tBestellung_kBestellung = {{ item.kBestellung | SqlEscape }}{% endcapture -%}
6     {% assign result2 = itemquery | DirectQuery -%}
7     {% for item2 in result2.Daten -%}
8       {{ item2.nAnzahl | Nummer: 'N2' }}x {{ item2.cString }}
9     {% endfor -%}
10  {% endfor -%}

Das Ergebnis hiervon könnte so aussehen:

"SELECT TOP(4) * FROM tBestellung" lieferte keinen Fehler.

Bestellung: AU0920121
1,00x Adidas Frankreich Home Trikot FFF France JSY SS
1,00x Adidas Frankreich Fleece Pullover ClimaWarm® FFF
1,00x Adidas Frankreich Short Home FFF France Hose weiß
1,00x Pauschale Versandkosten
1,00x Nachnahmegebühr

Bestellung: AU0920122
1,00x Polo Ralph Lauren Big Pony gestreift Poloshirt dunkelblau/grün

Bestellung: AU0920123
1,00x Adidas Beckenbauer Tracktop weiß Jacke Firebird
1,00x Pauschale Versandkosten

Bestellung: AU0920124
1,00x Adidas Standup Rollkragen Pullover rot
1,00x Adidas Windbreaker Herren Windjacke schwarz Laufjacke
1,00x Versandkosten nach Zonen
    1. In der ersten Zeile definieren Sie Ihre Variable
      result
      und geben Ihr unsere Abfrage in Form eines String als Wert.
    2. In Zeile zwei geben wir eine Fehlermeldung aus bzw. bestätigen die Korrektheit unserer Abfrage.
    3. In der dritten Zeile starten wir eine verschachtelte for-Schleife, um nacheinander die Datensätze je Ergebnis abzufragen. Dazu verwenden Sie
      result.Daten
      .
    4. In Zeile vier wird die Bestellnummer ausgegeben.
    5. In der fünften Zeile erfassen wir über
      {% capture %}
      eine komplexere SQL-Abfrage, um so die Bestellpositionen einer Bestellung zu ermitteln. Der Filter
      {{ 'string' | SqlEscape }}
      setzt jedem Hochkomma in einem String, ein weiteres Hochkomma voran, es erfolgt das sogenannte Escapen, um Fehler im Programmcode zu vermeiden.
    6. In Zeile sechs speichern wir Datensätzen zu den Bestellpositionen der aktuell in der for-Schleife befindlichen Bestellung.
    7. In der siebten Zeile starten wir eine for-Schleife, weil jede Bestellung mehrere Elemente enthalten kann, genügt ein DirectQueryScalar hier nicht aus.
    8. In Zeile acht erfolgt die Ausgabe der Bestellpositionen. Über die Datenbankfelder sprechen wir einzelne Spalten direkt an.
    9. In den Zeilen neun und zehn schließen wir die verschachtelten for-Schleifen nacheinander wieder.

Wie geht es weiter?