4D v16.3

Présentation des commandes du thème SQL

Accueil

 
4D v16.3
SQL
Présentation des commandes du thème SQL

Présentation des commandes du thème SQL  


 

 

4D comporte un moteur SQL intégré. Le programme inclut également un serveur SQL pouvant répondre aux requêtes d'autres applications 4D ou d'applications tierces (via le pilote ODBC de 4D).

La documentation SQL de 4D se compose de deux parties :

  • le Guide de référence SQL de 4D (4D - Référence SQL). Ce manuel décrit les différents modes d'accès au moteur SQL de 4D, le paramétrage du serveur SQL ainsi que les commandes et mots-clés utilisables dans les requêtes SQL (par exemple SELECT ou UPDATE). Reportez-vous à ce manuel pour plus d'informations sur l'utilisation du langage SQL dans 4D.

Les commandes SQL intégrées de 4D débutent par le préfixe "SQL". Elles appliquent les principes suivants :

  • Sauf indication contraire, vous pouvez utiliser ces commandes avec le moteur SQL interne de 4D ou dans une connexion externe ouverte directement ou via ODBC. La commande SQL LOGIN vous permet de définir le type de connexion à ouvrir.
  • La portée d’une connexion est le process. Si vous souhaitez gérer plusieurs connexions simultanément, vous devez démarrer un process par SQL LOGIN.
    La commande SQL CANCEL LOAD permet d’exécuter plusieurs requêtes SELECT dans la même connexion.
  • Vous pouvez intercepter les erreurs ODBC éventuellement générées lors de l’exécution d’une des commandes SQL de haut niveau à l’aide la commande ON ERR CALL. La commande SQL GET LAST ERROR permet dans ce cas d’obtenir des informations supplémentaires.

Le standard ODBC (Open DataBase Connectivity) définit une librairie de fonctions standardisées. Ces fonctions permettent à une application telle que 4D d’accéder via le langage SQL à tout système de gestion de données compatible ODBC (bases de données, tableurs, autre application 4D, etc.).

Note : 4D permet également d’importer et d’exporter des données dans une source ODBC via les commandes IMPORT ODBC et EXPORT ODBC ou "manuellement" en mode Développement. Pour plus d'informations, reportez-vous au manuel Mode Développement de 4D.

Note : Les commandes SQL de haut niveau de 4D permettent de mettre en place des solutions simples pour faire communiquer les applications 4D et des sources de données ODBC. Si vos applications nécessitent une prise en charge plus étendue du standard ODBC, vous devrez acquérir le plug-in ODBC “bas niveau” de 4D, 4D ODBC Pro.

Le tableau suivant liste les correspondances établies automatiquement par 4D entre les types de données 4D et SQL :

Type 4DType SQL
C_ALPHASQL_C_CHAR
C_TEXTESQL_C_CHAR
C_REELSQL_C_DOUBLE
C_DATESQL_C_TYPE_DATE
C_HEURESQL_C_TYPE_TIME
C_BOOLEENSQL_C_BIT
C_ENTIERSQL_C_SHORT
C_ENTIER LONGSQL_C_SLONG
C_BLOBSQL_C_BINARY
C_IMAGESQL_C_BINARY
C_GRAPHESQL_C_BINARY

Note : Les données de type objet (C_OBJECT) ne sont pas prises en charge par le moteur SQL de 4D.

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 :

  • insérer le nom de l’objet 4D entre les caractères << et >> dans le texte de la requête.
  • faire précéder la référence de deux-point ":"
    Exemples :
 SQL EXECUTE("INSERT INTO emp (empno,ename) VALUES (<<vEmpno>>,<<vEname>>)")
 SQL EXECUTE("SELECT age FROM People WHERE name= :vNom")

Note de compatibilité : Jusqu'à la version 11.6 de 4D, en mode compilé, vous ne pouviez pas utiliser de références à des variables locales (débutant par le signe $). Cette limitation est supprimée dans 4D à compter de la version 11.7.

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 :

  • vous pouvez utiliser des variables locales à l'intérieur d'une séquence Begin SQL / End SQL, hormis avec la commande EXECUTE IMMEDIATE ;
  • vous pouvez utiliser des variables locales avec la commande SQL EXECUTE lorsque ces variables sont utilisées directement dans le paramètre de requête SQL et non via des références.
    Par exemple, le code suivant fonctionnera en mode compilé :
     SQL EXECUTE("select * from t1 into :$mavar") // fonctionne en mode compilé

    Le code suivant générera une erreur 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 :

  • en utilisant les paramètres supplémentaires de la commande SQL EXECUTE (solution conseillée).
  • en utilisant la clause INTO dans la requête SQL elle-même (solution à réserver aux cas particuliers).

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 :

  • Vous créez la list box devant recevoir le résultat de la requête. La source de données de la list box doit être Tableaux.
  • Vous exécutez la requête SQL de type SELECT et assignez le résultat à la variable associée la list box. Vous pouvez utiliser les mots-clés Begin SQL/End SQL (cf. manuel Langage de 4D).
  • Les colonnes de la list box sont triables et modifiables par l’utilisateur.
  • Chaque nouvelle exécution d’une requête SELECT avec la list box provoque la réinitialisation des colonnes (il n’est pas possible de remplir progressivement une même list box à l’aide de plusieurs requêtes SELECT).   
  • Il est préférable de placer dans la list box autant de colonnes qu’il y aura de colonnes SQL dans le résultat de la requête SQL. Si le nombre de colonnes de la list box est inférieur à celui requis par la requête SELECT, des colonnes sont automatiquement ajoutées. Si le nombre de colonnes de la list box est supérieur à celui requis par la requête SELECT, les colonnes superflues sont automatiquement masquées.
    Note : Les colonnes ajoutées automatiquement sont liées à des Variables dynamiques de type tableau. La durée de vie de ces tableaux dynamiques est celle du formulaire. Une variable dynamique est également créée pour chaque en-tête. Lorsque la commande LISTBOX GET ARRAYS est appelée, le paramètre tabVarCols contient des pointeurs vers les tableaux dynamiques et le paramètre tabVarEntêtes contient des pointeurs vers les variables d’entête dynamiques. Si une colonne ajoutée est par exemple la cinquième, son nom est sql_column5 et son nom d’en-tête sql_header5.
  • En mode interprété, les tableaux existants et utilisés pourront être retypés automatiquement en fonction des données renvoyées par la requête SQL.

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



Voir aussi  

EXPORT ODBC
IMPORT ODBC

 
PROPRIÉTÉS 

Produit : 4D
Thème : SQL

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)