Vous êtes sur le site Web historique de la documentation de 4D. Les documentations sont progressivement déplacées vers developer.4d.com |
||||||||||||||||||||||||||||
|
4D v20 R7
Présentation des commandes du thème SQL
|
Type 4D | Type SQL |
C_ALPHA | SQL_C_CHAR |
C_TEXTE | SQL_C_CHAR |
C_REEL | SQL_C_DOUBLE |
C_DATE | SQL_C_TYPE_DATE |
C_HEURE | SQL_C_TYPE_TIME |
C_BOOLEEN | SQL_C_BIT |
C_ENTIER | SQL_C_SHORT |
C_ENTIER LONG | SQL_C_SLONG |
C_BLOB | SQL_C_BINARY |
C_IMAGE | SQL_C_BINARY |
C_GRAPHE | SQL_C_BINARY |
C_OBJET | SQL_C_BINARY |
4D propose deux modes d’insertion des expressions 4D (variable, tableau, champ, pointeur, expression valide) dans les requêtes SQL : l’association directe et la définition de paramètres via SQL SET PARAMETER.
L'association directe peut être effectuée de deux manières :
SQL EXECUTE("INSERT INTO emp (empno,ename) VALUES (<<vEmpno>>,<<vEname>>)")
SQL EXECUTE("SELECT age FROM People WHERE name= :vNom")
Note : En mode compilé, vous pouvez utiliser des références à des variables locales (débutant par le signe $) uniquement dans certaines conditions (voir ci-dessous).
Dans ces exemples, les valeurs courantes des variables 4D vEmpno, vEname et vNom seront substituées aux paramètres lors de l’exécution de la requête. Cette solution fonctionne également avec les champs et les tableaux 4D.
Cette syntaxe, simple d’utilisation, présente toutefois l’inconvénient de n’être pas conforme à la norme SQL et de ne pas permettre l’utilisation de paramètres de sortie. Pour y remédier, vous pouvez utiliser la commande SQL SET PARAMETER. Cette commande permet de définir chaque objet 4D à intégrer dans une requête ainsi que son mode d'utilisation (entrée, sortie ou les deux). La syntaxe produite est alors standard. Pour plus d'informations, reportez-vous à la description de la commande SQL SET PARAMETER.
(1) Cet exemple exécute une requête SQL utilisant directement des tableaux 4D associés :
ARRAY TEXT(MonTabTexte;10)
ARRAY LONGINT(MonTabLong;10)
For(vCounter;1;Size of array(MonTabTexte))
MonTabTexte{vCounter}:="Texte"+String(vCounter)
MonTabLong{vCounter}:=vCounter
End for
SQL LOGIN("mysql";"root";"")
SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<MonTabTexte>>, <<MonTabLong>>)"
SQL EXECUTE(SQLStmt)
(2) Cet exemple permet d’exécuter une requête SQL utilisant directement des champs 4D associés :
ALL RECORDS([Table 2])
SQL LOGIN("mysql";"root";"")
SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<[Table 2]Champ1>"+">,<<[Table 2]Champ2>>)"
SQL EXECUTE(SQLStmt)
(3) Cet exemple permet d’exécuter une requête SQL passant directement une variable via un pointeur non dépointé :
C_LONGINT($vLong)
C_POINTER($vPointeur)
$vLong:=1
$vPointeur:=->$vLong
SQL LOGIN("mysql";"root";"")
SQLStmt:="SELECT Col1 FROM TEST WHERE Col1=:$vPointeur"
SQL EXECUTE(SQLStmt)
En mode compilé, vous pouvez utiliser des références de variables locales (débutant par le caractère $) dans les instructions SQL sous certaines conditions :
SQL EXECUTE("select * from t1 into :$mavar") // fonctionne en mode compilé
C_TEXT(tRequete)
tRequete:="select * from t1 into :$mavar"
SQL EXECUTE(tRequete) // erreur en mode compilé
La récupération dans le langage de 4D des valeurs issues de requêtes SQL peut être effectuée de deux manières :
Il est possible de placer directement le résultat d’une requête SQL dans une list box de type tableau. Cette fonction offre un moyen rapide de visualiser le résultat des requêtes SQL. Seules les requêtes de type SELECT peuvent être utilisées. Ce mécanisme n’est pas utilisable avec une base SQL externe.
Les principes de mise en oeuvre sont les suivants :
Exemple
Nous voulons récupérer tous les champs de la table PERSONS et placer leur contenu dans la list box dont le nom de variable est vlistbox. Dans la méthode objet d’un bouton (par exemple), il suffit d’écrire :
Begin SQL
SELECT * FROM PERSONS INTO <<vlistbox>>
End SQL
_o_EXPORT ODBC
_o_IMPORT ODBC
Blog: Read 4D object fields with SQL Engine
Produit : 4D
Thème : SQL
Modifié : 4D v17 R5
4D - Langage ( 4D v20 R7)