dataXmaster est une solution conçue pour extraire, synchroniser et transformer vos données sans développement.
Aide au démarrage
Vous souhaitez démarrer avec SQLManagerX mais vous ne savez pas par quel bout commencer ? Cette section est faite pour vous.
Vous trouverez ici plusieurs guides en format PDF ainsi que des projets d’exemples à réaliser et à télécharger. Lisez la suite et plongez dans l’univers de SQLManagerX !
Cette chaine a été créer afin d’illustrer par des vidéos les différents accès que nous mettons à disposition sur ce site.

SQLManagerX Pro est là pour offrir aux professionnels un ensemble prestations (développements, formations, audits...)

Les accès [alter]natifs sont le lien entre les accès de bas niveau de l’éditeur SGBD et votre application WinDev.

Si vous utilisez SQLManagerX et/ou les accès [alter]natifs, vous pouvez faire partie de nos références !

Vous êtes convaincu des bienfaits de SQLManagerX pour votre projet ? Il ne vous reste plus qu'à l'utiliser.

Démarrez SQLManagerX
Vous souhaitez un peu d'aide pour mieux démarrer avec SQLManagerX ? Guides et exemples sont là pour vous.

Pour nous aider a maintenir toute la partie gratuite de SQLManagerX qui reste l'occupation principale de ses membres.

SQLManagerX en Bref
Ce site est un espace non officiel consacré au développement SQL sous WinDev.
Notre solution, SQLManagerX, est entièrement gratuite et accessible aux développeurs internautes.
Besoin d'aide au démarrage ?
Démarrer avec SQLManagerX
Étape 1 : Création de la base de données
La première chose a faire est de créer une base de données sur un serveur (si vous en avez déjà une, vous pouvez directement passer à l’étape 2). Pour cela, vous pouvez soit la créer par vous-même, soit à l’aide du convertisseur (voir le Data Center).
Étape 2 : Création d’un premier projet
Comme premier projet, nous allons simplement créer un ensemble de fenêtres tel que le ferait le RAD pour un fichier HyperFile.
Comme pour tout projet Windev, nous allons le créer à partir de l'AGL. Pour cela faites
Nommez votre projet
Prenez soin de bien sélectionner
Cliquez sur
Ça y est, notre projet est créé ! Nous allons maintenant pouvoir l'enrichir des composants logiciels livrés avec SQLManagerX.
Étape 3 : Création de l’arborescence projet
Actuellement l'arborescence des notre projet est la suivante :
Pour plus de facilité nous allons créer une arborescence type. Par la suite, nous vous recommandons de la réutiliser pour vos futurs projets.
Faites le nécessaire pour obtenir l'arborescence suivante :
- Le répertoire
classes contiendra toutes les classes du projet - Le répertoire
classes_acces contiendra toutes les classes liées aux objets d'accès aux tables par SQLManagerX - Le répertoire
Etats contiendra tous les états. - Le répertoire
Fenetres contiendra les fenêtres. - Le répertoire
Scripts contiendra tous les scripts SQL utilisés dans le cadre de notre développement (script de création de la base, code des classes si vous passez par SQMX-Outils, script des requêtes SQL).
Étape 4 : Copie des fichiers nécessaires
Pour fonctionner avec SQLManagerX, notre projet à besoin des classes et des différents éléments liés à chaque accès natifs.
Dans le répertoire
Nom du fichier | Informations |
ado4wd.dll | Accès ado |
libmysql.dll | dll Mysql à récupérer sur http://www.mysql.com/ (API propriétaire) |
libpq.dll | dll postgresql présente dans le package ou à récupérer sur http://www.postgresql.com/ (API propriétaire) |
mysql4wd.dll | dll d'interfaçage entre libmySQL.dll et la c_mysql4wd.wdc |
oracle4wd.dll | dll d'interfaçage entre le client Oracle (API propriétaire) et la c_oracle4wd.wdc |
postgresql4wd.dll | dll d'interfaçage entre libpq.dll et la c_postregresql4wd.wdc |
sqlite4wd.dll | dll d'interface entre la base SQLite et la c_SQLite4WD.wdc |
rtl60.bpl | Ressource Borland c++ nécessaire à la dll SQLite4wd.dll disponible dans l'accès SQLite4WD |
Pour exploiter, par exemple, SQLManagerX avec une base Mysql, nous devons prévoir l'utilisation des dll
Dans le répertoire
Nom du fichier | Informations |
c_ado4wd.wdc | classe pour accès ADO |
c_hf4wd.wdc | classe pour accès HF |
c_log4wd.wdc | classe de log, nécessaire pour la majorité des accès |
c_mysql4wd.wdc | classe pour accès Mysql |
c_oracle4wd.wdc | classe pour accès Oracle |
c_php4wd.wdc | classe pour accès par PHP |
c_postgresql4wd.wdc | classe pour accès Postgresql |
c_sqlite4wd.wdc | classe pour accès SQLite |
SQLManagerX.wdc |
Étape 5 : Intégration des éléments dans le projet
Maintenant que nos fichiers de classes sont présent dans leur répertoire, nous allons intégrer les classes nécessaires dans notre projet. Par exemple, pour MySQL, prévoir
Étape 6 : Création du code d’initialisation
Nous devons maintenant copier les quelques lignes suivantes dans le code d’initialisation de notre projet :
GLOBAL
convSql est c_mySQL4WD
BaseHost est une chaîne //serveur
BaseUser est une chaîne //utilisateur MySQL
BasePasswd est une chaîne //Mot de passe MySQL
BaseDB est une chaîne //Base de données
BaseHost="localhost"
BaseUser="root"
BasePasswd=""
BaseDB="test"
// Déclaration de la connexion MySQL
// à faire avant toute chose
// notamment la déclaration des classes
SI PAS convSql:mySQLConnecte(BaseHost,BaseUser,BasePasswd,BaseDB) ALORS
Info("Pas de connexion SQL: "+convSql:mySQLGetErrorMessage())
FinProgramme()
FIN
// activation du mode debug
convSql:mySQLDebugMode = Vrai
// Déclaration des classes d'accès à la base
Notez que l’accès initialisé ici (ligne 2) est un accès MySQL via la classe c_mySQL4WD
. Nous aurions tout aussi bien pu nous connecter, via un autre accès, à une autre base en utilisant l’une des lignes de code suivantes :
convSql est c_postgreSQL4WD
Pour un accès à une base Postgresql.
convSql est c_Oracle4WD
Pour un accès à une base Oracle.
convSql est c_ ADO4WD
Pour un accès ADO.
convSql est c_ HF4WD ()
Pour un accès HFSQL.
L'activation du mode debug convSql:mySQLDebugMode = Vrai
permet de tracer les ordres SQL envoyés à la base de données dans un fichier texte à l'aide de la classe c_log4wd
.
Étape 7 : Création de la classe d’accès villes
Il existe deux possibilités pour créer votre classe : soit vous utilisez l’outil
Création manuelle de la classe c_villes
Déclarez votre classe comme suit :
c_villes est une classe
PUBLIC
un objet SQLManagerX
m_CodeP est une chaîne
m_Commune est une chaîne
m_Zone est un entier
FIN
Remarquez le préfixe c_villes
. Notez aussi le préfixe p_prefixeClasse
et variable p_prefixeMembre
).
Il nous reste à écrire le constructeur :
PROCEDURE Constructeur(p_SQLClass = Null, p_tableSQL = "", p_nomObjet = "", p_prefixeClasse = "c_", p_prefixeMembre = "m_")
Constructeur SQLManagerX(p_SQLClass, p_tableSQL, p_nomObjet, p_prefixeClasse, p_prefixeMembre)
Vous pouvez sauvegarder votre classe dans le répertoire
Création assistée de la classe c_villes
Rendez-vous dans le Data Center, ouvrez l’onglet
Entrez le nom
Maintenant que votre classe a été générée sous forme de fichier .txt, il ne vous reste plus qu’à l’intégrer dans WinDev en copiant sa déclaration et son constructeur présents dans votre fichier .txt.
Étape 8 : Déclaration globale
Ajoutez la ligne suivante dans le code d'initialisation de votre projet juste en dessous de la ligne
// Déclaration des classes d'accès à la base
:
I_VILLES est un c_villes (convSql, "villes", "I_VILLES")
Ici, quelques explications s’imposent :
I_VILLES
est notre instance de la classe C_VILLES
(objet disponible dans le TreeView des objets du projet).
Lors de son instanciation, I_VILLES
va utiliser la connexion principale d'accès à MySQL (définie explicitement dans le code du projet) : convSql
. Le nom de la table accédée en base est I_VILLES
. Le dernier paramètre de la classe étant le nom de l'objet, vous devez donc avoir une ligne commençant et terminant par le même nom, comme c’est le cas ci-dessus.
Concernant le nom de la table accédée suivant l'accès et l'OS, il faut respecter la casse de la table (sous Mysql avec les tables innodb, veillez à toujours utilisez des minuscules, ceci afin de pouvoir basculer sans entrave d'un système Unix à Windows et inversement).
Étape 9 : Création de notre première fenêtre en mode Fiche
Nous allons créer une fenêtre vierge avec 3 champs :
- un champ de saisie
Commune , de type texte sur n caractères - un champ de saisie
CodeP , de type texte sur n caractères - un champ de saisie
Zone , de type numérique sur 4 octets
Vous devriez obtenir quelque chose comme ça :
Ajoutez également un bouton
Étape 10 : Insertion de la fonction d’affichage
Dans le bloc de Déclaration globales, saisissez les 2 lignes suivantes :
I_Villes:SQLPremier()
I_Villes:SQLTableVersEcran("Fiche Villes")
Notez que nous avons mis le nom de la fenêtre courante en paramètre de la fonction (méthode) SQLTableVersEcran()
. Ceci vient du fait que nous nous trouvons dans le code de déclarations globales. Si nous étions dans le code Initialisation, cela n'aurait pas été nécessaire. Nous vous recommandons néanmoins de toujours utiliser cette manière de faire.
Pourquoi, nous demanderez-vous ? En voici l'explication :
Soit une fenêtre appelante et une fenêtre appelée. Dans le code Initialisation de la fenêtre appelée, la fonction FenEnCours()
renvoie le nom de la fenêtre appelante ! Par défaut, c'est cette fonction qui est utilisée dans SQLTableVersEcran()
si le nom de la fenêtre n'est pas passé en paramètre. C'est pour cette raison que nous conseillons de toujours passer en paramètre le nom de la fenêtre.
Étape 11 : Insertion des boutons mode parcours
Nous allons maintenant créer 4 boutons de parcours avec leur codes associés.
Un bouton
I_Villes:SQLPremier()
I_Villes:SQLTableVersEcran("Fiche Villes")
Un bouton
I_Villes:SQLPrecedent()
I_Villes:SQLTableVersEcran("Fiche Villes")
Un bouton
I_Villes:SQLSuivant()
I_Villes:SQLTableVersEcran("Fiche Villes")
Et enfin un bouton
I_Villes:SQLDernier()
I_Villes:SQLTableVersEcran("Fiche Villes")
Votre fenêtre devrait maintenant ressembler à ça :
Lancez un
Étape 12 : Insertion des boutons nouveau, modifier et supprimer
Tout comme nous avons créé les quatre boutons mode parcours, nous allons maintenant créer les boutons nous permettant d’ajouter, de modifier et de supprimer des entrées dans notre table.
Créez tout d’abord un bouton
I_Villes:SQLEcranVersTable("Fiche Villes")
I_Villes:SQLInsert("Fiche Villes")
La méthode SQLEcranVersTable
permet de transférer les données depuis les champs de la fenêtre vers les membres de votre objet.
La méthode SQLInsert
permet quant à elle de transférer les valeurs des membres de votre objet dans la base de données.
Créez ensuite un bouton
I_Villes:SQLEcranVersTable("Fiche Villes")
I_Villes:SQLUpdate("Fiche Villes")
La méthode SQLUpdate()
permet de transférer les valeurs des membres modifiés de votre objet dans la base de données. Seules les valeurs modifiées sont transférées dans l'ordre update à la base de données.
Et créez ensuite un bouton
I_Villes:SQLDelete("Fiche Villes")
Vous pouvez lancer un
Étape 13 : Création de notre première fenêtre en mode Table (alimentation en mode fletch global)
Créez une fenêtre vierge et insérez-y un bouton
Créez ensuite une table mémoire
Enfin, créez un nouveau bouton avec le code associé suivant :
I_PRD:SQLFiltre("prd_idt between 100800 and 100900","order by prd_lib")
I_PRD:SQLCtable("Table1","prd_idt, prd_lib")
Dans notre exemple, on remarque que nous avons appliqué en première ligne un filtre pour ne prendre en compte que les produits dont l'identifiant est contenu entre 100800 et 100900.
Un filtre se déclare tout simplement à l'aide de la méthode SQLFiltre
. Le premier paramètre lié à cette méthode correspond à la future clause de restriction sans le mot clé WHERE
, le second paramètre correspond à l'ordre dans lequel les éléments doivent être lus (le ORDER BY
).
Une annulation de filtre est effectuée au moyen de la méthode SQLFiltre("","")
ou plus simplement SQLFiltre()
.
La méthode DesactiveFiltre()
désactivera temporairement le filtre que vous aurez précédemment créé alors que la méthode ActiveFiltre()
, quant à elle, le réactivera.
En seconde ligne, la méthode utilisée est très simple : SQLCTable
. On lui passe en paramètre la table mémoire cible ainsi que les colonnes à afficher séparées pas des virgules.
*
(généralement utilisé pour récupérer toutes les colonnes dans une requête SQL) n'est pas autorisé ici.
L'intérêt de cette méthode, au contraire de la suivante, est l'utilisation des loupes et des tris dans la table.
Étape 14 : Création de notre première fenêtre en mode Table (alimentation en mode fletch partiel)
Malgré l'intérêt de la méthode précédente, son mode de fonctionnement intrinsèque (le fait que toutes les lignes de la requête soient systématiquement chargées en mémoire) représente un inconvénient majeur : le traitement peut être lent si la requête renvoie beaucoup de lignes.
C'est pour palier à ce problème que SQLManagerX propose une méthode, dite à fetch partiel, permettant au nombre de lignes ramené par la méthode d'être égal au nombre de lignes dans votre table.
Voyons cela tout de suite !
Créons une fenêtre vierge et insérons-y comme d'habitude notre bouton
Créons ensuite une table mémoire
Maintenant, créons un ascenseur
Créons un bouton avec le code associé suivant :
I_PRD:SQLFiltre("prd_idt between 100000 and 100900","order by prd_lib")
I_PRD:SQLXtable("Table1","Ascenseur1","PRD_iDT, PRD_lib"
)
I_PRD:SQLTableAffiche()
Ajoutons également la ligne de code suivante à notre ascenseur:
I_PRD:SQLTableAffiche()
Et pour finir, ajoutons le code suivant à notre table :
I_PRD:XTableGereTouche(_EVE.wparam)
On remarque que le parcours initial ne diffère pas tellement de la méthode précédente hormis l'utilisation de la méthode TableAffiche
.
On remarque aussi l'utilisation de cette méthode TableAffiche
à chaque modification de valeur de notre ascenseur
Pour finir, une nouvelle méthode XtableGereTouche
a été associée à notre table. Cette méthode nous permet de mettre à jour la valeur courante de notre ascenseur en fonction des touches appuyées (haut, bas, ‘page up', ‘page down') puis de réafficher la table.
SQLManagerX, le guide du développeur
Un pdf complet du guide du développeur est à votre disposition ici. Vous y trouverez en détail l’ensembles des différents membres avec leur utilisation ainsi que l’ensemble des méthodes utilisées par SQLManagerX.
Téléchargez ici le guide du développeur en format pdf.
SQLManagerX, le guide de l'utilisateur
Un pdf complet du guide de l’utilisateur est à votre disposition ici. Vous y trouverez toute la documentation nécessaire pour utiliser SQLManagerX à travers l’environnement Windev et les différente SGBD.
Ce guide vous accompagnera que vous soyez totalement novice ou non en Windev et que vous ayez déjà expérimenté ou non SQLManagerX. Vous y découvrirez entre autre les différents accès [alter]natifs et comment les utiliser afin d’accéder à vos données sans utiliser de SQL.
Téléchargez ici le guide de l’utilisateur en format pdf.
Projet d'exemple sous WinDev 12
Ce projet vous montre un exemple de développement avec SQLManagerX.
Il y a deux fenêtres modèles qui permettent de créer les nouvelles fenêtre (
Ce projet est fonctionnel et vous permet de voir comment le code est exécuté.
Par exemple sur la fenêtre w_client_table
, vous pouvez très facilement ajouter un champ de recherche. Il suffit de créer un nouveau champ, de le nommer correctement (charte de programmation) et de lancer le programme pour que la table s'alimente avec un filtre sur ce champ.
Téléchargez ici le projet d’exemple.