4D v16.3

SQL EXECUTE

Accueil

 
4D v16.3
SQL
SQL EXECUTE

SQL EXECUTE 


 

SQL EXECUTE ( instructionSQL {; objetLié}{; objetLié2 ; ... ; objetLiéN} )  
Paramètre Type   Description
instructionSQL  Texte in Commande SQL à exécuter
objetLié  Variable, Champ in Réception du résultat (si nécessaire)

La commande SQL EXECUTE permet d’exécuter une commande SQL et d’associer le résultat à des objets 4D (tableaux, variables ou champs) liés.

Pour que la commande puisse être exécutée, une connexion valide doit être définie dans le process courant.

Le paramètre instructionSQL contient la commande SQL à exécuter. Le paramètre objetLié reçoit les résultats. Les objets sont liés dans l’ordre de la colonne, ce qui signifie que les éventuelles colonnes distantes supplémentaires sont ignorées.

Si des champs 4D sont passés dans le(s) paramètre(s) objetLié, la commande créera des enregistrements et les sauvegardera automatiquement. Les champs doivent appartenir à la même table (il n’est pas possible de passer un champ de la table 1 et un champ de la table 2 dans le même appel). Si des champs de tables différentes sont passés, une erreur est générée.

Attention : Lorsque vous passez des champs 4D dans le(s) paramètre(s) objetLié et exécutez la commande SELECT, ce sont toujours les données de la source 4D distante qui sont modifiées. Si vous souhaitez récupérer en local des données de la source distante, vous devez utiliser des tableaux locaux intermédiaires et appeler la commande INSERT (cf. exemple 6).

Si vous passez des tableaux ou des variables 4D dans le(s) paramètre(s) objetLié, il est conseillé de les déclarer préalablement à l’appel de la commande afin de contrôler le type de données traitées. Les tableaux sont redimensionnés automatiquement si nécessaire.

Dans le cas d’une variable 4D, un seul enregistrement est récupéré à la fois.

Note : Pour plus d'informations sur le référencement des expressions 4D dans les requêtes SQL, reportez-vous à la section Présentation des commandes du thème SQL.

Dans cet exemple, nous récupérons la colonne ename de la table emp dans la source de données. Le résultat est stocké dans le champ 4D [Employés]Nom. Les enregistrements 4D seront créés automatiquement :

 SQLStmt:="SELECT ename FROM emp"
 SQL EXECUTE(SQLStmt;[Employés]Nom)
 SQL LOAD RECORD(SQL all records)

Pour mieux contrôler la création des enregistrements, il est possible d’inclure le code au sein d’une transaction et de ne la valider que si le déroulement de l’opération s’est avéré satisfaisant :

 SQL LOGIN("mysql";"root";"")
 SQLStmt:="SELECT alpha_field FROM app_testTable"
 START TRANSACTION
 SQL EXECUTE(SQLStmt;[Table 2]Champ1)
 While(Not(SQL End selection))
    SQL LOAD RECORD
    ... `Placer ici le code de validation des données
 End while
 VALIDATE TRANSACTION `Validation de la transaction

Dans cet exemple, nous récupérons la colonne ename de la table emp dans la source de données. Le résultat est stocké dans le tableau tNoms. Nous récupérons les enregistrements 10 par 10.

 ARRAY STRING(30;tNoms;20)
 SQLStmt:="SELECT ename FROM emp"
 SQL EXECUTE(SQLStmt;tNoms)
 While(Not(SQL End selection))
    SQL LOAD RECORD(10)
 End while

Dans cet exemple, nous récupérons les colonnes ename et job de la table emp pour un ID spécifique (clause WHERE) de la source de données. Le résultat est stocké dans les variables 4D vNom and vJob. Seul le premier enregistrement est récupéré.

 SQLStmt:="SELECT ename, job FROM emp WHERE id = 3"
 SQL EXECUTE(SQLStmt;vName;vJob)
 SQL LOAD RECORD

Dans cet exemple, nous récupérons la colonne Champ_Blob de la table Test dans la source de données. Le résultat est stocké dans une variable BLOB dont la valeur est mise à jour à chaque chargement d’enregistrement.

 C_BLOB(MonBlob)
 SQL LOGIN
 SQL EXECUTE("SELECT Champ_Blob FROM Test";MonBlob)
 While(Not(SQL End selection))
  `On parcourt le résultat
    SQL LOAD RECORD
  `La valeur de MonBlob est mise à jour à chaque appel
 End while

Vous souhaitez récupérer en local des données stockées sur une base 4D Server distante. Pour cela, vous devez passer par des tableaux intermédiaires :

   // Connexion à la base distante
 SQL LOGIN("IP:192.168.18.15:19812";"user";"password";*)
 If(OK=1)
        //A partir de ce point les requêtes sont adressées à la base distante
    C_TEXT($LastName_value// variable 4D utilisée dans la chaine de recherche
    ARRAY TEXT($a_LastName;0) // Stockage temporaire des valeurs distantes de LastName
    ARRAY TEXT($a_FirstName;0) // Stockage temporaire des valeurs distantes de FirstName
    C_BOOLEAN($UseSQL//Choix du moyen de stocker en local
        // les données de la base distante (démonstration uniquement)
 
     $LastName_value:="Smith"  // Initialisation de la variable 4D
 
        // Associer la variable 4D $LastName_value avec le premier "?" dans la requête SQL
    SQL SET PARAMETER($LastName_value;SQL param in)
 
        // Récupérer de la table PERSONS distante les valeurs des champs LastName et FirstName
        // où "LastName = Smith" et les stocker dans les tableaux $a_LastName et $a_FirstName
    SQL EXECUTE("SELECT LastName, FirstName FROM PERSONS WHERE LastName = ?";$a_LastName;$a_FirstName)
    If(Not(SQL End selection))  // si au moins un enregistrement est trouvé
 
       SQL LOAD RECORD(SQL all records)  // Charger tous les enregistrements
 
       $UseSQL:=True  // Pour choisir la manière d'intégrer les données (démonstration uniquement)
 
       If($UseSQL)  // Utilisation de requêtes SQL
          SQL LOGOUT  // Déconnexion de la base distante
          SQL LOGIN(SQL_INTERNAL;"user";"password")  // Connexion à la base locale
              //A partir de ce point les requêtes sont adressées à la base locale
              // Sauvegarde des tableaux $a_LastName et $a_FirstName dans la table locale PERSONS
          SQL EXECUTE("INSERT INTO PERSONS(LastName, FirstName) VALUES (:$a_LastName, :$a_FirstName);")
 
       Else   // Utilisation de commandes 4D
          For($i;1;Size of array($a_LastName))
             CREATE RECORD([PERSONS])
             [PERSONS]LastName:=$a_LastName{$i}
             [PERSONS]FirstName:=$a_FirstName{$i}
             SAVE RECORD([PERSONS])
          End for
       End if
    End if
    SQL LOGOUT  // Fermeture de la connexion
 End if

Si la commande a été correctement exécutée, la variable système OK retourne 1, sinon elle retourne 0.



Voir aussi  

SQL LOAD RECORD

 
PROPRIÉTÉS 

Produit : 4D
Thème : SQL
Numéro : 820

Cette commande modifie la variable système OK

 
HISTORIQUE 

Créé : 4D 2004

 
UTILISATION DE L'ARTICLE

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