Version 11 (Geändert)
Überblick
Dieses Kapitel enthält Befehle, die 4D ermöglichen, via Standardprotokolle auf Daten in anderen Anwendungen zuzugreifen. In der derzeitigen 4D Version sind nur ODBC Befehle verfügbar.
Der ODBC (Open DataBase Connectivity) Standard bietet eine Library mit standardisierten Funktionen, die einer Anwendung wie 4D via SQL Sprache ermöglichen, auf jedes ODBC-kompatible Datenmanagement-System, wie Datenbanken, Tabellenkalkulation, etc. zuzugreifen.
Hinweis: 4D ermöglicht auch, Daten von einer ODBC Quelle in den Designmodus zu importieren bzw. daraus zu exportieren. Weitere Informationen dazu finden Sie im Handbuch 4D Designmodus.
Die high-level ODBC 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 for 4D.
Arbeitsweise der integrierten ODBC Befehle
Die integrierten ODBC Befehle von 4D führen folgendes aus:
Die Reichweite einer Verbindung ist der Prozess. Wollen sie mehrere gleichzeitige Verbindungen verwalten, müssen Sie mit dem Befehl ODBC LOGIN einen Prozess starten.
Mit dem Befehl ODBC CANCEL LOAD können Sie mehrere SELECT-Anfragen in derselben Verbindung ausführen.
Sie können die meisten Befehle dieses Kapitels mit dem 4D internen SQL Kernel verwenden.
Mit dem Befehl ON ERR CALL können Sie jeden ODBC Fehler abfangen, der während der Ausführung eines ODBC Befehls auftritt. Über den Befehl ODBC GET LAST ERROR erhalten Sie zusätzliche Informationen.
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 ODBC Anfragen setzen
4D bietet zwei Wege, um 4D Ausdrücke (Variablen, Arrays, Felder, Zeiger, gültige Ausdrücke) in ODBC Anfragen einzufügen: Direkte Assoziation und Parameter setzen über den Befehl ODBC SET PARAMETER.
Bei der direkten Assoziation sind 2 Wege möglich:
Sie setzen den Namen des 4D Objekts im Anfragetext zwischen spitze Klammern:
ODBC EXECUTE("INSERT INTO emp (empnum,ename) VALUES (<<vEmpnum>>,<<vEname>>)
Sie setzen einen Doppelpunkt vor die Referenz:
ODBC 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 BefehlODBC 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 ODBC SET PARAMETER.
Beispiele
1. Dieses Beispiel führt eine ODBC 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
ODBC LOGIN("mysql";"root";"")
SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<MyTextArray>>, <<MyLongintArray>>)"
ODBC EXECUTE(SQLStmt)
2. Dieses Beispiel führt eine ODBC Anfrage aus, die direkt die zugewiesenen 4D Felder verwendet:
ALL RECORDS([Table 2])
ODBC LOGIN("mysql";"root";"")
SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<[Table 2]Field1>"+">,<<[Table 2]Field2>>)"
ODBC EXECUTE(SQLStmt)
3. Dieses Beispiel führt eine ODBC Anfrage aus, die direkt Variableninhalt über einen dereferenzier-ten Zeiger übergibt:
C_LONGINT($vLong) C_POINTER($vPointer)
$vLong:=1
$vPointer:=->$vLong
ODBC LOGIN("mysql";"root";"")SQLStmt:="
SELECT Col1 FROM TEST WHERE Col1=:$vPointer";
ODBC EXECUTE(SQLStmt)
Werte in 4D wiederfinden
In 4D gibt es zwei Möglichkeiten, Werte aus SQL Abfragen wiederzufinden:
Über den zusätzlichen Parameter im Befehl ODBC EXECUTE (empfohlene Lösung):
ODBC EXECUTE("SELECT ename FROM emp";[Employees]Name)
Über die INTO Klausel in der SQL Anfrage selbst (Alternativ-Lösung für spezifische Fälle):
ODBC EXECUTE("SELECT ename FROM emp INTO :[Employees]Name")