Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
SQL EXECUTE
|
SQL EXECUTE ( SQLAnweisung {; GebundObj}{; GebundObj2 ; ... ; GebundObjN} ) | ||||||||
Parameter | Typ | Beschreibung | ||||||
SQLAnweisung | Text |
![]() |
Auszuführender SQL Befehl | |||||
GebundObj | Variable, Feld |
![]() |
Empfängt Ergebnis (wenn erforderlich) | |||||
Der Befehl SQL EXECUTE führt einen SQL Befehl aus und verbindet das Ergebnis mit 4D Objekten (Arrays, Variablen oder Felder).
Der Befehl wird nur ausgeführt, wenn der aktuelle Prozess eine gültige Verbindung enthält.
Der Parameter SQLAnweisung enthält den auszuführenden SQL Befehl, GebundObj empfängt das Ergebnis.
Variablen werden in der Reihenfolge der Spalten gebunden, d.h. verbleibende Spalten der SQL Anweisung ohne zugeordnete Variablen bleiben außer Acht.
Warnung: Übergeben Sie 4D Felder im Parameter GebundObj und führen den Befehl SELECT aus, werden immer die Daten der remote 4D Quelle geändert. Um Daten aus der remote Quelle lokal wiederzufinden, müssen Sie intermediäre lokale Arrays verwenden und den Befehl INSERT aufrufen (siehe Beispiel 6).
Werden in GebundObj als Parameter 4D Felder übergeben, erstellt der Befehl Datensätze und sichert sie automatisch.
4D Felder müssen aus derselben Tabelle stammen. Sie können nicht im gleichen Aufruf ein Feld aus Tabelle 1, ein weiteres Feld aus Tabelle 2 übergeben. In diesem Fall wird ein Fehler generiert.
Übergeben Sie in GebundObj 4D Arrays oder Variablen, sollten Sie diese vor Aufruf des Befehls deklarieren, um den Typ der bearbeiteten Daten zu überprüfen. Arrays werden bei Bedarf automatisch angepasst.
Mit einer 4D Variablen wird zur selben Zeit ein Datensatz geholt. Andere Ergebnisse werden ignoriert.
Weitere Informationen dazu finden Sie im Abschnitt Einführung in SQL Befehle.
In diesem Beispiel erhalten wir die Spalte ename der Tabelle emp der Datenquelle. Das Ergebnis wird gespeichert in der 4D Tabelle [employee]Name. 4D Datensätze werden automatisch angelegt:
SQLStmt:="SELECT ename FROM emp"
SQL EXECUTE(SQLStmt;[Employee]Name)
SQL LOAD RECORD(SQL all records)
Um die Erstellung von Datensätzen zu prüfen, können Sie Code in eine Transaktion setzen und nur dann bestätigen, wenn die Operation zu einem zufriedenstellenden Ergebnis führt:
SQL LOGIN("mysql";"root";"")
SQLStmt:="SELECT alpha_field FROM app_testTable"
START TRANSACTION
SQL EXECUTE(SQLStmt;[Table 2]Field1)
While(Not(SQL End selection))
SQL LOAD RECORD
... `Setze hier Code zur Bestätigung der Daten
End while
VALIDATE TRANSACTION `Transaktion bestätigen
In diesem Beispiel erhalten wir die Spalte ename der Tabelle emp der Datenquelle. Das Ergebnis wird gespeichert im Array aName. Wir holen Datensätze in 10er Schritten.
ARRAY STRING(30;aName;20)
SQLStmt:="SELECT ename FROM emp"
SQL EXECUTE(SQLStmt;aName)
While(Not(SQL End selection))
SQL LOAD RECORD(10)
End while
In diesem Beispiel erhalten wir die Spalten ename und job der Tabelle emp für eine spezifische ID (WHERE Klausel) der Datenquelle. Das Ergebnis wird gespeichert in den 4D Variablen vName und vJob. Es wird nur der erste Datensatz erwartet.
SQLStmt:="SELECT ename, job FROM emp WHERE id = 3"
SQL EXECUTE(SQLStmt;vName;vJob)
SQL LOAD RECORD
In diesem Beispiel erhalten wir die Spalte Blob_Field der Tabelle Test in der Datenquelle. Das Ergebnis wird gespeichert in einer BLOB Variable, deren Wert bei jedem Laden eines Datensatzes aktualisiert wird
C_BLOB(MyBlob)
SQL LOGIN
SQL EXECUTE("SELECT Champ_Blob FROM Test";MyBlob)
While(Not(SQL End selection))
`Wir sichten die Ergebnisse
SQL LOAD RECORD
`Der Wert von MyBlob wird bei jedem Aufruf aktualisiert.
End while
Sie wollen Daten, die in einer remote 4D Server Datenbank gespeichert sind, lokal wiederfinden. Dazu müssen Sie dazwischen gesetzte Arrays verwenden:
// An die remote Datenbank anmelden
SQL LOGIN("IP:192.168.18.15:19812";"Benutzer";"Kennwort";*)
If(OK=1)
// Ab hier werden alle SQL Anfragen auf der remote Datenbank gemacht
C_TEXT($LastName_value) // 4D Variable, die in der Suchanweisung verwendet wird
ARRAY TEXT($a_LastName;0) // Temporäres Speichern der remote Werte für Nachname
ARRAY TEXT($a_FirstName;0) // Temporäres Speichern der remote Werte für Vorname
C_BOOLEAN($UseSQL) //Auswahl der Art für lokales Speichern von Daten aus der remote Datenbank
// (nur Demo)
$LastName_value:="Smith" // Initialisierung der 4D Variable
// Die Variable 4D $LastName_value dem ersten "?" in der SQL Anfrage zuordnen
SQL SET PARAMETER($LastName_value;SQL param in)
// Aus der remote Tabelle PERSONS die Werte der Felder LastName und FirstName finden
// mit "LastName = Smith" und sie in den Arrays $a_LastName und $a_FirstName speichern
SQL EXECUTE("SELECT LastName, FirstName FROM PERSONS WHERE LastName = ?";$a_LastName;$a_FirstName)
If(Not(SQL End selection)) // Wird mindestens ein Datensatz gefunden
SQL LOAD RECORD(SQL all records) // Lädt alle Datensätze
$UseSQL:=True // Wählt die Art, wie die Daten integriert werden (nur Demo)
If($UseSQL) // SQL Anfragen verwenden
SQL LOGOUT // Von der remote Datenbank abmelden
SQL LOGIN(SQL_INTERNAL;"user";"password") // An die lokale Datenbank anmelden
// Ab hier werden alle SQL Anfragen in der lokalen Datenbank gemacht
// Die Arrays $a_LastName und $a_FirstName in der lokalen Tabelle PERSONS sichern
SQL EXECUTE("INSERT INTO PERSONS(LastName, FirstName) VALUES (:$a_LastName, :$a_FirstName);")
Else // 4D Befehle verwenden
For($i;1;Size of array($a_LastName))
CREATE RECORD([PERSONS])
[PERSONS]LastName:=$a_LastName{$i}
[PERSONS]FirstName:=$a_FirstName{$i}
SAVE RECORD([PERSONS])
End for
End if
End if
SQL LOGOUT // Die Verbindung schließen
End if
Bei korrekt ausgeführtem Befehl hat die Systemvariable OK den Wert 1, sonst den Wert 0 (Null).
Produkt: 4D
Thema: SQL
Nummer:
820
Erstellt: 4D 2004
4D Programmiersprache ( 4D v20 R7)