4D v16.3

QUERY BY SQL

Home

 
4D v16.3
SQL
QUERY BY SQL

QUERY BY SQL 


 

QUERY BY SQL ( {Tabellenname ;} sqlFormel ) 
Parameter Typ   Beschreibung
Tabellenname  Tabelle in Tabelle, an die eine Datensatzauswahl zurückgegeben wird
ohne diesen Parameter Standardtabelle
sqlFormel  String in Gültige SQLSuchformel mit WHERE Klausel der Suche SELECT

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

   SELECT *
      FROM table
      WHERE <sqlFormula>

Tabellenname 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.

Hinweis: QUERY BY SQL lässt sich nicht im Kontext einer externen SQL Verbindung einsetzen; denn er meldet sich direkt an die integrierte SQL Engine von 4D an.

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 Funktionen Begin SQL/End SQL, z.B.:
<<MyVar>> oder :MyVar.

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

Achtung: Im kompilierten Modus können Sie keine Referenzen auf lokale Variablen benutzen. Weitere Informationen zur SQL Programmierung in 4D finden Sie im Abschnitt Einführung in SQL Befehle.

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.

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)

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)

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)

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

   [Invoices] mit folgenden Spalten (Feldern):
      ID_Inv: Longint
      Date_Inv: Date
      Amount: Real
   [Lines_Invoices] mit folgenden Spalten (Feldern):
      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)

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.



Siehe auch 

QUERY BY FORMULA

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: SQL
Nummer: 942

Dieser Befehl ändert die Systemvariable OKDieser Befehl ändert die Systemvariable ErrorDieser Befehl ändert den aktuellen DatensatzDieser Befehl ändert die aktuelle AuswahlBefehl löst Austausch zwischen Client und Server aus

 
GESCHICHTE 

Erstellt: 4D v11 SQL

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)