DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Gestion des bases de données / HFSQL / Fonctions HFSQL
  • 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
  • Fonction HExécuteRequête et accès par JDBC
  • 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)
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
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.
Java Il n'est pas possible d'exécuter des requêtes dont le code SQL contient des fonctions WLangage.
// Initialisation de la requête "REQ_Client_84"
HExécuteRequête(REQ_Client_84)
// Requête sur fichier Oracle : Clients utilise la connexion "MaConnexion"
// REQ_Marequête = "Select * from clients where IDClient = ?"
HExécuteRequête(REQ_MaRequête, hRequêteDéfaut, 5)
// Exécute et affiche les données d'une requête non contenue dans le projet
// "REQ_Liste_Produits.WDR" est une requête créée avec "Etats & Requêtes"
// Il faut déclarer une source de données du même nom logique que la requête. 
sFichierRequete est une chaîne 
sFichierRequete = fRepEtatsEtRequêtes() + ["\"] + "REQ_Liste_Produits.WDR"
REQ_Liste_Produits est une Source de Données

// Exécution de la requête pour une famille de produits :
// CODE_FAMILLE est un paramètre de la requête. 
HExécuteRequête(sFichierRequete, hRequêteDéfaut, CODE_FAMILLE)

// Parcours de la requête
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.
    Java 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.
Java Accès par JDBC : Cette constante n'est pas disponible.
hAvecTransactionLa 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.
Java Cette constante n'est pas disponible.
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.
Java Accès par JDBC : Cette constante n'est pas disponible.
hRequêteDéfaut
(valeur par défaut)
Initialisation de la requête sans interruption.
hRequêteInterruptibleL'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.
Universal Windows 10 App Cette constante n'est pas disponible.
Procédures stockées Cette constante est ignorée.
Java Accès par JDBC : Cette constante n'est pas disponible.
HFSQL Client/Serveur La touche Echap doit être utilisée sur le poste client.
hRequêteSansCorrection
JavaOLE DBConnecteurs Natifs (Accès Natifs) Le moteur HFSQL n'effectue aucune vérification de la requête. Cette option doit être utilisée si la requête comporte des ordres spécifiques à un type de connexion (Oracle, SQL Server, ...).
Attention : si cette constante est utilisée :
  • il est nécessaire de préciser le nom de la connexion (paramètre <Connexion>).
  • la fonction HFiltre ne peut pas être utilisée sur la requête manipulée.
  • il n'est pas possible d'annuler une condition en l'affectant à NULL.
  • il est conseillé de ne pas spécifier de rubrique de parcours dans les fonctions suivantes : HDernier, HLitDernier, HLitPremier, HPremier, HRechercheDernier, HRecherchePremier.
hRequêteSansCorrectionHF
HFSQL Classic Le moteur HFSQL n'effectue aucune vérification du format de fichier de données (complété par des espaces ou non).
A utiliser si la requête manipule à la fois des fichiers de données HFSQL au format complété par des espaces et des fichiers de données HFSQL au format non complété par des espaces.
hSansSablierLors 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.
hTemporisePour 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.
HFSQL Client/ServeurOLE DBConnecteurs Natifs (Accès Natifs) Cette constante est ignorée.
Java Accès par JDBC : Cette constante n'est pas disponible.
hVérifieDoublonActive 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.
HFSQL Client/Serveur
  • Si la constante hVérifieDoublon n'est pas spécifiée, la gestion des doublons est débranchée.
  • Si l'utilisateur n'a pas les droits pour brancher/débrancher la gestion des doublons (fonction HModifieDroitBaseDeDonnées) et si une gestion des doublons doit être réalisée, une erreur de droit est affichée.
Java Accès par JDBC : Cette constante n'est pas disponible.
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.
HFSQL Client/Serveur
  • Si la constante hVérifieIntégrité n'est pas spécifiée, la gestion de l'intégrité est débranchée.
  • Si l'utilisateur n'a pas les droits pour brancher/débrancher la gestion de l'intégrité (fonction HModifieDroitBaseDeDonnées) et si une gestion de l'intégrité doit être réalisée, une erreur de droit est affichée.
Java Accès par JDBC : Cette constante n'est pas disponible.

Java Android et Java (accès par JDBC) : Ce paramètre peut correspondre uniquement aux constantes hRequêteDéfaut ou hRequêteSansCorrection. Si une autre constante est utilisée, elle sera ignorée.
<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.
Procédures stockées Cette syntaxe n'est pas disponible dans une procédure stockée

Exécuter une requête via une connexion Masquer les détails

<Résultat> = HExécuteRequête(<Nom de la requête> [, <Connexion> [, <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.
    Java 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.
<Connexion> : Chaîne de caractères optionnelle
Nom d'une connexion, définie sous l'éditeur d'analyses ou dynamiquement avec la fonction HDécritConnexion. La requête sera exécutée via cette connexion.
OLE DBConnecteurs Natifs (Accès Natifs) Si ce paramètre n'est pas précisé et si la requête concerne des fichiers de données accédés par OLE DB ou par un accès natif, la requête est exécutée via la connexion utilisée par le premier fichier de données rencontré dans la requête. Si la connexion utilisée par un fichier de données est modifiée avant l'utilisation de la fonction HExécuteRequête, la nouvelle connexion sera utilisée.
<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.
Java Accès par JDBC : Cette constante n'est pas disponible.
hAvecTransactionLa 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.
Java Cette constante n'est pas disponible.
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.
Java Accès par JDBC : Cette constante n'est pas disponible.
hRequêteDéfaut
(valeur par défaut)
Initialisation de la requête sans interruption.
hRequêteInterruptibleL'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.
Universal Windows 10 App Cette constante n'est pas disponible.
Procédures stockées Cette constante est ignorée.
Java Accès par JDBC : Cette constante n'est pas disponible.
HFSQL Client/Serveur La touche Echap doit être utilisée sur le poste client.
hRequêteSansCorrection
JavaOLE DBConnecteurs Natifs (Accès Natifs) Le moteur HFSQL n'effectue aucune vérification de la requête. Cette option doit être utilisée si la requête comporte des ordres spécifiques à un type de connexion (Oracle, SQL Server, ...).
Attention : si cette constante est utilisée :
  • il est nécessaire de préciser le nom de la connexion (paramètre <Connexion>).
  • la fonction HFiltre ne peut pas être utilisée sur la requête manipulée.
  • il n'est pas possible d'annuler une condition en l'affectant à NULL.
  • il est conseillé de ne pas spécifier de rubrique de parcours dans les fonctions suivantes : HDernier, HLitDernier, HLitPremier, HPremier, HRechercheDernier, HRecherchePremier.
hRequêteSansCorrectionHF
HFSQL Classic Le moteur HFSQL n'effectue aucune vérification du format de fichier de données (complété par des espaces ou non).
A utiliser si la requête manipule à la fois des fichiers de données HFSQL au format complété par des espaces et des fichiers de données HFSQL au format non complété par des espaces.
hSansSablierLors 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.
hTemporisePour 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.
HFSQL Client/ServeurOLE DBConnecteurs Natifs (Accès Natifs) Cette constante est ignorée.
Java Accès par JDBC : Cette constante n'est pas disponible.
hVérifieDoublonActive 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.
HFSQL Client/Serveur
  • Si la constante hVérifieDoublon n'est pas spécifiée, la gestion des doublons est débranchée.
  • Si l'utilisateur n'a pas les droits pour brancher/débrancher la gestion des doublons (fonction HModifieDroitBaseDeDonnées) et si une gestion des doublons doit être réalisée, une erreur de droit est affichée.
Java Accès par JDBC : Cette constante n'est pas disponible.
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.
HFSQL Client/Serveur
  • Si la constante hVérifieIntégrité n'est pas spécifiée, la gestion de l'intégrité est débranchée.
  • Si l'utilisateur n'a pas les droits pour brancher/débrancher la gestion de l'intégrité (fonction HModifieDroitBaseDeDonnées) et si une gestion de l'intégrité doit être réalisée, une erreur de droit est affichée.
Java Accès par JDBC : Cette constante n'est pas disponible.

Java Android et Java (accès par JDBC) : Ce paramètre peut correspondre uniquement aux constantes hRequêteDéfaut ou hRequêteSansCorrection. Si une autre constante est utilisée, elle sera ignorée.
<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).
WINDEVUniversal Windows 10 AppJavaCode Utilisateur (MCU)HFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBConnecteurs Natifs (Accès Natifs)

Ajout d'enregistrements et utilisation de la constante hModifieFichier

HFSQL Classic Lors de l'ajout d'enregistrements dans un fichier de données via une requête, la requête prend en compte les enregistrements ajoutés dans le fichier de données quelle que soit la condition définie dans la requête. Le nombre d'enregistrement de cette requête est systématiquement modifié.
Connecteurs Natifs (Accès Natifs) Lors de l'ajout d'enregistrements dans un fichier de données via une requête, la requête prend en compte la condition définie dans la requête. Le nombre d'enregistrements de cette requête est modifié uniquement si les enregistrements ajoutés dans le fichier de données correspondent à cette condition.
WINDEVCode Utilisateur (MCU)OLE DBConnecteurs Natifs (Accès Natifs)

Pourquoi utiliser la constante hRequêteSansCorrection

Par défaut, WINDEV et WEBDEV interprètent les requêtes SQL sur OLE DB et sur ODBC via le provider OLE DB. Pour que la requête ne soit pas interprétée, utilisez la constante hRequêteSansCorrection.
La constante hRequêteSansCorrection peut par exemple être utilisée si vous saisissez directement le code SQL de votre requête sous l'éditeur de requêtes.
hRequêteSansCorrection n'est pas spécifiéhRequêteSansCorrection est spécifié
Détermination automatique de la connexion associée aux fichiers de données présents dans la requête.La connexion à utiliser doit être précisée dans la fonction HExécuteRequêteSQL.
Remplacement de tous les signes propriétaires PC SOFT (exemple : ']=' commence par) par leur équivalent en SQL standard.Aucun remplacement n'est effectué. Il est nécessaire d'utiliser les signes SQL standard.
Formatage des dates et des heures selon le format utilisé par la base de données.
Par exemple, sous WINDEV et WEBDEV, les dates sont au format 'AAAAMMJJ' alors que sous Access, les dates sont au format #AAAAJJMM# ou #AAAAMMJJ# selon la langue du système.
Aucun formatage n'est effectué. Il est nécessaire d'utiliser le format reconnu par la base de données.
Formatage des flottants (le séparateur de décimal peut être '.' ou ',')Aucun formatage des flottants n'est réalisé.
Selon la base de données utilisée, remplacement des noms d'alias par les noms complets des rubriques dans les clauses Where, Order by et Group by
Par exemple, le moteur JET (Access, DBase, ...) n'accepte pas de noms d'alias dans la clause Where d'une requête
Aucun remplacement n'est effectué. Il est nécessaire d'utiliser directement dans le code de la requête les noms complets des rubriques dans les clauses Where, Order by et Group by.

Passage de paramètres à la requête

Plusieurs méthodes peuvent être utilisées pour passer des paramètres à une requête :
  1. Passage des paramètres avec la notation <Nom de la requête>.<Nom du paramètre> = <Valeur> (conseillée)
  2. Passage des paramètres directement dans la fonction HExécuteRequête (conservée par compatibilité, compatible PHP).
Pour plus de détails sur les différentes façons de passer des paramètres à une requête, leurs avantages et leurs inconvénients, consultez Méthodes à utiliser pour passer des paramètres à une requête.
Détaillons ces deux méthodes :
  1. 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.
  2. 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")
    ou
    HExécuteRequête(NomRequête, hRequêteDéfaut, "34000 "+ RC + "34200" + RC + "34400")
    ou
    HExé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ête
      SELECT * 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ête
      SELECT * FROM CLIENT WHERE NOM = 'Dupond'
    • Seul le prénom est donné :
      sNom est un Variant = Null 
      // Utilisation du variant obligatoire pour variable de type Null (non renseignée)
      
      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ête
      SELECT * FROM CLIENT WHERE PRENOM = 'Jean'
Java

Fonction HExécuteRequête et accès par JDBC

Si le nom physique d'un fichier de données manipulé dans la requête est différent de son nom logique, dans le code SQL, le nom des rubriques doit être préfixé par le nom physique du fichier de données et non par le nom logique. Il est également possible de ne pas préfixer le nom des rubriques.

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.
WINDEVCode Utilisateur (MCU)HFSQL ClassicHFSQL Client/ServeurHyper File 5.5

Optimisation des requêtes sur des fichiers de données HFSQL

  • Pour optimiser le temps d'exécution de la requête, utilisez la fonction HOptimise sur les différents fichiers de données intervenant dans la requête ou la fonction HOptimiseRequête.
  • Pour optimiser le temps de traitement des requêtes, utilisez la fonction HStatCalcule ou la fonction HRéindexe sur tous les fichiers de données intervenant dans la requête.
WINDEVCode Utilisateur (MCU)HFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBConnecteurs Natifs (Accès Natifs)

Exécution d'une requête et champ Table basé sur cette requête

Pour plus de détails, consultez Champ Table fichier et gestion des requêtes.
WINDEVCode Utilisateur (MCU)HFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBConnecteurs Natifs (Accès Natifs)

Exécution d'une requête et état basé sur cette requête

Lors de l'impression d'un état basé sur une requête, si la requête a déjà été exécutée, elle n'est pas ré-exécutée. Pour forcer la ré-exécution de la requête (ajout d'enregistrements par exemple), il suffit d'utiliser les fonctions HExécuteRequête ou iInitRequêteEtat.
WINDEVUniversal Windows 10 AppCode Utilisateur (MCU)HFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBConnecteurs Natifs (Accès Natifs)

Requêtes SQL (fonction HExécuteRequête ou exécution de requêtes SQL créées par l'éditeur de requêtes)

  • Lors de l'utilisation des instructions SQL DELETE, INSERT ou UPDATE dans des requêtes SQL, par défaut, aucun contrôle d'intégrité et aucun contrôle de doublons ne sont réalisés sur une base de données HFSQL.
    • Pour effectuer un contrôle automatique de l'intégrité, il suffit de préciser la constante hVérifieIntégrité. Cette constante permet d'activer 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. En effet, 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.
      HFSQL Client/Serveur Si la constante hVérifieIntégrité n'est pas spécifiée, la gestion de l'intégrité est débranchée. Or si l'utilisateur n'a pas les droits pour débrancher la gestion de l'intégrité (fonction HModifieDroitBaseDeDonnées) et si une gestion de l'intégrité doit être réalisée, une erreur de droit est affichée.
    • Pour effectuer un contrôle automatique des doublons, il suffit de préciser la constante hVérifieDoublons. Cette constante permet d'activer 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. En effet, 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.
      Note : Si une erreur de doublons est détectée lors de l'exécution d'une requête de type UPDATE, la fonction HExécuteRequête renvoie Faux et le traitement continue. L'erreur correspondante peut être connue grâce à la fonction HErreurInfo.
      Remarque : L'assistance automatique par défaut n'est pas appelée pour les erreurs de doublons. Une simple erreur de doublons est générée. Si une assistance a été redéfinie à l'aide de la fonction HSurErreur, alors cette assistance personnalisée est appelée.
      HFSQL Client/Serveur Si la constante hVérifieDoublons n'est pas spécifiée, la gestion des doublons est débranchée. Or si l'utilisateur n'a pas les droits pour débrancher la gestion des doublons (fonction HModifieDroitBaseDeDonnées) et si une gestion de doublons doit être réalisée, une erreur de droit est affichée.
  • Les requêtes de type UPDATE, DELETE ou INSERT n'existent que pendant leur exécution. Il n'est pas possible d'utiliser une fonction WLangage sur ce type de requête après son exécution.
  • Les requêtes de type DELETE ne gèrent pas les suppressions en cascade.
  • Lors de l'exécution d'une requête de type INSERT/UPDATE/DELETE sur des fichiers de données HFSQL, il est possible de connaître le nombre d'enregistrements ayant été ajoutés, modifiés ou supprimés grâce à la variable H.NbEnregRequêteModification.
Classification Métier / UI : Code métier
Composante : wd300hf.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 03/06/2024

Signaler une erreur ou faire une suggestion | Aide en ligne locale