4D v16

SQL

Home

 
4D v16
SQL

SQL    


 

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)
  //Typisieren der Variable ist zwingend, sonst erzeugt die Suche einen Fehler
 ARRAY TEXT(Array_Technicians;0) //Erstellt ein Array ohne Elemente; es wird bei der nächsten Suche gefüllt
 ARRAY TEXT($Array_IDTechnicians;0) //Erstellt Array zum Speichern der Techniker ID+
 
 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.

 
 

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: SQL

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

Self-Training ( 4D v16)