Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20.6
QUERY BY SQL
|
QUERY BY SQL ( {Tabellenname ;} sqlFormel ) | ||||||||
Parameter | Typ | Beschreibung | ||||||
Tabellenname | Tabelle |
![]() |
Tabelle, an die eine Datensatzauswahl zurückgegeben wird ohne diesen Parameter Standardtabelle |
|||||
sqlFormel | String |
![]() |
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.
Produkt: 4D
Thema: SQL
Nummer:
942
Erstellt: 4D v11 SQL
4D Programmiersprache ( 4D v20)
4D Programmiersprache ( 4D v20.1)
4D Programmiersprache ( 4D v20.2)
4D Programmiersprache ( 4D v20.3)
4D Programmiersprache ( 4D v20.4)
4D Programmiersprache ( 4D v20.5)
4D Programmiersprache ( 4D v20.6)