DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Gestion des bases de données / HFSQL / Fonctions HFSQL
  • Quand utiliser la fonction HPrépareRequêteSQL ?
  • Comment utiliser la fonction HPrépareRequêteSQL ?
  • Condition sur une clé composée dans une requête SQL
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
HPrépareRequêteSQL (Fonction)
En anglais : HPrepareSQLQuery
Connecteurs Natifs (Accès Natifs)Disponible uniquement avec ce type de connexion
Initialise une requête écrite en langage SQL et déclare cette requête au serveur de base de données pour optimiser les prochaines exécutions de cette requête. Cette requête n'est pas exécutée. La requête pourra ensuite être exécutée grâce à la fonction HExécuteRequêteSQL. Cette fonction peut aussi bien être utilisée avec requêtes avec ou sans bind.
Pour libérer les ressources de cette requête, utilisez la fonction HAnnuleDéclaration.
Cette fonction est conseillée lors de l'exécution successive d'une même requête en modifiant uniquement quelques paramètres de cette requête à chaque exécution.
Cette fonction est optionnelle et ne peut être utilisée que sur des bases de données Client/Serveur (actuellement disponible sur Oracle, Oracle Lite, Sybase et SQL Server). En SQL Server, le Connecteur Natif via OLE DB ou via ODBC peut être nécessaire.
Pour les autres bases accédées par un Connecteur Natif, OLEDB ou ODBC, la fonction HPrépareRequêteSQL exécute la requête.
Sur les bases de données HFSQL (HFSQL Classic ou Client/Serveur) ou sur les bases xBase, cette fonction ne peut pas être utilisée.
Exemple
// Exécution d'une même requête sous Oracle
// Déclaration d'une source de données
// Cette source de données correspond Ã  la requête
Insert1 est une Source de Données
i est un entier
// Déclaration d'un des paramètres de la requête
// Le type de ce paramètre est un entier
Insert1.Age = 0
// Préparation de la requête pour de multiples exécutions
HPrépareRequêteSQL(Insert1, ConnexionBase, ...
hRequêteSansCorrection, "INSERT INTO PERSONE VALUES (:nom, :prenom, :age )")
// Boucle d'exécution de la requête
// Seuls quelques paramètres sont modifiés
POUR i = 1 Ã€ 10
Insert1.Nom = "Nom" + i
Insert1.Prénom = "Prenom" + i
Insert1.Age = i
HExécuteRequêteSQL(Insert1)
FIN
Syntaxe
<Résultat> = HPrépareRequêteSQL(<Source de données> , <Connexion> , <Mode> , <Texte de la requête en SQL>)
<Résultat> : Booléen
  • Vrai si aucun problème n'a été rencontré,
  • Faux dans le cas contraire. La fonction HErreurInfo permet d'obtenir plus d'informations sur le problème rencontré.
<Source de données> : Source de données
Nom de la variable de type Source de données correspondant à la requête à initialiser.
<Connexion> : Chaîne de caractères ou variable de type Connexion
Nom de la connexion utilisée pour exécuter la requête. Cette connexion correspond : Si ce paramètre ne correspond pas à une connexion existante, <Résultat> est à Faux.
<Mode> : Constante de type Entier
hRequêteSansCorrectionConnecteur Natif uniquement : Aucune vérification n'est effectuée par le moteur HFSQL sur le texte de la requête.
<Texte de la requête en SQL> : Chaîne de caractères
Texte de la requête SQL à exécuter.
Remarques

Quand utiliser la fonction HPrépareRequêteSQL ?

Dans certains cas, il peut être intéressant d'exécuter plusieurs fois une même requête en modifiant uniquement une (ou plusieurs) variable(s). Un cas courant consiste à exécuter plusieurs fois une requête d'insertion pour ajouter plusieurs enregistrements dans un fichiers.
Plusieurs solutions peuvent être mises en place :
  1. Exécuter directement la requête (avec la fonction HExécuteRequêteSQL) autant de fois que nécessaire en modifiant à chaque fois la ou les variable(s) voulue(s).
  2. Préparer la requête à exécuter (fonction HPrépareRequêteSQL) ainsi que les différentes variables à modifier puis exécuter la requête autant de fois que nécessaire avec la fonction HExécuteRequêteSQL. Cette seconde solution est beaucoup plus rapide et optimise le temps de parcours du résultat de la requête (cas d'une requête de sélection).
Connecteurs Natifs (Accès Natifs) SQL Server : Limite : La fonction HPrépareRequêteSQL ne peut pas être utilisée pour préparer une procédure stockée qui renvoie des enregistrements. Il est nécessaire d'utiliser la fonction HExécuteRequêteSQL.

Comment utiliser la fonction HPrépareRequêteSQL ?

Pour préparer et exécuter une requête plusieurs fois, il faut :
  1. Déclarer une source de données. Cette source de données contiendra le résultat de la requête SQL.
  2. Déclarer les différentes variables de la requête.
    Par défaut, les variables sont de type chaîne. Il est possible de préciser leur type en utilisant la propriété Type sur la variable.
  3. Préparer la requête avec la fonction HPrépareRequêteSQL.
  4. Indiquer la valeur du ou des différents paramètres à prendre en compte et exécuter la requête à l'aide de la fonction HExécuteRequêteSQL. Seul le nom de la source de données correspondant à la requête doit être spécifié.
Cette dernière étape doit être répétée autant de fois que nécessaire.
Remarques :
  • La fonction HPrépareRequêteSQL doit être utilisée avec :
    • le nom de la connexion,
    • la constante hRequêteSansCorrection.
  • Les variables déclarées doivent être identiques à celles utilisées. Dans le cas contraire, une erreur WLangage est affichée.
  • Dans l'appel à la procédure stockée, il est nécessaire d'utiliser la syntaxe spécifique à la base de données utilisée, y compris pour la syntaxe des paramètres.
    Ainsi, pour Oracle, les paramètres sont spécifiés avec la syntaxe :NomParam. Attention : le caractère ":" doit être suivi d'au moins une lettre (la syntaxe :1 est interdite).
    Pour SQL Server, les paramètres sont spécifiés avec la notation @NomParam.
    Il est possible d'utiliser plusieurs fois le même paramètre. Dans ce cas, la variable correspondante sera ré-utilisée.

Condition sur une clé composée dans une requête SQL

Pour définir une condition sur une clé composée dans une requête SQL, il faut préciser les conditions de chacune des composantes de la clé.
Il ne faut pas tenter d'affecter directement la clé composée avec une valeur (en effet, les clés composées sont enregistrées sous forme de valeur binaire).
Exemple : La clé composée des rubriques NOM et PRENOM (rubrique NOMPRENOM) :
SELECT UnFichier.UneRubrique, UnFichier.UneRubrique1
FROM UnFichier
WHERE UnFichier.Nom = "Dupont" AND UnFichier.Prenom = "Florence"
Composante : wd300hf.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 03/07/2023

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