- Lecture des données lors de l'initialisation de la requête
- Ajout d'enregistrements et utilisation de la constante hModifieFichier
- Pourquoi utiliser la constante hRequêteSansCorrection
- Passage de paramètres à la requête
- Libération des ressources de la requête
- Optimisation des requêtes sur des fichiers de données HFSQL
- Exécution d'une requête et champ Table basé sur cette requête
- Exécution d'une requête et état basé sur cette requête
- Requêtes SQL (fonction HExécuteRequête ou exécution de requêtes SQL créées par l'éditeur de requêtes)
HExécuteRequête (Fonction) En anglais : HExecuteQuery
Non disponible avec ce type de connexion
Déclare une requête au moteur HFSQL et exécute cette requête. Cette requête peut correspondre à : - une requête créée sous l'éditeur de requêtes.
- une variable de type Requête SQL.
Le résultat de la requête pourra ensuite être parcouru. Si une requête de même nom existe déjà , cette requête est remplacée. Le résultat est recalculé. Attention : Pour se positionner sur le premier enregistrement du résultat de la requête, utilisez par exemple la fonction HLitPremier. Pour libérer les ressources d'une requête créée sous l'éditeur de requêtes, utilisez : Remarque : Une requête ne pourra pas être initialisée si : - le nom de la requête est déjà utilisé dans l'analyse en cours (nom de fichier de données ou nom défini par une des fonctions suivantes : HDéclare, HDéclareExterne, HDécritFichier).
- une erreur de syntaxe est trouvée dans la requête.
HExécuteRequête(REQ_Client_84)
HExécuteRequête(REQ_MaRequête, hRequêteDéfaut, 5)
sFichierRequete est une chaîne
sFichierRequete = fRepEtatsEtRequêtes() + ["\"] + "REQ_Liste_Produits.WDR"
REQ_Liste_Produits est une Source de Données
HExécuteRequête(sFichierRequete, hRequêteDéfaut, CODE_FAMILLE)
POUR TOUT REQ_Liste_Produits
TableAjouteLigne(TABLE_PRODUIT, sFichierRequete.NOM_PRODUIT, ...
sFichierRequete.DESIGNATION, sFichierRequete.PrixHT)
FIN
Syntaxe
Exécuter une requête (sans connexion) Masquer les détails
<Résultat> = HExécuteRequête(<Nom de la requête> [, <Mode> [, <Paramètre 1> [... [, <Paramètre N>]]]])
<Résultat> : booléen - Vrai si l'initialisation de la requête a été effectuée,
- Faux dans le cas contraire. La fonction HErreurInfo permet d'obtenir plus d'informations sur le problème rencontré.
<Nom de la requête> : Chaîne de caractères Nom de la requête à exécuter : - Nom et chemin complet de la requête (fichier ".WDR") à initialiser.
Non disponible. - Nom logique de la requête à initialiser.
Si une requête de même nom est déjà déclarée, elle est remplacée par la nouvelle requête. - Nom d'une variable de type Requête SQL.
<Mode> : Constante optionnelle de type Entier Option pour l'initialisation de la requête : | | hAvecFiltre (option combinable avec les autres constantes) | Si ce paramètre est spécifié :- le résultat de la requête correspond à une sélection d'enregistrements de type filtre si le moteur HFSQL le permet. Sinon, le résultat de la requête est une vue HFSQL
- les opérations suivantes ne sont pas possibles : recherche sur le résultat de la requête, requête sur requête, vue sur requête, requête sur vue.
- les rubriques de parcours spécifiées lors du parcours du résultat ne sont pas prises en compte.
- la loupe n'est pas disponible sur les tables liées à une requête.
- la fonction HNbEnr ne peut pas être utilisée sur les requêtes.
Attention : si cette option est précisée, la constante hModifieFichier est automatiquement utilisée. Si ce paramètre n'est pas spécifié (par défaut) :- le résultat de la requête correspond à une vue HFSQL
- il est possible de réaliser les opérations suivantes sur les requêtes : recherche sur le résultat de la requête, requête sur requête, vue sur requête, requête sur vue.
- les rubriques de parcours spécifiées lors du parcours du résultat sont prises en compte.
- la loupe est disponible sur les tables liées à une requête.
- la fonction HNbEnr peut être utilisée sur les requêtes.
| hAvecTransaction | La requête est exécutée dans une transaction. Une transaction est démarrée, les enregistrements sont bloqués en écriture pendant l'exécution de la requête, et débloqués à la fin de son exécution, que la requête échoue ou non. Si la requête ne peut pas se terminer normalement (blocage d'enregistrements, coupure de courant, ...), la transaction est annulée et les fichiers de données sont remis dans l'état avant l'exécution de la requête. Remarque : L'exécution de la requête pourra être fortement ralentie.
| hModifieFichier (option combinable avec les autres constantes) | Sur des fichiers de données HFSQL : Lors de la modification du résultat de la requête (fonctions HAjoute, HEcrit, HModifie, HRaye, HSupprime), ces modifications seront reportées dans les fichiers de données intervenant dans la requête. Si cette option n'est pas précisée, seul le résultat de la requête est modifié. Pour plus de détails sur la modification du résultat d'une requête, consultez Modifier le contenu d'une requête. Sur des fichiers de données non HFSQL, la constante hModifieFichier est inutile : les fichiers de données intervenant dans la requête sont automatiquement modifiés lors de la modification du résultat de la requête.
| hRequêteDéfaut (valeur par défaut) | Initialisation de la requête sans interruption. | hRequêteInterruptible | L'initialisation de la requête peut être interrompue avec la touche ECHAP. Remarque : Cette constante est utilisable uniquement avec une requête de sélection (SELECT). Les autres types de requête (INSERT, UPDATE, DELETE, etc.) ne sont pas interruptibles. | hRequêteSansCorrection | | hRequêteSansCorrectionHF | | hSansSablier | Lors de la lecture du résultat de la requête, cette lecture peut être bloquée et un sablier apparaît par défaut. Cette constante permet de ne pas afficher de sablier dans ce cas.
| hTemporise | Pour les requêtes UPDATE et DELETE s'appliquant sur beaucoup d'enregistrements et étant relativement longues, cette constante permet de laisser la main aux autres applications utilisant les fichiers de données. Dans ce cas :- la requête s'exécute un peu plus lentement,
- le serveur de fichiers n'est pas saturé,
- les autres utilisateurs des fichiers de données peuvent continuer à y accéder sans rencontrer de blocage.
| hVérifieDoublon | Active la gestion des doublons pendant l'exécution de la requête. Si une erreur de doublons est détectée, la requête n'est pas exécutée. Cette constante force la constante hAvecTransaction. Une transaction est démarrée, les enregistrements sont bloqués en écriture pendant l'exécution de la requête et débloqués à la fin de son exécution, que la requête échoue ou non. Si l'application est arrêtée pendant l'exécution de la requête (coupure de courant par exemple), la transaction sera annulée à la prochaine utilisation des fichiers de données de la requête. Remarque : L'exécution de la requête pourra être fortement ralentie.
| hVérifieIntégrité | Active la gestion de l'intégrité pendant l'exécution de la requête. Si une erreur d'intégrité est détectée, la requête n'est pas exécutée. Cette constante force la constante hAvecTransaction. Une transaction est démarrée, les enregistrements sont bloqués en écriture pendant l'exécution de la requête et débloqués à la fin de son exécution, que la requête échoue ou non. Si l'application est arrêtée pendant l'exécution de la requête (coupure de courant par exemple), la transaction sera annulée à la prochaine utilisation des fichiers de données de la requête. Remarque : L'exécution de la requête pourra être fortement ralentie.
|
<Paramètre 1> : Type du paramètre Valeurs des paramètres de la requête dans leur ordre d'initialisation (visible sous l'éditeur de requêtes). Chaque paramètre doit correspondre au type attendu. Les différents paramètres sont séparés par une virgule. Remarques :- Le passage de paramètres dans la fonction HExécuteRequête est conservé par compatibilité. Il est conseillé d'utiliser le passage de paramètres avec la notation <Nom de la requête>.<Nom du paramètre> = <Valeur>.
- Pour spécifier les paramètres de la requête, il est nécessaire de spécifier le paramètre <Mode>.
- Il est possible de spécifier ou non la valeur de chaque paramètre.
- Il est possible de spécifier une liste de valeurs ou une liste de paramètres.
Pour plus de détails, consultez le paragraphe Passages de paramètres.
Ce paramètre n'est pas disponible si <Nom de la requête> correspond à une variable de type Requête SQL. <Paramètre N> : Type du paramètre Valeurs des paramètres de la requête dans leur ordre d'initialisation (visible sous l'éditeur de requêtes). Chaque paramètre doit correspondre au type attendu. Les différents paramètres sont séparés par une virgule. Remarques :- Le passage de paramètres dans la fonction HExécuteRequête est conservé par compatibilité. Il est conseillé d'utiliser le passage de paramètres avec la notation <Nom de la requête>.<Nom du paramètre> = <Valeur>.
- Pour spécifier les paramètres de la requête, il est nécessaire de spécifier le paramètre <Mode>.
- Il est possible de spécifier ou non la valeur de chaque paramètre.
- Il est possible de spécifier une liste de valeurs ou une liste de paramètres.
Pour plus de détails, consultez le paragraphe Passages de paramètres.
Ce paramètre n'est pas disponible si <Nom de la requête> correspond à une variable de type Requête SQL. Remarques Lecture des données lors de l'initialisation de la requête Selon la requête (tris, groupes, etc.), les données peuvent ou non être lues au moment de l'initialisation de la requête. Remarque : La propriété ExécutionTerminée permet de savoir si le remplissage de la requête est terminé (et donc si les lectures peuvent être effectuées sans blocage). Passage de paramètres à la requête Plusieurs méthodes peuvent être utilisées pour passer des paramètres à une requête : - Passage des paramètres avec la notation <Nom de la requête>.<Nom du paramètre> = <Valeur> (conseillée)
- Passage des paramètres directement dans la fonction HExécuteRequête (conservée par compatibilité, compatible PHP).
Détaillons ces deux méthodes : - Passage des paramètres avec la notation <Nom de la requête>.<Nom du paramètre> = <Valeur> (conseillée)
Pour passer des paramètres à une requête paramétrée avant de l'exécuter, il est également possible d'utiliser la syntaxe suivante :
<Nom de la requête>.<Nom du paramètre 1> = xxx <Nom de la requête>.<Nom du paramètre 2> = xxx <Nom de la requête>.<Nom du paramètre 3> = xxx HExécuteRequête(<Nom de la requête>) SI ErreurDétectée = Vrai ALORS ... Remarques :- Cette syntaxe simplifie le passage des paramètres. En effet, si les paramètres sont passés directement dans la fonction HExécuteRequête, il est nécessaire de respecter l'ordre des paramètres.
- A chaque exécution de la requête paramétrée, la structure des paramètres de la requête est ré-initialisée.
- Passage des paramètres directement dans la fonction HExécuteRequête (conservée par compatibilité)
Dans ce cas, il est nécessaire de spécifier les valeurs des paramètres de la requête dans leur ordre d'initialisation (visible sous l'éditeur de requêtes). Chaque paramètre doit correspondre au type attendu. Les différents paramètres sont séparés par une virgule. Il est possible de spécifier ou non la valeur de chaque paramètre. Un paramètre peut être ignoré en utilisant la valeur Null. Dans ce cas, les conditions de sélection utilisant ce paramètre ne seront pas prises en compte.
Il est possible de spécifier une liste de valeurs ou une liste de paramètres. Si la condition de sélection pour un des paramètres de la requête est "est dans la liste" ou "n'est pas dans la liste", il faut spécifier une liste de valeurs ou de paramètres. Pour spécifier une liste de valeurs ou une liste de paramètres, séparez les différentes valeurs ou paramètres par un point-virgule (';'), un retour-chariot ('RC') ou une tabulation ('TAB'). Par exemple :
HExécuteRequête(NomRequête, hRequêteDéfaut, "34000;34200;34400")
ouHExécuteRequête(NomRequête, hRequêteDéfaut, "34000 "+ RC + "34200" + RC + "34400")
ouHExécuteRequête(NomRequête, hRequêteDéfaut, "34000" + TAB + "34200" + TAB + "34400")
Remarque : Si une des valeurs ou des paramètres contient un point-virgule, un retour-chariot ou une tabulation, il est nécessaire d'entourer cette valeur ou ce paramètre avec des quotes. Par exemple :
HExécuteRequête(NomRequête, hRequêteDéfaut, "'A;A';'A;B';'A;C'")
Remarque : Tous les paramètres de la requête ne doivent pas obligatoirement être précisés. Les conditions de la requête utilisant des paramètres non précisés seront ignorées. Exemple : Soit la requête "Clients_nom_prénom" dont le code SQL est le suivant :
SELECT * FROM CLIENT WHERE NOM = {Param1} AND PRENOM = {Param2} - Les 2 paramètres sont donnés :
HExécuteRequête(REQ_Clients_nom_prénom, hRequêteDéfaut, "Dupond", "Jean")
exécutera la requêteSELECT * FROM CLIENT WHERE NOM = 'Dupond' AND PRENOM = 'Jean' - Seul le nom est donné :
HExécuteRequête(REQ_Clients_nom_prénom, hRequêteDéfaut, "Dupond")
exécutera la requêteSELECT * FROM CLIENT WHERE NOM = 'Dupond' - Seul le prénom est donné :
sNom est un Variant = Null
HExécuteRequête(REQ_Clients_nom_prénom, hRequêteDéfaut, sNom, "Jean")
OU
HExécuteRequête(REQ_Clients_nom_prénom, hRequêteDéfaut, Null, "Jean")
exécutera la requêteSELECT * FROM CLIENT WHERE PRENOM = 'Jean'
Libération des ressources de la requête Pour libérer les ressources d'une requête, utilisez : Si cette opération n'est pas effectuée, la requête est toujours présente dans le contexte HFSQL en cours et elle est accessible depuis n'importe quel traitement. Remarques : - Les ressources de la requête ne sont pas libérées automatiquement à la fermeture de la fenêtre qui a exécuté la requête (utilisation de la fonction HExécuteRequête).
- Les variables de type Requête SQL sont automatiquement libérées en fin de portée de la variable. Pour plus de détails, consultez Requêtes SQL en WLangage.
Classification Métier / UI : Code métier
Documentation également disponible pour…
|
|
|