Hier erfahren Sie, wie Sie einfache SQL Befehle auf zwei Arten in die 4D Programmierung einfügen können:
- Mehrere SQL Befehlszeilen eingefügt in einen SQL Block
- Eine Befehlszeile, um die in einer Textvariablen gespeicherten Befehle auszuführen
Sie können SQL Befehle in 4D wie in anderen Tools integrieren:
- mysql_query in PHP
- INCLUDE SQLCA in COBOL
- usw.
Diese Befehle lassen sich auch leicht in Ihre Entwicklungsprojekte integrieren.
Wir nehmen unser Formular STATS, um dasselbe Array über SQL Befehle zu erstellen:
- Wir duplizieren die Schaltfläche "Calculate"
- Der Anfang der Methode bleibt gleich
- Da noch keine Datensätze ausgewählt sind, hat das Array Technicians 0 Elemente
- Wir setzen das Array Technicians IDs in eine lokale Variable, wir müssen sie später nicht sichern
- Dann integrieren wir den SQL Code
Dies wählt den Nachnamen und die ID aus der Tabelle Technicians aus und überträgt sie in 2 Arrays.
Beachten Sie die Syntax, die angibt, dass 4D das Ergebnis in die Arrays übertragen soll. Wir verwenden den Variablennamen mit vorangestelltem “:” (Doppelpunkt).
Die restliche Methode (Gestaltung Array Interventions) wird überall gleich strukturiert:
- Wir fügen den Wert $Nb ein, um zu sehen, wieviel Techniker bearbeitet werden
- Entfernen den Endteil, den wir mit SQL Befehlen ersetzen wollen
- Wir sichern die ID des Technikers zum Bearbeiten in einer Variablen
- Führen die SQL Befehle aus, die Anfangs- und Endjahr berücksichtigen
- Und weisen dem Array Nbinterventions Werte am X Element zu
Wird die Methode ausgeführt:
- Wir übergeben den SQL Code
- Wir haben 7 Techniker
- Wir passen das Array Nbinterventions in der Größe an
- Führen für jeden Wert im Array ein SELECT COUNT aus
- Speichern ihn in einer Ergebnisvariablen
Anschließend sollte die Methode wie folgt aussehen
$YearStart:=Date("01/01/"+String($Year))
$YearEnd:=Add to date($YearBegin;1;0;-1)
ARRAY TEXT(Array_Technicians;0)
ARRAY TEXT($Array_IDTechnicians;0)
Begin SQL
SELECT LastName, Technican_ID
FROM TECHNICIANS
INTO :Array_Technicians, :$Array_IDTechnicians
End SQL
$Nb:=Size of array(Array_Technicians)
ARRAY LONGINT(Array_NbInterventions;$Nb)
FIRST RECORD([Technicians])
For($i;1;$NbEnter)$ID:=$Array_IDTechnicians{$i}
$Result:=0
Begin SQL
SELECT COUNT(*)
FROM INTERVENTIONS
WHERE INTERVENTIONS.Technician_ID=:$ID AND
INTERVENTIONS.Date_Intervention>=:$YearStart AND
INTERVENTIONS.Date_Intervention<=:$YearEnd
INTO :$Result;
End SQL
Array_NbInterventions{$i}:=$Result
End for
Egal, ob wir nun die eine oder andere Option wählen, wir erhalten stets dasselbe Ergebnis.
Ein anderer Weg, speziell für den ersten Teil, ist nachfolgende Schreibweise. Unter den ersten Tag EndSQL (Zeile 14) fügen wir nachfolgenden Code ein:
\\Vergessen Sie im folgenden Code nicht, das Leerzeichen oder Zeilenschaltung am Ende jeder Zeile zu setzen.
C_TEXT($TextQuery)
$TextQuery:="SELECT Last Name, Technician_ID "
$TextQuery:=$TextQuery+"FROM TECHNICIANS "
$TextQuery:=$TextQuery+"INTO :Array_Technicians, :$Array_IDTechnicians"
Begin SQL\\Wir wollen nur den Nachnamen des Technikers finden und in einem Array speichern.
EXECUTE IMMEDIATE :$TextQuery;
End SQL
und erhalten exakt dasselbe Ergebnis.
Hier sollten Sie folgendes beachten:
In einer SQL Anfrage können wir weder Zeiger noch Array-Zeilen verwenden, da sie der Interpreter nicht berücksichtigt. Für diese Elemente ist es in der Regel besser, die Anfrage als Text zu erstellen und dann mit dem SQL Befehl EXECUTE IMMEDIATE auszuführen.
Das wählt den Nachnamen und die ID in der Tabelle Technicians aus und überträgt sie in die beiden Arrays.