|
|
|
|
|
- Texte de la requête SQL
- Exécuter une requête SQL paramétrée
- Injection SQL : Comment s'en prémunir ?
- Jointures
- Pourquoi utiliser la constante hRequêteSansCorrection ?
- Condition sur une clé composée dans une requête SQL
HExécuteRequêteSQLAsynchrone (Fonction) En anglais : HExecuteSQLQueryAsynchronous Exécute une requête SQL de manière asynchrone. Cette requête SQL peut correspondre : - au code SQL saisi directement dans la fonction HExécuteRequêteSQLAsynchrone.
- à une variable de type Requête SQL.
Conditions d'utilisation : - Ce mode est prévu pour des requêtes ayant un temps d'exécution de plusieurs secondes. Pour une requête immédiate ou quasi immédiate, ce mécanisme ralentit "trop" la requête.
- La requête doit être de type "SELECT" : elle doit renvoyer des enregistrements.
- L'exécution d'une requête en mode asynchrone peut être effectuée uniquement à partir du contexte principal. Dans les autres cas, il est nécessaire d'utiliser des threads.
- Cette fonction ne permet pas de passer les paramètres à une requête paramétrée. Les paramètres doivent être passés avant l'exécution de la requête.
REQ_WDRSQL est une Source de Données HExécuteRequêteSQLAsynchrone(REQ_WDRSQL, MaConnexionCS2, hRequêteDéfaut, "SELECT * FROM CLIENT" MaProcedurePourChaqueEnregistrement, MaProcedureFinale)   PROCÉDURE INTERNE MaProcedurePourChaqueEnregistrement(enreg est un Enregistrement) Trace("Procédure de traitement de chaque Enregistrement" + enreg.NomRubrique) FIN  PROCÉDURE INTERNE MaProcedureFinale(MonRes est un entier) Trace("Procédure de traitement du résultat final") SELON MonRes CAS heraOK : Trace("La requête et le traitement des enregistrements se sont bien exécutés.") CAS heraAnnulée : Trace("Un traitement a renvoyé Faux. La requête et les procédures ont été annulées.") AUTRE CAS : Trace("Une procédure ou l'exécution de la requête a rencontré une erreur.") FIN FIN Syntaxe
Exécuter une requête SQL (sans connexion) Masquer les détails
<Résultat> = HExécuteRequêteSQLAsynchrone(<Requête> [, <Mode>] , <Texte de la requête en SQL> , <Procédure WLangage pour chaque enregistrement> [, <Procédure WLangage de fin>])
<Résultat> : booléen - Vrai si l'initialisation de la requête a été effectuée,
- Faux dans le cas contraire. La fonction HErreur permet d'obtenir plus d'informations sur le problème rencontré.
<Requête> : Chaîne de caractères ou Source de données - Nom de la requête qui va être exécutée. Ce nom permet de manipuler par programmation le résultat de <Texte de la requête en SQL>. Si une requête de même nom est déjà déclarée, elle est remplacée par la nouvelle requête.
- Nom de la variable de type Requête SQL contenant le code SQL de la requête. Dans ce cas, le paramètre <Texte de la requête en SQL> ne doit pas être précisé.
<Mode> : Constante optionnelle de type Entier Option pour l'initialisation de la requête : | | hRequêteDéfaut (valeur par défaut) | Initialisation de la requête. | hRequêteSansCorrection | | hRequêteSansCorrectionHF | | hSansBind | |
<Texte de la requête en SQL> : Chaîne de caractères Texte de la requête SQL à exécuter. Ce texte peut correspondre à une chaîne de caractères au format ANSI ou au format Unicode.
Ce paramètre n'est pas disponible si <Nom de la requête> correspond à une variable de type Requête SQL. <Procédure WLangage pour chaque enregistrement> : Nom de procédure Procédure WLangage (également nommée "callback") exécutée pour chaque enregistrement correspondant à la requête trouvée. Cette procédure est de la forme :
PROCEDURE <Nom de la procédure>(UnEnreg est un Enregistrement) où <UnEnreg> est une variable de type Enregistrement correspondant à l'enregistrement en cours (pour la requête exécutée). Par défaut, le procédure renvoie Vrai et passe à l'enregistrement suivant. Si cette procédure renvoie Faux, la requête est annulée et la procédure <Procédure WLangage de fin> est exécutée. <Procédure WLangage de fin> : Nom de procédure optionnel Procédure WLangage (également nommée "callback") exécutée à la fin de l'exécution de la requête. Cette procédure est de la forme :
PROCEDURE <Nom de la procédure>(nRésultat est un entier) où <nRésultat> est une constante de type Entier qui peut correspondre aux valeurs suivantes : | | heraAnnulée | La procédure exécutée pour chaque enregistrement a renvoyé Faux. La requête et les différentes procédures ont été annulées. | heraErreur | La requête et/ou la procédure appelée pour chaque enregistrement ont rencontré une erreur. Il est possible de connaître l'erreur avec la fonction HErreurInfo. | heraOK | La requête et la procédure exécutée pour chaque enregistrement se sont correctement déroulées. |
Exécuter une requête SQL via une connexion Masquer les détails
<Résultat> = HExécuteRequêteSQLAsynchrone(<Requête> [, <Connexion> [, <Mode>]] , <Texte de la requête en SQL> , <Procédure WLangage pour chaque enregistrement> [, <Procédure WLangage de fin>])
<Résultat> : Booléen - Vrai si l'initialisation de la requête a été effectuée,
- Faux dans le cas contraire. La fonction HErreur permet d'obtenir plus d'informations sur le problème rencontré.
<Requête> : Chaîne de caractères ou source de données - Nom de la requête qui va être exécutée. Ce nom permet de manipuler par programmation le résultat de <Texte de la requête en SQL>. Si une requête de même nom est déjà déclarée, elle est remplacée par la nouvelle requête.
- Nom de la variable de type Requête SQL contenant le code SQL de la requête. Dans ce cas, le paramètre <Texte de la requête en SQL> ne doit pas être précisé.
<Connexion> : Chaîne de caractères optionnelle ou variable de type Connexion 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 optionnelle de type Entier Option pour l'initialisation de la requête : | | hRequêteDéfaut (valeur par défaut) | Initialisation de la requête. | hRequêteSansCorrection | | hRequêteSansCorrectionHF | | hSansBind | |
<Texte de la requête en SQL> : Chaîne de caractères Texte de la requête SQL à exécuter. Ce texte peut correspondre à une chaîne de caractères au format ANSI ou au format Unicode.
Ce paramètre n'est pas disponible si <Nom de la requête> correspond à une variable de type Requête SQL. <Procédure WLangage pour chaque enregistrement> : Nom de procédure Procédure WLangage (également nommée "callback") exécutée pour chaque enregistrement correspondant à la requête trouvée. Cette procédure est de la forme :
PROCEDURE <Nom de la procédure>(UnEnreg est un Enregistrement) où <UnEnreg> est une variable de type Enregistrement correspondant à l'enregistrement en cours (pour la requête exécutée). Par défaut, le procédure renvoie Vrai et passe à l'enregistrement suivant. Si cette procédure renvoie Faux, la requête est annulée et la procédure <Procédure WLangage de fin> est exécutée. <Procédure WLangage de fin> : Nom de procédure optionnel Procédure WLangage (également nommée "callback") exécutée à la fin de l'exécution de la requête. Cette procédure est de la forme :
PROCEDURE <Nom de la procédure>(nRésultat est un entier) où <nRésultat> est une constante de type Entier qui peut correspondre aux valeurs suivantes : | | heraAnnulée | La procédure exécutée pour chaque enregistrement a renvoyé Faux. La requête et les différentes procédures ont été annulées. | heraErreur | La requête et/ou la procédure appelée pour chaque enregistrement ont rencontré une erreur. Il est possible de connaître l'erreur avec la fonction HErreurInfo. | heraOK | La requête et la procédure exécutée pour chaque enregistrement se sont correctement déroulées. |
Remarques Texte de la requête SQL Si un nom de fichier de données ou un nom de rubrique contient des espaces, il est nécessaire d'entourer ces noms par des crochets dans le texte de la requête. Par exemple : SELECT [Mon Fichier1].MaRubrique, [Mon Fichier1].[Ma rubrique1], MonFichier2.[Ma clé1]
FROM [Mon Fichier1], MonFichier2
WHERE [Mon Fichier1].[Ma clé1] = MonFichier2.[Ma clé1] Exécuter une requête SQL paramétrée Une requête SQL peut contenir des paramètres. Pour exécuter ce type de requête SQL avec la fonction HExécuteRequêteSQLAsynchrone, il faut : - Dans le texte de la requête SQL, définir les différents paramètres en utilisant la notation {Nom du paramètre}. Par exemple :
"SELECT * FROM client WHERE nom={p_nom}" - Définir une variable de type Source de données. Le nom de cette variable doit correspondre au paramètre <Nom de la requête> de la fonction HExécuteRequêteSQLAsynchrone.
Exemple :
MaRequête est une Source de Données
- Spécifier la valeur des paramètres, via la syntaxe suivante :
<Variable Source de données>.<Nom Paramètre1> = xxx <Variable Source de données>.<Nom Paramètre2> = xxx <Variable Source de données>.<Nom Paramètre3> = xxx Exemple :
MaRequête.p_nom = "Dupont"
- Exécuter la requête SQL avec la fonction HExécuteRequêteSQLAsynchrone. Exemple :
HExécuteRequêteSQLAsynchrone(MaRequête, "SELECT * FROM client WHERE nom={p_nom}", hRequêteDéfaut, maProcEnreg)
Remarque : A chaque exécution de la requête paramétrée, la structure des paramètres de la requête est ré-initialisée. Injection SQL : Comment s'en prémunir ? L'injection SQL est une technique de piratage consistant à injecter du code SQL dans les paramètres des requêtes, forçant ainsi l'exécution de code SQL non désiré. Pour éviter l'injection SQL lors de l'exécution de requêtes via la fonction HExécuteRequêteSQLAsynchrone, il est nécessaire d'utiliser des requêtes paramétrées et de ne pas concaténer des chaînes pour construire la requête. L'utilisation de paramètres permet de ne pas interpréter le contenu comme étant du code SQL. Cette technique rend donc impossible l'injection de code SQL et élimine de nombreux risques de piratage. 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 MonFichier.MaRubrique, MonFichier.MaRubrique1
FROM MonFichier
WHERE NomFichier.Nom = "Dupont" AND NomFichier.Prénom = "Florence" Classification Métier / UI : Code métier
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|