Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
||||||||||||||||||||||||||||
|
4D v20 R7
Einführung in SQL Befehle
|
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 |
C_OBJECT | SQL_C_BINARY |
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:
SQL EXECUTE("INSERT INTO emp (empnum,ename) VALUES (<<vEmpnum>>,<<vEname>>)")
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 Befehl SQL 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.
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)
Im kompilierten Modus können Sie Referenzen auf lokale Variablen (beginnen mit dem Zeichen $) in SQL Anweisungen unter bestimmten Bedingungen verwenden:
SQL EXECUTE("select * from t1 into :$myvar") // arbeitet im kompilierten Modus
C_TEXT(tRequest)
tRequest:="select * from t1 into :$myvar"
SQL EXECUTE(tRequest) // Fehler im kompilierten Modus
In 4D gibt es zwei Möglichkeiten, Werte in der 4D Programmiersprache wiederzufinden, die sich aus SQL Abfragen ergeben:
Sie können die Ergebnisse einer SQL-Anfrage direkt in ein Array vom Typ Listbox setzen. So können Sie sich rasch die Ergebnisse von SQL Anfragen ansehen. Es sind nur Suchläufe vom Typ SELECT möglich (siehe Handbuch 4D SQL Reference). Dieser Mechanismus lässt sich nicht mit einer externen SQL Datenbank verwenden.
Dabei gilt folgendes:
Beispiel:
Wir wollen nach allen Datenfeldern der Tabelle [PEOPLE] suchen und den Inhalt mit der Variablen vlistbox in die Listbox setzen. Für die Objektmethode einer Schaltfläche (als eine Möglichkeit) schreiben Sie:
Begin SQL
SELECT * FROM PEOPLE INTO <<vlistbox>>
End SQL
_o_EXPORT ODBC
_o_IMPORT ODBC
Blog: Read 4D object fields with SQL Engine
Produkt: 4D
Thema: SQL
Geändert: 4D v17 R5
4D Programmiersprache ( 4D v20 R7)