PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • 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
  • 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/iPadApple WatchUniversal Windows 10 AppWindows Mobile
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).
Versions 16 et supérieures
WEBDEV - Code Navigateur Cette fonction est désormais disponible en code Navigateur.
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).
Nouveauté 16
WEBDEV - Code Navigateur Cette fonction est désormais disponible en code Navigateur.
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).
WEBDEV - Code Navigateur Cette fonction est désormais disponible en code Navigateur.
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).
Versions 19 et supérieures
iPhone/iPad Cette fonction est désormais disponible pour les applications iPhone/iPad (accès aux bases tierces via un Webservice).
Android Cette fonction est désormais disponible pour les applications Android (accès aux bases tierces via un Webservice).
Widget Android Cette fonction est désormais disponible en mode Widget Android (accès aux bases tierces via un Webservice).
Nouveauté 19
iPhone/iPad Cette fonction est désormais disponible pour les applications iPhone/iPad (accès aux bases tierces via un Webservice).
Android Cette fonction est désormais disponible pour les applications Android (accès aux bases tierces via un Webservice).
Widget Android Cette fonction est désormais disponible en mode Widget Android (accès aux bases tierces via un Webservice).
iPhone/iPad Cette fonction est désormais disponible pour les applications iPhone/iPad (accès aux bases tierces via un Webservice).
Android Cette fonction est désormais disponible pour les applications Android (accès aux bases tierces via un Webservice).
Widget Android Cette fonction est désormais disponible en mode Widget Android (accès aux bases tierces via un Webservice).
Remarque : A partir de la version 19, HFSQL est le nouveau nom de HyperFileSQL.
Versions 21 et supérieures
Universal Windows 10 App Cette fonction est désormais disponible en mode Universal Windows 10 App.
Nouveauté 21
Universal Windows 10 App Cette fonction est désormais disponible en mode Universal Windows 10 App.
Universal Windows 10 App Cette fonction est désormais disponible en mode Universal Windows 10 App.
WINDEVWEBDEV - Code ServeurEtats et RequêtesAjaxCode Utilisateur (MCU)HFSQLHFSQL Client/ServeurHyper File 5.5OLE DBODBCConnecteurs Natifs (Accès Natifs)
// 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")
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 (entre guillemets)
Code SQL de la requête à exécuter.
<Nom de la requête> : Chaîne de caractères (entre guillemets)
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.
Versions 16 et supérieures
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> [, <Nom de la procédure>])
<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 (avec guillemets)
Code SQL de la requête à exécuter.
<Nom de la requête> : Chaîne de caractères (avec guillemets)
Nom associé au texte de la requête.
<Nom de la procédure> : Chaîne de caractères (avec guillemets)
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.
Nouveauté 16
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> [, <Nom de la procédure>])
<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 (avec guillemets)
Code SQL de la requête à exécuter.
<Nom de la requête> : Chaîne de caractères (avec guillemets)
Nom associé au texte de la requête.
<Nom de la procédure> : Chaîne de caractères (avec guillemets)
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.
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> [, <Nom de la procédure>])
<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 (avec guillemets)
Code SQL de la requête à exécuter.
<Nom de la requête> : Chaîne de caractères (avec guillemets)
Nom associé au texte de la requête.
<Nom de la procédure> : Chaîne de caractères (avec guillemets)
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êtesAjaxCode Utilisateur (MCU)HFSQLHFSQL 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êtesPHPAjaxCode Utilisateur (MCU)HFSQLHFSQL 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.
    Versions 19 et supérieures
    AndroidWidget AndroidiPhone/iPad 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 Terminal mobile).
    Nouveauté 19
    AndroidWidget AndroidiPhone/iPad 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 Terminal mobile).
    AndroidWidget AndroidiPhone/iPad 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 Terminal 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.
    Versions 19 et supérieures
    AndroidWidget AndroidiPhone/iPad 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 Terminal mobile).
    Nouveauté 19
    AndroidWidget AndroidiPhone/iPad 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 Terminal mobile).
    AndroidWidget AndroidiPhone/iPad 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 Terminal 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êtesAjaxCode Utilisateur (MCU)HFSQLHFSQL 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êtesJavaPHPCode Utilisateur (MCU)HFSQLHFSQL 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é.

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 : wd240hf.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Erreur dans la syntaxe
Il y a une erreur dans la syntaxe, il manque une parenthèse dans les explications mais elles y sont dans l'exemple

"{WDMemoBinaire('<NomFichier>' [,'Fichier']}"
Philippe SB
18 juil. 2018