DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Gestion des bases de données / Fonctions SQL
  • Exécution de la requête
  • Récupération du résultat de la requête
  • Requête de type INSERT
  • Gestion des mémos texte
  • Gestion des mémos binaires
  • Requête SQL (fonction SQLExec ou requêtes créées par l'éditeur de requêtes)
  • Comparaison de la syntaxe avec HExécuteRequêteSQL
  • Fonction SQLExec et les threads
  • Limitations en PHP
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
Nomme et exécute une requête SQL.
Attention : La fonction SQLExec ne lance pas le traitement de récupération du résultat en mémoire. La récupération du résultat est effectuée lors du premier appel à l'une des fonctions suivantes : SQLPremier, SQLTable ou SQLFetch.
Remarque : Pour manipuler un mémo binaire dans une requête, utilisez le mot-clé WDMemoBinaire dans le texte de votre requête (pour plus de détails, consultez les remarques).
AndroidWidget AndroidiPhone/iPadWidget IOSMac Catalyst Cette fonction est disponible lors d'un accès aux bases tierces via un Webservice.
WEBDEV - Code Navigateur Les fonctions SQL permettent de manipuler des bases de données locales (de type Web SQL database). Pour plus de détails, consultez Accès en mode local à une base de données (SQLite).
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBODBCConnecteurs Natifs (Accès Natifs)
// Connexion à la base de données
// (Fonction SQLConnecte ou SQLConnecteWS)
 
// Exécuter la requête et récupérer le résultat ligne à ligne
i est un entier = 0
SQLExec("SELECT NOM, PRENOM, POSTE, PHOTO FROM CLIENT", "REQ1")
TANTQUE SQLAvance("REQ1") = 0  // Il y a encore une ligne à lire
i++
// Récupérer les données
NOM[i] = SQLLitCol("REQ1", 1)
PRENOM[i] = SQLLitCol("REQ1", 2)
POSTE[i] = SQLLitCol("REQ1", 3)
{"IMAGE"+i} = SQLLitMémo("REQ1", 4)
FIN
SQLFerme("REQ1")
 
// Déconnexion (fonction SQLDéconnecte)
Syntaxe

Exécuter une requête SQL Masquer les détails

<Résultat> = SQLExec(<Texte de la requête en SQL> , <Nom de la requête>)
<Résultat> : Booléen
  • Vrai si la requête a été exécutée,
  • Faux dans le cas contraire. Si la requête n'a pas été exécutée, le message d'erreur peut être connu grâce à la variable SQL.MesErreur, après l'exécution de la fonction SQLInfoGene.
<Texte de la requête en SQL> : Chaîne de caractères
Code SQL de la requête à exécuter.
<Nom de la requête> : Chaîne de caractères
Nom associé au texte de la requête. Correspond :
  • soit au nom logique de la requête.
  • soit au nom et au chemin complet de la requête (fichier ".WDR").
Java Le nom de la requête correspond uniquement au nom logique de la requête.
WEBDEV - Code Navigateur

Exécuter une requête SQL en code Navigateur Masquer les détails

<Résultat> = SQLExec(<Texte de la requête en SQL> , <Nom de la requête> [, <Procédure WLangage>])
<Résultat> : Booléen
  • Vrai si la requête a été exécutée,
  • Faux dans le cas contraire. L'exécution de la requête est asynchrone : la fonction demande l'exécution de la requête puis le traitement en cours continue à s'exécuter sans que le résultat de la requête ne soit récupéré.
    Le résultat de la fonction SQLExec permet uniquement de gérer les problèmes de connexion. Il est conseillé de tester la bonne exécution de la requête dans la procédure <Nom de la procédure>.
<Texte de la requête en SQL> : Chaîne de caractères
Code SQL de la requête à exécuter.
<Nom de la requête> : Chaîne de caractères
Nom associé au texte de la requête.
<Procédure WLangage> : Nom de procédure
Nom de la procédure WLangage à exécuter lors de l'exécution de la requête SQL.
Cette procédure peut être une procédure navigateur globale au projet ou une procédure navigateur locale à la page qui contient le code en cours d'exécution. Cette procédure est de la forme :
PROCEDURE <Nom de la procédure>(<Nom de la requête>)

où <Nom de la requête> est le nom de la requête en cours d'exécution.
Cette procédure est lancée à la fin de l'exécution réelle de la requête (quelque soit le résultat de la requête). Cette procédure navigateur permet de :
  • tester la bonne exécution de la requête. La fonction SQLInfoGene est automatiquement exécutée à l'appel de la procédure. Les variables SQL sont donc toutes positionnées. Si une erreur est survenue, SQL.erreur sera différente de "00000". Le message d'erreur pourra être connu grâce à la variable SQL.MesErreur.
  • parcourir le résultat de la requête.
Si de nouvelles requêtes sont exécutées dans cette procédure (par exemple pour ajouter des enregistrements), il est possible :
  • soit d'utiliser la même procédure : le paramètre de cette procédure permet de connaître la requête en cours d'exécution.
  • soit d'utiliser une procédure navigateur différente pour tester le résultat de ces nouvelles requêtes.
Remarques

Exécution de la requête

Les informations concernant l'exécution de la requête peuvent être connues grâce à la fonction SQLInfoGene. La variable SQL.NbCol contient le nombre de colonnes du résultat de la requête.
Après son exécution et son traitement, la requête doit être libérée grâce à la fonction SQLFerme.

Récupération du résultat de la requête

Le résultat de la requête peut être :
  • Transféré dans une table ou une liste (fonction SQLTable).
  • Transféré dans des champs ou des variables (fonction SQLAssocie).
  • Récupéré ligne par ligne (fonction SQLFetch).
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL ClassicHFSQL Client/Serveur

Requête de type INSERT

Lors de l'exécution d'une requête de type INSERT, la variable SQL.IDAuto contient l'identifiant automatique ajouté lors du précédent INSERT.
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)PHPAjaxHFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBODBCConnecteurs Natifs (Accès Natifs)

Gestion des mémos texte

Dans le paramètre <Texte de la requête>, un mémo texte s'utilise comme une variable texte. Par exemple :
// Requête avec condition sur un mémo texte dont la valeur est "Bon client"
TexteRequête = "SELECT NOMCLI FROM CLIENT WHERE MEMOCLIENT = 'Bon client'"
SQLExec(TexteRequête, "REQ1")
WINDEVWEBDEV - Code ServeurEtats et RequêtesJavaCode Utilisateur (MCU)ODBCConnecteurs Natifs (Accès Natifs)

Gestion des mémos binaires

Pour écrire un mémo binaire dans une table (avec un ordre SQL UPDATE ou INSERT), il faut utiliser la syntaxe suivante dans le texte de la requête :
  • {WDMemoBinaire('<NomFichier>' [,'Fichier'])}

    où :
    • Fichier (valeur par défaut) indique que le mémo est un mémo binaire (issu d'un fichier).
    • WDMemoBinaire est un mot réservé.
    • <NomFichier> est le nom physique d'un fichier.
      AndroidWidget AndroidiPhone/iPadWidget IOSMac Catalyst Cas d'un accès aux bases tierces via un Webservice : Le chemin du fichier correspond à un chemin local à l'application qui exécute le Webservice (c'est-à-dire un chemin sur le périphérique mobile).
  • {WDMemoBinaire('<NomFichier>' [,'FichierTexte'])}
    où :
    • FichierTexte indique que le mémo est un mémo texte (issu d'un fichier).
    • WDMemoBinaire est un mot réservé.
    • <NomFichier> est le nom physique d'un fichier.
      AndroidWidget AndroidiPhone/iPadWidget IOSMac Catalyst Cas d'un accès aux bases tierces via un Webservice : Le chemin du fichier correspond à un chemin local à l'application qui exécute le Webservice (c'est-à-dire un chemin sur le périphérique mobile).
Par exemple :
// Insertion du fichier C:\PHOTO\DUPONT.BMP dans un mémo binaire
TexteRequête = "INSERT INTO CLIENT VALUES ('DUPONT', 'Jean'," + ...
"{WDMemoBinaire('C:\PHOTO\DUPONT.BMP')})"
SQLExec(TexteRequête, "REQ1")
// Insertion du fichier C:\DOC\LETTRE.TXT dans un mémo texte
TexteRequête = "INSERT INTO CLIENT VALUES ('DUPUIS', 'Christophe'," + ...
"{WDMemoBinaire('C:\DOC\LETTRE.TXT', 'FichierTexte')})"
SQLExec(TexteRequête, "REQ1")

Remarque : L'insertion de mémos binaires sur un fichier HFSQL avec les fonctions SQL n'est pas possible et provoque une erreur. Le message d'erreur est le suivant : "Initialisation de la requête impossible. Caractère {WDMemBinaire( inattendu".
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL ClassicHFSQL Client/ServeurHyper File 5.5

Requête SQL (fonction SQLExec ou requêtes créées par l'éditeur de requêtes)

Lors de l'utilisation des instructions SQL DELETE, INSERT ou UPDATE, aucun contrôle d'intégrité et aucun contrôle de doublons ne sont réalisés sur une base de données HFSQL. Cette fonctionnalité n'est pas disponible dans cette version.
Solution : Utilisez les fonctions HFSQL (HSupprime, HAjoute ou HModifie) sur vos fichiers de données. Le contrôle de l'intégrité et le contrôle des doublons seront automatiquement réalisés.
Remarque : Les fonctions HExécuteRequête et HExécuteRequêteSQL permettent de vérifier l'intégrité et les doublons sur une base de données HFSQL.
WINDEVWEBDEV - Code ServeurEtats et RequêtesJavaCode Utilisateur (MCU)PHPHFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBODBCConnecteurs Natifs (Accès Natifs)

Comparaison de la syntaxe avec HExécuteRequêteSQL

La fonction HExécuteRequêteSQL permet également d'exécuter une requête SQL. Les paramètres de ces deux fonctions sont identiques mais leur ordre est inversé : en effet, la fonction HExécuteRequêteSQL précise en premier le nom de la requête, puis le texte de la requête (utilisant ainsi la même norme que toutes les fonctions HFSQL).
La syntaxe de la fonction SQLExec est conservée pour compatibilité.

Fonction SQLExec et les threads

Lors de l'exécution de la fonction SQLExec dans un thread secondaire, la connexion utilisée doit être effectuée dans le même thread : la connexion ne peut pas être effectuée dans le thread principal (projet ou fenêtre). La connexion réalisée via la fonction SQLConnecte n'est pas partagée dans les autres threads.
PHP

Limitations en PHP

  • Les mémos binaires ne peuvent pas être manipulés dans cette version. La requête est exécutée sur une base de données MySQL.
  • Les requêtes multiples ne sont pas supportées. Par exemple :
    DROP TABLE TEST ;
    CREATE TABLE TEST (`IDTEST` INTEGER  PRIMARY KEY ,
    `receveur` VARCHAR(50)  NOT NULL ,
    `nomtest` VARCHAR(50)  NOT NULL ,`NOMPRODUIT` VARCHAR(50)  NOT NULL );
Composante : wd290hf.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 25/05/2022

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