DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Gestion des bases de données / Fonctions SQL
  • Présentation
  • Comment gérer une base de données locale ?
  • Fonctions SQL disponibles
  • Exemple : Enregistrer en local les données d'un site déconnecté
  • Les étapes
  • Récupérer des enregistrement de la base distante
  • Récupérer les données locales pour mettre à jour la base distante
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
Accès en mode local à une base de données (SQLite)
Connecteurs Natifs (Accès Natifs)Disponible uniquement avec ce type de connexion
Présentation
WEBDEV permet à un site de créer et d'accéder à une base de données créée par le navigateur sur le poste de l'internaute en code navigateur.
Cette fonctionnalité permet par exemple de saisir des données en mode déconnecté pour les transmettre au serveur dès que la connexion à Internet sera rétablie.
Attention : Cette fonctionnalité est disponible uniquement sous certains navigateurs :
  • Chrome,
  • Safari,
  • Opéra 11, ...
Comment gérer une base de données locale ?
Pour gérer une base de données locale :
  1. Utilisez la fonction SQLConnecte en code navigateur pour vous connecter à la base de données locale. Par exemple :
    // Connexion à une base de données navigateur nommée "BaseLocale"
    // La base de données est créée si elle n'existe pas
    SQLConnecte("BaseLocale", "", "", "", "Web SQL database")
  2. Utilisez la fonction SQLExec pour réaliser des requêtes sur la base de données locale.
    Attention : Les requêtes SQL sont exécutées de manière asynchrone. La syntaxe de la fonction SQLExec utilise donc une procédure spécifique. 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 :
  • Lors de la sortie de la procédure navigateur, les valeurs renvoyées par la fonction SQLInfoGene sont rétablies. Si ces valeurs ont été modifiées dans la procédure navigateur, elles sont écrasées.
  • Pour connaître les ordres SQL utilisables, consultez la documentation des bases de données de type "Web SQL database".

Fonctions SQL disponibles

Les fonctions SQL disponibles en code Navigateur sont les suivantes :
SQLAvancePasse à la ligne suivante (c'est-à-dire à l'enregistrement suivant) du résultat de la requête.
SQLChangeConnexionModifie la connexion en cours.
SQLColonneRenvoie les caractéristiques de toutes les colonnes (ou rubriques) :
  • soit d'une table donnée.
  • soit d'une requête donnée.
SQLConnecteConnecte l'application en cours à une base de données à interroger par SQL.
SQLDéconnecteFerme la connexion en cours et libère l'espace mémoire utilisé par la connexion.
SQLExecNomme et exécute une requête SQL.
SQLFermeDéclare la fin d'exécution d'une requête et libère les ressources mémoire allouées lors de l'exécution de la requête.
SQLInfoGeneInitialise les différentes variables SQL avec les informations relatives à la dernière requête exécutée.
SQLLitColRécupère le contenu de la colonne spécifiée dans le résultat de la requête, pour la ligne en cours.
SQLReqExisteTeste l'existence d'une requête.
Exemple : Enregistrer en local les données d'un site déconnecté
WEBDEV permet la mise en place de sites déconnectés. Si ce type de site doit enregistrer des données pendant la durée de la déconnexion, il est possible d'utiliser une base de données locale.

Les étapes

Les étapes sont les suivantes :
  1. Connexion à la base de données
    La connexion à la base de données est réalisée grâce à la fonction SQLConnecte. Par exemple :
    SQLConnecte("","","", "RDVClients", "Web SQL database")
  2. Création de la base de données locale
    Avant d'utiliser une base locale, il est nécessaire de la créer. Pour cela, il suffit d'utiliser une requête de type CREATE TABLE. Cette requête doit être exécutée via la fonction SQLExec. Par exemple :
    sRequête est une chaîne
    // Code de création de la table
    sRequête = [
    CREATE TABLE IF NOT EXISTS "RendezVous"
    ("IDRendezVous"  INTEGER PRIMARY KEY , "DateHeureDebut" VARCHAR(16) ,
    "Client" VARCHAR(100) , "Adresse" VARCHAR(200) , "Resume" LONGVARCHAR );
    ]
    // Exécution de la requête
    SQLExec(sRequête, "REQ_CREATION", _cbRequete)

    Lorsque la requête "REQ_CREATION" est terminée, la procédure _cbRequete est exécutée.
    Dans cet exemple, cette procédure permet de gérer toutes les requêtes exécutées et d'effectuer un traitement approprié après la requête.
    La requête de création ne doit être utilisée qu'une seule fois, en début de journée par exemple. Par exemple, la base peut être créée uniquement si un paramètre spécifique (par exemple "First") n'est pas passé aux pages.
  3. Accès au données locales ou distantes
    Dans cet exemple, le site peut être utilisé en mode connecté ou déconnecté. Il doit être possible d'accéder à la base locale (en mode déconnecté) ou à la base distante (en mode connecté).
    Tous les accès (création, modification, sup­pression, ...) à la base locale doivent être effectués via la procédure SQLExec.
    Les accès à la base distante peuvent toujours être effectués via les fonctions Hxxx. Il est cependant nécessaire : Par exemple :
    sRequête est une chaîne
    // Le navigateur est connecté
    SI NavigateurEstConnecté() = Vrai ALORS
    // Enregistre dans la base de données distante (serveur)
    AJAXExécute(SauveDonnées, SAI_ID, SAI_RESUME)
    FIN
    sRequête = [
    UPDATE RendezVous
    SET Resume='%2'
    WHERE IDRendezVous=%1
    ]
     
    // Dans tous les cas, enregistre dans la base de données locale
    SQLExec(ChaîneConstruit(sRequête, gnIDRDVNav,SAI_RESUME), "REQ_SAUVEGARDE", _cbRequete)

Récupérer des enregistrement de la base distante

Pour récupérer des enregistrements de la base distante (serveur) dans la base locale (pour l'initialiser par exemple), il suffit de :
  1. Parcourir les enregistrements et mémoriser les rubriques sous forme de chaînes, dans une procédure Serveur.
    PROCÉDURE RécupèreEnreg()
    POUR TOUT MonFichier1
    sListe += [RC] + MonFichier1.Rubrique1 + TAB + ...
    MonFichier1.Rubrique2 + TAB + MonFichier1.Rubrique3
    FIN
    RENVOYER sListe
  2. Récupérer cette liste en code navigateur :
    // Récupère la liste
    sListe = AJAXExécute(RécupèreEnreg)
  3. Parcourir la chaîne et extraire les informations à l'aide de la fonction ExtraitChaîne. Les enregistrements peuvent ainsi être ajoutés facilement avec une requête d'ajout (INSERT).

Récupérer les données locales pour mettre à jour la base distante

De la même manière, il est possible de récupérer les données de la base locale pour mettre à jour la base distante. Il suffit de :
  1. Exécuter une requête en locale pour récupérer les enregistrements. Par exemple, pour récupérer les rendez-vous de la journée :
    // Exécute la requête qui sélectionne les rendez-vous de la journée
    sRequête est une chaîne
    sRequête = ChaîneConstruit("SELECT IDRendezVous,Resume FROM RENDEZVOUS " + ...
    "WHERE DateHeureDebut LIKE '%1%' ORDER BY DateHeureDebut ASC;", DateDuJour())
    // Lance la requête
    SQLExec(sRequête, "REQ_SYNCHRONISERDV", _cbRequete)
  2. Dans la procédure de vérification lancée par la fonction SQLExec, il suffit d'exécuter une procédure de mise à jour de la base distante grâce à la fonction AjaxExécute. Dans notre exemple, la procédure navigateur __SynchoniseBase est lancée :
    PROCÉDURE _SynchroniseBase(sRequête)
     
    // Tant qu'il existe des rendez-vous à synchroniser
    TANTQUE SQLAvance(sRequête) = 0
    // Synchronise le rendez-vous
    AJAXExécute(_SynchroniseUnRendezvousDistant, SQLLitCol(sRequête, 1), SQLLitCol(sRequête, 2))
    FIN
Remarque : La mise à jour de la base de données distante peut être provoquée lors de la re-connexion au serveur. Lors de la reconnexion au serveur, l'événement "Passage en mode connecté" est exécuté. Ce traitement est un traitement optionnel de la page. Pour l'afficher sous l'éditeur de code, il suffit de :
  • Afficher le code de la page.
  • Cliquer sur le lien "Ajouter d'autres événements à xxx" situé à la fin de la fenêtre de code, après le dernier événement.
    La totalité des événements optionnels disponibles pour la page est affichée.
  • Sélectionner l'événement "Passage en mode connecté".
  • Valider.
  • Saisir le code de mise à jour de la base de données distante.
Version minimum requise
  • Version 16
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