4D v16

Recevoir le résultat d'une requête SQL dans une variable

Accueil

 
4D v16
Recevoir le résultat d'une requête SQL dans une variable

Recevoir le résultat d'une requête SQL dans une variable  


 

 

Commençons par une requête très simple : nous voulons savoir combien de films contient notre vidéothèque. En langage 4D, cette requête peut s'écrire ainsi :

 C_ENTIER LONG($AllMovies)
 $AllMovies:=0
 TOUT SELECTIONNER([MOVIES])
 $AllMovies:=Enregistrements trouves([MOVIES])
 ALERTE("La videothèque contient"+Chaine($AllMovies)+"films") 

  • La première façon d'interagir d'une manière similaire avec le moteur SQL est de placer la requête entre les balises Debut SQL et Fin SQL. Ainsi, le code précédent devient :

     C_ENTIER LONG($AllMovies)
     $AllMovies:=0
     Debut SQL
        SELECT COUNT(*)
        FROM MOVIES
        INTO <<$AllMovies>>
     Fin SQL
     ALERTE("La videothèque contient"+Chaine($AllMovies)+" films")

    Comme vous pouvez le constater, vous pouvez récupérer le résultat d'une requête dans une variable 4D (dans notre exemple, $AllMovies) incluse dans les symboles "<<" et ">>".

    Une autre manière de référencer tout type d'expression 4D valide (variable, champ, tableau, “expression...”) est de la faire précéder du caractère deux-points ":" :

     C_ENTIER LONG($AllMovies)
     $AllMovies:=0
     Debut SQL
        SELECT COUNT(*)
        FROM MOVIES
        INTO :$AllMovies
     Fin SQL
     ALERTE("La videothèque contient"+Chaine($AllMovies)+" films")

    Attention aux variables interprocess : elles doivent en plus être incluses entre des crochets "[" et "]" :

     C_ENTIER LONG(<>AllMovies)
     <>AllMovies:=0
     Debut SQL
        SELECT COUNT(*)
        FROM MOVIES
        INTO <<[<>AllMovies]>>
     Fin SQL
     ALERTE("La videothèque contient "+Chaine(<>AllMovies)+" films")

  • La deuxième façon d'interagir avec le moteur SQL est d'utiliser les commandes SQL génériques intégrées (compatibles ODBC). Le code devient alors :

     C_ENTIER LONG($AllMovies)
     $AllMovies:=0
     \\Initialize a connection with the internal SQL engine
     SQL LOGIN(SQL_INTERNAL;"";"")
     \\Execute the query and return the result in the$AllMovies variable
     SQL EXECUTER("SELECT COUNT(*) FROM MOVIES";$AllMovies)
     \\Retrieve all the records found
     SQL CHARGER ENREGISTREMENT(SQL tous les enregistrements)
     \\Close the connection
     SQL LOGOUT
     ALERTE("The Video Library contains "+Chaine($AllMovies)+" movies")

    Pour plus d'informations sur les commandes SQL génériques, reportez-vous au chapitre SQL dans le manuel Langage de 4D.

  • La troisième façon d'interagir avec le moteur SQL est d'utiliser la commande 4D CHERCHER PAR SQL. Le code devient :

     C_ENTIER LONG($AllMovies)
     $AllMovies:=0
     CHERCHER PAR SQL([MOVIES];"ID <> 0")
     $AllMovies:=Enregistrements trouves([MOVIES])
     ALERTE("La videothèque contient "+Chaine($AllMovies)+" films")

    La commande CHERCHER PAR SQL exécute une requête de type SELECT pouvant s'écrire de la manière suivante :

    SELECT *
    FROM maTable
    WHERE <Formule_SQL>

    maTable est le nom de la table passé en premier paramètre et Formule_SQL est le texte de la requête, passé en second paramètre :

     CHERCHER PAR SQL(maTable;Formule_SQL)

    Dans notre cas, il n'y a pas de clause WHERE, donc nous en ajoutons une : "ID <> 0". L'équivalent de la requête en code SQL serait :

    SELECT *
    FROM MOVIES
    WHERE ID <> 0
  • La quatrième façon d'interagir avec le moteur SQL est d'utiliser la commande SQL dynamique EXECUTE IMMEDIATE. Le code devient alors :

     C_ENTIER LONG(AllMovies)
     AllMovies:=0
     C_TEXTE(tQueryTxt)
     tQueryTxt:="SELECT COUNT(*) FROM MOVIES INTO :AllMovies"
     Debut SQL
        EXECUTE IMMEDIATE :tQueryTxt;
     Fin SQL
     ALERTE("La videothèque contient "+Chaine(AllMovies)+" films")

    Attention :
    Vous constatez que dans ce dernier exemple, nous utilisons des variables process. Ce principe est nécessaire si vous souhaitez utiliser la base en mode compilé. Dans ce contexte en effet, il n'est pas possible d'utiliser de variables locales avec la commande EXECUTE IMMEDIATE

Pour tester tous ces exemples, lancez la base "4D SQL Code Samples" et affichez la boîte de dialogue principale. Dans la partie gauche de la fenêtre, choisissez le mode d'interrogation du moteur de 4D :


Puis cliquez sur le bouton Requêtes SQL vers variables.

 
PROPRIÉTÉS 

Produit : 4D
Thème : Prise en main
Nom intl. : Receiving an SQL query result in a variable

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

4D - Référence SQL ( 4D v16)