4D v16.3

Einführung in SQL Befehle

Home

 
4D v16.3
SQL
Einführung in SQL Befehle

Einführung in SQL Befehle  


 

 

4D bietet eine integrierte SQL Engine. Das Programm enthält auch einen SQL Server, den andere 4D Anwendungen oder third-party Anwendungen über den 4D ODBC Treiber abfragen können.

Die SQL Dokumentation in 4D besteht aus zwei Bereichen:

Die integrierten SQL Befehle beginnen mit der Vorsilbe SQL. Sie führen folgendes aus:

  • Sie können diese Befehle mit der 4D internen SQL Engine oder in einer externen Verbindung verwenden, die direkt oder via ODBC geöffnet wird. Über den Befehl SQL LOGIN können Sie die Art der zu öffnenden Verbindung angeben.
  • Die Reichweite einer Verbindung ist der Prozess. Wollen Sie mehrere gleichzeitige Verbindungen verwalten, müssen Sie mit dem Befehl SQL LOGIN einen Prozess starten.
  • Mit dem Befehl ON ERR CALL können Sie jeden ODBC Fehler abfangen, der während der Ausführung eines high-level SQL Befehls auftritt. Über den Befehl SQL GET LAST ERROR erhalten Sie zusätzliche Informationen.

Der ODBC Standard (Open DataBase Connectivity) spezifiziert eine Library mit standardisierten Funktionen. Damit kann eine Anwendung wie 4D via SQL Programmiersprache auf jedes ODBC-kompatible Datenmanagement-System, wie Datenbanken, Tabellenkalkulation, andere 4D Programme, etc. zugreifen.
4D ermöglicht auch, Daten in eine ODBC Quelle zu importieren bzw. daraus zu exportieren, entweder über die Befehle IMPORT ODBC oder EXPORT ODBC oder "manuell" im Designmodus. Weitere Informationen dazu finden Sie im Abschnitt Import und Export über ODBC Datenquelle des Handbuchs 4D Designmodus.

Hinweis: Die high-level SQL 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 für 4D.

Nachfolgende Tabelle zeigt die Entsprechungen, die 4D automatisch zwischen 4D und SQL Datentypen herstellt:

4D TypSQL Typ
C_STRINGSQL_C_CHAR
C_TEXTSQL_C_CHAR
C_REALSQL_C_DOUBLE
C_DATESQL_C_TYPE_DATE
C_TIMESQL_C_TYPE_TIME
C_BOOLEANSQL_C_BIT
C_INTEGERSQL_C_SHORT
C_LONGINTSQL_C_SLONG
C_BLOBSQL_C_BINARY
C_PICTURESQL_C_BINARY
C_GRAPHSQL_C_BINARY

Hinweis: Der SQL Kernel von 4D unterstützt nicht Daten vom Typ Objekt (C_OBJECT).

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:

  • Sie setzen den Namen des 4D Objekts im Anfragetext zwischen spitze Klammern
  • Sie setzen einen Doppelpunkt vor die Referenz:
 SQL EXECUTE("INSERT INTO emp (empnum,ename) VALUES (<<vEmpnum>>,<<vEname>>)")
 SQL EXECUTE("SELECT age FROM People WHERE name= :vName")
Hinweis: Im kompilierten Modus können Sie keine Referenzen auf lokale Variablen verwenden (mit vorangestellten Symbol $).

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 unter bestimmten Bedingungen in SQL Statements lokale Variablenreferenzen (mit vorangestelltem Zeichen $) verwenden:

  • Sie können lokale Variablen innerhalb einer Sequenz Begin SQL / End SQL einsetzen, außer für den Befehl EXECUTE IMMEDIATE;
  • Sie können lokale Variablen mit dem Befehl SQL EXECUTE einsetzen, wenn diese Variablen direkt im Parameter der SQL Anfrage und nicht über Referenzen verwendet werden.
    So funktioniert z.B. folgender Code im kompilierten Modus:
     SQL EXECUTE("select * from t1 into :$myvar") // funktioniert im kompilierten Modus

    während folgender Code einen Fehler im kompilierten Modus generiert:
     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:

  • Über den zusätzlichen Parameter im Befehl SQL EXECUTE (empfohlene Lösung)
  • Über die INTO Klausel in der SQL Anfrage selbst (Alternativ-Lösung für spezifische Fälle)

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:

  • Sie erstellen die Listbox zum Empfangen des Suchergebnisses. Die Datenquelle der Listbox muss vom Typ Array sein.
  • Führen Sie eine SQL-Suche vom Typ SELECT aus und weisen Sie das Ergebnis der mit der Listbox verknüpften Variablen zu. Sie können die 4D Tags Begin SQL/End SQL verwenden.
  • Listbox-Spalten lassen sich vom Benutzer sortieren oder ändern.
  • Bei erneuter Ausführung einer Anfrage mit SELECT werden die Spalten neu gefüllt. Es ist nicht möglich, dieselbe Listbox mit mehreren SELECT Anfragen nacheinander zu füllen.   
  • Es wird empfohlen, der Listbox die gleiche Anzahl Spalten zu geben wie im Ergebnis der SQL Anfrage sind. Gibt es weniger Listbox-Spalten als für die SELECT Anfrage erforderlich, werden automatisch Spalten hinzugefügt. Gibt es mehr Spalten als für die SELECT Anfrage erforderlich, werden die nicht benötigten Spalten automatisch ausgeblendet.
    Hinweis: Den automatisch hinzugefügten Spalten werden Variablen vom Typ Dynamische Variablen zugewiesen, d.h. sie bestehen solange wie das Formular. Eine dynamische Variable wird auch für jeden Kopfteil erstellt. Beim Aufrufen des 4D Befehls LISTBOX GET ARRAYS enthält der Parameter arrColVars Zeiger auf die dynamischen Arrays und der Parameter arrHeaderVars Zeiger auf die dynamischen Kopfteilvariablen. Ist die hinzugefügte Spalte z.B. die fünfte Spalte, lautet ihr Name sql_column5 und ihr Kopfteil sql_header5.
  • Im interpretierten Modus lassen sich vorhandene Arrays, welche die Listbox verwendet, automatisch entsprechend der von der SQL-Anfrage gesendeten Daten erneut tippen.

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



Siehe auch 

EXPORT ODBC
IMPORT ODBC

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: SQL

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)