QUERY BY SQL

4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 11


QUERY BY SQL ({Tabelle; }sqlFormel)

ParameterTypBeschreibung
TabelleTabelleTabelle, an die eine Datensatz-
auswahl zurückgegeben wird oder
ohne diesen Parameter Standardtabelle
sqlFormelStringGültige SQLSuchformel mit
WHERE Klausel der Suche SELECT

Beschreibung

QUERY BY SQL ermöglicht, eine einfache Anfrage mit SELECT auszuführen. Dazu schreiben Sie folgende Anweisung:

   SELECT *
      FROM table
      WHERE <sqlFormula>

WHERE <sqlFormel>

Tabelle ist der im ersten Parameter übergebene Name, sqlFormel der Suchstring der WHERE Klausel.

So führt z.B. die folgende Anweisung:

   QUERY BY SQL([Employees];"name='smith'")

dasselbe aus wie die folgende SQL Anfrage:

   SELECT * FROM Employees WHERE "name='smith'"

QUERY BY SQL sucht in der angegebenen Tabelle nach Datensätzen. Er verändert die aktuelle Auswahl der Tabelle für den aktuellen Prozess und macht den ersten Datensatz der neuen Auswahl zum aktuellen Datensatz.

QUERY BY SQL wendet sqlFormel auf jeden Datensatz in der Tabelle oder Auswahl an. sqlFormel ist ein Boolean Ausdruck, der den Wert WAHR oder FALSCH hat. Wie Sie sicherlich wissen, kann in SQL-2 Standard eine Suchbedingung das Ergebnis WAHR, FALSCH oder NULL hervorbringen. Die neue aktuelle Auswahl enthält als Suchergebnis nur die Datensätze (Zeilen), für die die Suchbedingung das Ergebnis WAHR hervorbringt.

Der Ausdruck sqlFormel kann einfach sein, wie z.B. Vergleich eines Feldes (Spalte) mit einem Wert; oder komplex, z.B. Ausführung einer Berechnung. Er kann, analog zu den Befehlen QUERY BY FORMULA, QUERY BY SQL eine Information in einer verknüpften Tabelle bewerten (siehe Beispiel 4). sqlFormel kann eine gültige SQL Anweisung sein, vorausgesetzt, sie beachtet die für SQL-2 geltenden Regeln sowie die Einschränkungen der derzeit in 4D implementierten SQL Engine. Weitere Informationen dazu finden Sie im Handbuch 4D SQL Reference .

Der Parameter sqlFormel kann Referenzen auf 4D Ausdrücke verwenden. Die Syntax dafür ist dieselbe wie für ODBC Befehle oder die Funktio-nen Begin/End SQL:

<<MyVar>> or :MyVar.

Weitere Informationen dazu finden Sie im Abschnitt Befehle für externe Datenquellen.

Hinweis: Dieser Befehl ist kompatibel mit den Befehlen SET QUERY LIMIT und SET QUERY DESTINATION.

Über Verknüpfungen

QUERY BY SQL verwendet keine Verknüpfungen zwischen Tabellen, die im 4D Struktureditor definiert wurden. Dafür müssen Sie eine Join Klausel hinzufügen.

Nehmen wir als Beispiel folgende Struktur mit einer Viele-zu-Eine Verknüpfung von [PEOPLE]City zu [CITIES]Name:

   [People]
      Name
      City
   [Cities]
      Name
      Population

Mit QUERY BY FORMULA schreiben Sie:

   QUERY BY FORMULA([People];[Cities]Population>1000)

Mit QUERY BY SQL müssen Sie mit oder ohne Verknüpfung folgende Anweisung verwenden:

   QUERY BY SQL([People];"people.city=cities.name AND cities.population>1000")

Hinweis: QUERY BY SQL verwaltet Eine-zu-Viele und Viele-zu-Viele Verknüpfungen anders als QUERY BY FORMULA.

Beispiele

1. Dieses Beispiel zeigt die Firmen mit Verkäufen über 100. Die SQL Anfrage lautet:

   SELECT *
      FROM Offices
      WHERE Sales > 100

Mit QUERY BY SQL lautet sie:

   C_STRING(30;$queryFormula)
   $queryFormula:="Sales > 100"
   QUERY BY SQL([Offices];$queryFormula)

2. Dieses Beispiel zeigt die Bestellungen im Bereich 3000 bis 4000. Die SQL Anfrage lautet:

   SELECT *
      FROM Orders
      WHERE Amount BETWEEN 3000 AND 4000

Mit QUERY BY SQL lautet sie:

   C_STRING(40;$queryFormula)
   $queryFormula:="Amount BETWEEN 3000 AND 4000"
   QUERY BY SQL([Orders];$queryFormula)

3. Dieses Beispiel zeigt, wie Sie das Suchergebnis über spezifische Suchkriterien erhalten. Die SQL Anfrage lautet:

   SELECT *
      FROM People
      WHERE City ='Paris'
         ORDER BY Name

Mit QUERY BY SQL lautet sie:

   C_STRING(40;$queryFormula)
   $queryFormula:="City= 'Paris' ORDER BY Name"
   QUERY BY SQL([People];$queryFormula)

4. Dieses Beispiel zeigt eine Suche mit verknüpften Tabellen in 4D. In SQL müssen Sie JOIN verwenden, um die 4D Verknüpfung zu simulie-ren. Wir gehen von zwei Tabellen in 4D aus:

   [Invoices] with the following columns (fields):
      ID_Inv: Longint
      Date_Inv: Date
      Amount: Real
   [Lines_Invoices] with the following columns (fields):
      ID_Line: Longint
      ID_Inv: Longint
      Code: Alpha (10)

Es gibt eine Viele-zu-Eine Verbindung von [Lines_Invoices]ID_Inv to [Invoices]ID_Inv. Mit QUERY BY FORMULA schreiben Sie:

   QUERY BY FORMULA([Lines_Invoices];([Lines_Invoices]Code="FX-200") & (Month of([Invoices]Date_Inv)=4))

Die SQL Anfrage lautet:

   SELECT ID_Line
      FROM Lines_Invoices, Invoices
      WHERE Lines_Invoices.ID_Inv=Invoices.ID_Inv
         AND Lines_Invoices.Code='FX-200'
         AND MONTH(Invoices.Date_Inv) = 4

Mit QUERY BY SQL lautet sie:

   C_STRING(40;$queryFormula)
   $queryFormula:="Lines_Invoices.ID_Inv=Invoices.ID_InvAND Lines_Invoices.Code='FX-200' AND MONTH(Invoices.Date_Inv)=4"
   QUERY BY SQL([Lines_Invoices];$queryFormula)

Referenz

QUERY BY FORMULA.

Systemvariablen oder Mengen

Bei korrekt formatierter Suchbedingung gibt die Systemvariable OK den Wert 1 zurück. Sonst wird sie auf 0 (Null) gesetzt; es wird eine leer Auswahl zurückgegeben und ein Fehler generiert, der sich mit einer Fehlerverwaltungsmethode abfangen lässt, die mit dem Befehl ON ERR CALL installiert wurde.


4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next