DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Gestion des bases de données / Fonctions SQL
  • Caractéristiques du champ Table par programmation
  • Fermeture d'une requête
  • Utilisation du Fetch Partiel
  • Les différents types de requêtes
  • Récupération de rubriques de type Float sur Oracle (via ODBC)
  • Gestion de l'Unicode
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
Transfère directement le résultat d'une requête dans un champ Table par programmation (un champ Liste ou un champ Combo), avec possibilité de Fetch Partiel (récupération du résultat par blocs de lignes). Dans un parcours du type "SQLAvance/SQLLitCol", le transfert des informations dans le champ Table se fera à partir de l'enregistrement en cours.
Remarque : Cette fonction doit être utilisée lors d'un parcours du résultat de la requête de type SQLAvance/ SQLLitCol. Si cette fonction est utilisée dans un parcours de type SQLPremier/SQLCol, une erreur fatale est générée. Pour plus de détails sur les différents types de parcours du résultat d'une requête SQL, consultez Types de parcours SQL.
Java Le fetch partiel est automatiquement réalisé par le framework JAVA.
Exemple
// Transfert dans un champ Table : récupération sans fetch
ResSQL = SQLExec("SELECT NOMCLI,PRENOMCLI FROM FACT", "REQ1")
SI ResSQL ALORS
SQLTable("REQ1", TABLE_TabReq, "Nom du client" + TAB + "Prénom", "30 20")
// Calcule le nombre d'enregistrements résultat
NbEnr est un entier = TableOccurrence(TABLE_TabReq)
SINON
// Erreur SQL
FIN
SQLFerme("REQ1")
WINDEVCode Utilisateur (MCU)HFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBODBCConnecteurs Natifs (Accès Natifs)
// Transfert dans un champ Table : récupération uniquement des 25 premiers
ResSQL = SQLExec("SELECT NOMCLI,PRENOMCLI,VILLE FROM FACT", "REQ1")
SI ResSQL ALORS
// Avoir uniquement les 25 premières lignes
SQLTable("REQ1", TABLE_TabReq, 25)
SINON
// Erreur SQL
FIN
SQLFerme("REQ1")
WINDEVCode Utilisateur (MCU)HFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBODBCConnecteurs Natifs (Accès Natifs)
// Transfert dans un champ Table : récupération par Fetch
ResSQL = SQLExec("SELECT NOMCLI,PRENOMCLI,VILLE FROM FACT", "REQ1")
SI ResSQL ALORS
// Récupération par groupe de 28 lignes
TANTQUE SQLTable(28,"REQ1", TABLE_MATABLE, "ColTitre", "90")
// Traitement  
SINON
// Erreur SQL
FIN
SQLFerme("REQ1")
Syntaxe

Transfert dans un champ Table par programmation sans Fetch Partiel Masquer les détails

SQLTable(<Nom de la requête> , <Champ Table> , <Nombre de lignes maximum> [, <Titre des colonnes>] , <Largeur des colonnes>)
<Nom de la requête> : Chaîne de caractères
Nom de la requête créée et exécutée avec la fonction SQLExec, ou exécutée avec la fonction SQLExecWDR.
Java Le nom de la requête doit obligatoirement être entre guillemets.
<Champ Table> : Nom de champ
Nom du champ Table par programmation dans lequel le résultat de la requête doit être affiché.
<Nombre de lignes maximum> : Entier
Nombre de lignes maximum affichées dans le champ Table. Si ce paramètre est précisé, le champ Table contiendra au maximum <Nombre de lignes maximum> lignes affichées, même si le résultat de la requête contient un nombre supérieur de lignes.
<Titre des colonnes> : Chaîne de caractères optionnelle
Liste de tous les titres des colonnes du champ Table par programmation. Les différents titres sont séparés par TAB. Pour préciser uniquement la largeur des colonnes, ce paramètre peut correspondre à une chaîne vide ("").
<Largeur des colonnes> : Chaîne de caractères
Liste de toutes les largeurs des colonnes, séparées par un caractère espace. Pour préciser uniquement le titre des colonnes, ce paramètre peut correspondre à une chaîne vide ("").
WINDEVCode Utilisateur (MCU)

Transfert dans un champ Table par programmation avec Fetch Partiel Masquer les détails

SQLTable(<Nombre de lignes dans un bloc> , <Nom de la requête> , <Champ Table> [, <Titre des colonnes>] , <Largeur des colonnes>)
<Nombre de lignes dans un bloc> : Entier
Nombre de lignes constituant un bloc pour le Fetch Partiel. Seul ce bloc de lignes est chargé en mémoire, les blocs suivants sont automatiquement chargés en mémoire en tâche de fond.
<Nom de la requête> : Chaîne de caractères
Nom de la requête créée et exécutée avec la fonction SQLExec, ou exécutée avec la fonction SQLExecWDR.
<Champ Table> : Nom de champ
Nom du champ Table par programmation dans lequel le résultat de la requête doit être affiché.
<Titre des colonnes> : Chaîne de caractères optionnelle
Liste de tous les titres des colonnes du champ Table par programmation. Les différents titres sont séparés par TAB. Pour préciser uniquement la largeur des colonnes, ce paramètre peut correspondre à une chaîne vide ("").
<Largeur des colonnes> : Chaîne de caractères
Liste de toutes les largeurs des colonnes, séparées par un caractère espace. Pour préciser uniquement le titre des colonnes, ce paramètre peut correspondre à une chaîne vide ("").
Remarques

Caractéristiques du champ Table par programmation

Le nombre de colonnes du champ Table par programmation doit être suffisant pour accueillir toutes les colonnes du résultat de la requête.

Fermeture d'une requête

Une requête est fermée automatiquement :
  • après l'exécution de la fonction SQLTable si le Fetch partiel n'est pas utilisé.
  • dès que le résultat de la requête est récupéré en totalité si le Fetch partiel est utilisé.
WINDEVCode Utilisateur (MCU)HFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBODBCConnecteurs Natifs (Accès Natifs)

Utilisation du Fetch Partiel

La récupération en cours s'arrête dès que la fonction SQLFerme est appelée ou dès que la fenêtre contenant le champ Table est fermée.
Il est possible d'utiliser le Fetch Partiel sur plusieurs requêtes en même temps.
WINDEVCode Utilisateur (MCU)HFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBODBCConnecteurs Natifs (Accès Natifs)

Les différents types de requêtes

La fonction SQLTable permet d'associer à un champ Table par programmation les requêtes créées avec la fonction SQLExec.
Pour associer à un champ Table par programmation les requêtes créées sous l'éditeur de requêtes (ou crées avec la fonction HExécuteRequêteSQL), utilisez la fonction FichierVersTableMémoire.
WINDEVCode Utilisateur (MCU)ODBC

Récupération de rubriques de type Float sur Oracle (via ODBC)

Par défaut, le séparateur décimal utilisé pour les rubriques de type Float sur Oracle est le point. Or le driver ODBC renvoie la valeur avec en utilisant la virgule comme séparateur décimal. Lors de l'affectation de la valeur dans un champ de type numérique, les décimales sont perdues.
Pour éviter ce problème, il suffit de configurer le séparateur décimal pour la connexion en cours :
// Connexion à la base de données Oracle 
SQLConnecte("MaBaseOracle", "User", "Passe", "", "ODBC") 
// Requête pour changer le séparateur décimal 
SQLExec("ALTER SESSION SET NLS_NUMERIC_CHARACTERS ='. '", "ReqTemp")

Gestion de l'Unicode

La gestion de l'Unicode peut être définie au niveau de la configuration de projet (onglet "Unicode" de la fenêtre de description de la configuration) :
  • Si l'option "Utiliser des chaînes ANSI en exécution" est sélectionnée : les données sont converties en utilisant l'alphabet courant.
    Rappel : La fonction ChangeAlphabet permet de modifier l'alphabet courant.
  • Si l'option "Utiliser des chaînes UNICODE en exécution" est sélectionnée, les données sont insérées sans transformation.
Composante : wd300obj.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Tabulation dans les colonnes
Attention aux caractères de tabulation dans vos requêtes SQL, ils mettent le bazar lors du remplissage de votre champ table.

Ex: SELECT 'a' + CHAR(9) + 'b'

Quand cette requête est exécutée dans votre SGBDR, le résultat est contenu dans une seule colonne, dans windev / webdev / windev mobile, si vos faites appel à SQLTable, le wlangage va considérer CHAR(9) comme séparateur de colonnes, du coup, le résultat sera répartie sur 2 colonnes, et non 1 seule
ROMULUS001
14 juin 2017

Dernière modification : 25/05/2022

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