Version 11.3 (Geändert)
4D bietet ab Version 11 eine integrierte SQL Engine. Das Programm enthält auch einen SQL Server, den andere 4D Anwendungen oder third-party Anwendungen über den 4D OBDC Treiber abfragen können.
Die verschiedenen Wege, um auf die 4D SQL Engine zuzugreifen, die Konfiguration des SQL Server sowie die Befehle und Schlüsselwörter für SQL Anfragen werden ausführlich im Handbuch 4D SQL Reference beschrieben.
Dieses Kapitel enthält verschiedene 4D Befehle zur Verwendung von SQL in 4D:
SQL Server steuern: START SQL SERVER und STOP SQL SERVER
Direkt auf die integrierte SQL Engine zugreifen: SET FIELD VALUE NULL, Is Field Value Null, QUERY BY SQL.
Verbindungen an externe oder interne Datenquellen (SQL pass-through) verwalten: GET DATA SOURCE LIST, Get current data source, SQL LOGIN, SQL LOGOUT.
High-level Befehle, um Daten im Rahmen direkter SQL Verbindungen oder via ODBC zu verwalten: Begin SQL, End SQL, SQL CANCEL LOAD, SQL LOAD RECORD, SQL EXECUTE, SQL EXPORT, SQL End of selection, SQL SET OPTION, SQL SET PARAMETER, SQL IMPORT, SQL GET LAST ERROR, SQL GET OPTION.
Arbeitsweise der high-level SQL Befehle
Die integrierten SQL Befehle beginnen mit der Vorsilbe SQL. Sie führen folgendes aus:
Sie können diese Befehle mit der 4D internen SQL Engine oder in einer externen Verbindung verwenden, die direkt oder via ODBC geöffnet wird. Über den Befehl SQL LOGIN können Sie die Art der zu öffnenden Verbindung angeben.
Die Reichweite einer Verbindung ist der Prozess. Wollen Sie mehrere gleichzeitige Verbindungen verwalten, müssen Sie mit dem Befehl SQL LOGIN einen Prozess starten.
Mit dem Befehl SQL CANCEL LOAD können Sie mehrere SELECT-Anfragen in derselben Verbindung ausführen.
Mit dem Befehl ON ERR CALL können Sie jeden ODBC Fehler abfangen, der während der Ausführung eines high-level SQL Befehls auftritt. Über den Befehl SQL GET LAST ERROR erhalten Sie zusätzliche Informationen.
Unterstützung von ODBC Standard
Der ODBC Standard (Open DataBase Connectivity) spezifiziert eine Library mit standardisierten Funktionen. Damit kann eine Anwendung wie 4D via SQL Programmiersprache auf jedes ODBC-kompatible Datenmanagement-System, wie Datenbanken, Tabellenkalkulation, andere 4D Programme, etc. zugreifen.
4D ermöglicht auch, im Designmodus Daten in eine ODBC Quelle zu importieren bzw. daraus zu exportieren. Weitere Informationen dazu finden Sie im Handbuch 4D Designmodus.
Hinweis: Die high-level SQL Befehle von 4D eignen sich für einfache Vorgehensweisen, über die 4D Anwendungen mit ODBC Datenquellen kommunizieren können. Für eine komplexere Unterstützung von ODBC Standards benötigen Sie 4D ODBC Pro, das "low level" ODBC Plug-In für 4D.
Entsprechung der Datentypen
Nachfolgende Tabelle zeigt die Entsprechungen, die 4D automatisch zwischen 4D und SQL Datentypen herstellt:
4D Typ | SQL Typ |
C_STRING | SQL_C_CHAR |
C_TEXT | SQL_C_CHAR |
C_REAL | SQL_C_DOUBLE |
C_DATE | SQL_C_TYPE_DATE |
C_TIME | SQL_C_TYPE_TIME |
C_BOOLEAN | SQL_C_BIT |
C_INTEGER | SQL_C_SHORT |
C_LONGINT | SQL_C_SLONG |
C_BLOB | SQL_C_BINARY |
C_PICTURE | SQL_C_BINARY |
C_GRAPH | SQL_C_BINARY |
Referenz auf 4D Ausdrücke in SQL Anfragen setzen
4D bietet zwei Wege, um 4D Ausdrücke (Variablen, Arrays, Felder, Zeiger, gültige Ausdrücke) in SQL Anfragen einzufügen: Direkte Assoziation und Parameter setzen über den Befehl SQL SET PARAMETER.
Bei der direkten Assoziation sind 2 Wege möglich:
Sie setzen den Namen des 4D Objekts im Anfragetext zwischen spitze Klammern:
SQL EXECUTE("INSERT INTO emp (empnum,ename) VALUES (<<vEmpnum>>,<<vEname>>)
Sie setzen einen Doppelpunkt vor die Referenz:
SQL EXECUTE("SELECT age from People WHERE name= :vName"
In diesen Beispielen ersetzen die aktuellen Werte der 4D Variablen vEmpnum, vEname und vName die Parameter, wenn die Anfrage ausgeführt wird. Das funktioniert auf dieselbe Art mit 4D Feldern und Arrays.
Diese einfache Syntax hat jedoch den Nachteil, dass sie nicht mit den SQL Standards im Einklang ist und keine Ausgabeparameter zulässt. Um dem abzuhelfen, verwenden Sie den BefehlSQL SET PARAMETER. Damit integrieren Sie jedes 4D Objekt in eine Anfrage und definieren seine Verwendungsart (Eingabe, Ausgabe oder beides). Auf diese Weise wird eine standardmäßige Syntax erstellt. Weitere Informationen dazu finden Sie unter dem Befehl SQL SET PARAMETER.
Beispiele
1. Dieses Beispiel führt eine SQL Anfrage aus, die direkt die zugewiesenen 4D Arrays verwendet:
ARRAY TEXT(MyTextArray;10) ARRAY LONGINT(MyLongintArray;10) For(vCounter;1;Size of array(MyTextArray)) MyTextArray{vCounter}:="Text"+String(vCounter) MyLongintArray{vCounter}:=vCounter End for SQL LOGIN("mysql";"root";"") SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<MyTextArray>>, <<MyLongintArray>>)" SQL EXECUTE(SQLStmt)
2. Dieses Beispiel führt eine SQL Anfrage aus, die direkt die zugewiesenen 4D Felder verwendet:
ALL RECORDS([Table 2]) SQL LOGIN("mysql";"root";"") SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<[Table 2]Field1>"+">,<<[Table 2]Field2>>)" SQL EXECUTE(SQLStmt)
3. Dieses Beispiel führt eine SQL Anfrage aus, die direkt Variableninhalt über einen dereferenzierten Zeiger übergibt:
C_LONGINT($vLong) C_POINTER($vPointer) $vLong:=1 $vPointer:=->$vLong SQL LOGIN("mysql";"root";"") SQLStmt:="SELECT Col1 FROM TEST WHERE Col1=:$vPointer"; SQL EXECUTE(SQLStmt)
Werte in 4D wiederfinden
In 4D gibt es zwei Möglichkeiten, Werte in der 4D Programmiersprache wiederzufinden, die sich aus SQL Abfragen ergeben:
Über den zusätzlichen Parameter im Befehl SQL EXECUTE (empfohlene Lösung)
Über die INTO Klausel in der SQL Anfrage selbst (Alternativ-Lösung für spezifische Fälle)