Login mot de passe
 
Menu Principal
Soutenir SQLManagerX
Certains nous ont demandés comment nous aider voici un lien pour nous soutenir


SQLManagerX
Dossiers
Accès SQLManagerX
Découvrez



SQLManagerX Pro


Qui est en ligne
4 utilisateur(s) en ligne (dont 1 sur FAQ)

Membre(s): 0
Invité(s): 4

plus...
Partenaires

http://www.TeeCod.fr
TeeCod


http://www.microsystem.fr
Microsystem


http://www.dag-system.fr/?lang=fr#
DAG SYSTEM


FAQ

FAQ (Foire aux questions)

Principale »» SQLManagerX

Table des matières


Demarrer en SQLManagerX



ETAPE 1

premiere chose a faire avoir une base de données sur un serveur , pour cela vous pouvez soit la creer (ou meme si elle existe deja vous pouvez passer a l'etape 2), soit utiliser le convertisseur (voir SQLManagerX Data Center).





ETAPE 2 votre base existe maintenant. il vous faut les classes de manipulation des tables pour pouvoir les liée a SQLManagerX. la aussi 2 solutions : soit faire vos classe à la main soit utilisez le SQLManagerX Data Center / outils / generation des classes qui va vous permettre de creer des fichier texte de vos classe. reste plus qu' a les integrer dans windev et copier les declaration et construteur present dans les fichiers Txt






•  Premiere utilisation de SQLManagerX


•  Premier Projet


Comme premier projet, nous allons simplement créer un ensemble de fenêtres tel que le ferai le RAD sur pour un fichier HyperFile
Comme pour tout projet WinDev 7.5, nous allons le créer à partir de l'AGL. Pour cela faites Fichier/Nouveau et choisissez nouveau projet.


Saisissez SQLMX_1 comme nom de projet


Prenez soin de bien sélectionner « Aucune analyse » puis cliquez sur Terminer.


Vous avez donc créé votre projet. Nous allons maintenant l'enrichir des composants logiciels livrés avec SQLManagerX.

•  Arborescence projet


Création des répertoires


Pour plus de facilité nous allons créer une arborescence type. Nous vous conseillons vivement de la reprendre dans vos futurs projets.










Actuellement l'arborescence des votre projet est la suivante
Faites le nécessaire pour avoir l'arborescence ci contre :
•  classes contiendra toutes les classes du projet •  classes_acces contiendra toutes les classes liées aux objets d'accès aux tables par SQLManagerX
•  Etats contiendra tous les états
•  Fenetres , les fenêtres
•  Scripts contiendra tous les scripts SQL utilisés dans le cadre de votre développement (script de création de la base, code des classes si vous passez par SQMX-Outils, script des requêtes SQL).

Copie des fichiers nécessaires


Pour fonctionner avec SQLManagerX, votre projet à besoin des classes et des différents éléments liés à chaque accès natifs.
Dans le répertoire Exe du projet il faudrait les fichiers DLL suivants :






























•  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

•  rtl60.bpl
Dll d'interface entre la base SQLite et la c_SQLite4WD.wdc

Ressource Borland c++ nécessaire à la dll SQLite4wd.dll



disponible dans l'accès SQLite4WD






Par exemple pour exploiter SQLManagerX avec une base Mysql prévoir l'utilisation des dll libmySQL.dll et mysql4WD.dll.


Dans le répertoire classes nous allons copier les fichiers suivants :





































•  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

Intégration des éléments dans le projet


Intégrer les classes nécessaires dans votre projet par la méthode que vous préférez. Par exemple pour Mysql : prévoir c_log4wd.wdc, c_mysql4wd.wdc, SQLmanagerx.wdc.
Refaites une compilation pour valider le tout.

•  Création du code d'initialisation du projet


Copiez ces quelques lignes dans le code d'initialisation de votre 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

// A faire avant toute chose (la déclaration des classes entre autre)
SI PAS convSql:mySQLConnecte(BaseHost,BaseUser,BasePasswd,BaseDB) ALORS

Info("Pas de connexion SQL: "+convSql:mySQLGetErrorMessage())

FinProgramme()

FIN
convSql:mySQLDebugMode = Vrai // activation du mode debug

// Déclaration des classes d'accès à la base

Explications : nous avons créé 4 variables pour pouvoir se connecter à la base MySQL






Pour une connexion à une autre base, il sera opportun de créer les variables utiles.


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.





Très utile en phase de développement, il ne faut pas oublier de le désactiver avant déploiement chez le client.


•  Création de la classe d'accès villes


Création de la classe


Il existe 2 possibilités pour créer votre classe : soit en passant par l'outil SQMX-Outils soit en la créant de toute pièce. C'est cette seconde méthode que nous allons exposer ici.
Il faut tout d'abord créer une classe c_villes.







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 c_ nomdelatable pour nommer la classe. Cette notion est primordiale car elle sera reprise dans l'appel du constructeur ci dessous (variable p_prefixeClasse)



Remarquez le m_ pour nommer chacun des membres de la classes. Cette notion est primordiale car elle sera reprise dans l'appel du constructeur ci dessous (variable p_prefixeMembre)






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)






Ne pas oublier de sauvegarder votre classe dans le répertoire classes_acces en non dans le répertoire racine de votre projet.


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")



Explication :

I_VILLES est notre instance de la classe C_VILLES (objets disponible dans le TreeView des objets du projet).

Lors de son instanciation, I_VILLES va utiliser la connexion principale (définie explicitement dans le code du projet) d'accès à MySQL convSql . Le nom de la table accédée en base est «  villes » et on rappelle à l'objet SQLManagerX que le nom de notre instance est I_VILLES.






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 toujours utiliser les minuscules afin de pouvoir passer d'un système Unix à Windows et inversement)


•  Création de notre première fenêtre en mode Fiche


Création de la fenêtre


Créez une fenêtre vierge avec 3 champs
•  un champ de saisie Commune , de type texte sur … caractères

•  un champ de saisie CodeP , de type texte sur … caractères

•  un champ de saisie Zone , de type numérique de type numérique sur 4 octets



Vous devriez avoir quelque chose comme çà :

Enregistrez là dans le sous répertoire Fenêtre en tant que Fiche Villes.wdw

Ajoutez un bouton Fermer pour plus de facilité.

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")

On met 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, nous n'aurions pas ce problème mais nous vous conseillons d'utiliser toujours ce mode de programmation.



Pourquoi ? Une petite explication s'impose. 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 cela que je conseille de toujours passer en paramètre le nom de la fenêtre.

Insertion des boutons mode parcours


Créez 4 boutons de parcours avec les codes associés

Premier : se positionner sur le premier enregistrement.






I_Villes:SQLPremier()
I_Villes:SQLTableVersEcran("Fiche Villes")

Précédent : se positionner sur l'enregistrement précédent.





I_Villes:SQLPrecedent()
I_Villes:SQLTableVersEcran("Fiche Villes")

Suivant : se positionner sur l'enregistrement suivant.





I_Villes :SQLSuivant()
I_Villes:SQLTableVersEcran("Fiche Villes")

Dernier : se positionner sur le dernier enregistrement.





I_Villes:SQLDernier()
I_Villes:SQLTableVersEcran("Fiche Villes")

Vous devriez maintenant avoir :


Lancer un GO du projet et tester le parcours de la table.

Insertion des boutons nouveau, modifier, supprimer


Créez 3 boutons avec les codes associés

Nouveau :










I_Villes:SQLEcranVersTable("Fiche Villes")
I_Villes:SQLInsert("Fiche Villes")

La méthode SQLEcranVersTable permet de transférer les données dans les champs de la fenêtre dans les membres de votre objet.
La méthode SQLInsert permet de transférer les valeurs des membres de votre objet dans la base de données.

Modifier :









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. En effet seules les valeurs modifiées sont transférées dans l'ordre update à la base de données.

Supprimer :





I_Villes:SQLDelete("Fiche Villes")

Lancer un GO du projet et tester les nouvelles actions proposées.

•  Création de notre première fenêtre en mode Table


Création de la table + alimentation en mode fetch global


•  Créez une fenêtre Vierge. Insérez un bouton Fermer avec le code associé.

•  Créez une table mémoire Table1 avec 2 colonnes (une colonne numérique, une colonne texte). Nous n'allons pas définir de code associé à cette table.

•  Créez un bouton avec le code associé






I_PRD:SQLFiltre("prd_idt between 100800 and 100900","order by prd_lib")
I_PRD:SQLCtable("Table1","prd_idt, prd_lib")

On remarque dans notre exemple que nous avons appliquer un filtre pour ne prendre en compte que les produits dont l'identifiant est contenu dans l'intervalle [100800, 100900].
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.










On doit nommer toutes les colonnes retournées par la requête. Le symbole * (généralement utilisé pour récupérer toutes les colonnes dans une requête SQL) n'est pas autorisé.

L'intérêt de cette méthode au contraire de la suivante est l'utilisation des loupes et tris dans la table.


Création de la table + alimentation en mode fetch partiel


L'inconvénient de la méthode précédente concerne son mode de fonctionnement intrinsèque : Toutes les lignes de la requête seront chargées en mémoire : le traitement peut être lent si la requête renvoie beaucoup de lignes. Pour palier à cela, SQLManagerX propose une méthode dite à fetch partiel. Le nombre de lignes ramené par la méthode est égal au nombre de lignes dans votre table.
•  Créez une fenêtre Vierge. Insérez un bouton Fermer avec le code associé.

•  Créez une table mémoire Table1 avec 2 colonnes (une colonne numérique, une colonne texte).

•  Créez un ascenseur Ascenseur1. Mettez le un peu en forme pour qu'il ait la même hauteur que votre table et qu'il soit collé à elle à la droite de celle-ci.

•  Créez un bouton avec le code associé






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()

•  Ajoutez le code suivant à l'ascenseur






I_PRD:SQLTableAffiche()

•  Ajoutez le code suivant à notre table






I_PRD:XTableGereTouche(_EVE.wparam)

Explications : 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.

Ensuite, on remarque l'utilisation de cette méthode à chaque modification de valeur de notre ascenseur (Ascenseur1) : normal car c'est le fonctionnement normal d'un ascenseur dans une table, celui-ci permet le parcours dans la table.

Pour finir une nouvelle méthode XtableGereTouche qui nous permet de mettre à jour la valeur courante de notre ascenseur en fonction des touches appuyées (haut, bas, ‘page up', ‘page down') puis réaffiche la table.

•  Les éléments utiles


La gestion des filtres. Quelle méthode utiliser ?


Nous avons vu que nous pouvions déclarer un filtre tout simplement à l'aide de la méthode SQLFiltre. Le premier paramètre correspond à la future clause de restriction sans le mot clé WHERE, le second 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("","").






On pourrait tout simplement utiliser la méthode sans aucun paramètre : SQLFiltre().


La méthode DesactiveFiltre() désactive temporairement le filtre créé précédemment. La méthode ActiveFiltre() quant à elle le réactive.

Utilisation d'une combo








I_USERS:SQLchargeCombo("SELLOG","select Login, concat(Login,' >>',NomUser, ' ', PrenomUser) from users", "")
Tutoriel MySQL
Téléchargement

Choisir la version Community ou Entreprise
http://dev.mysql.com/downloads/mysql/5.0.html

Notice

http://dev.mysql.com/doc/refman/5.0/fr/index.html
Utiliser IE à la place de FireFox car le clic sur la page précédente ne marche pas très bien (au lieu de revenir au lien précédent, on revient sur le sommaire…)

Installation version 5

Client Graphique gratuits

Perso, j’utilise le EMS MySQL Manager
http://sqlmanager.net/fr/products/mysql/manager
http://www.webyog.com/en/
http://mysql-turbo-manager-free-edition.mentat-technologies.qarchive.org/

Sauvegarder
cmd = """mysqldump.exe"" -u root –pmy_pwd --opt ma_base --compress -h localhost > """ + rep + "\backup_ma_base.sql"""
fSauveTexte("backup.bat", cmd)
LanceAppli("backup.bat", exeActif, Oui)
Multitâche(1)
fSupprime("backup.bat")


Restaurer (selon ma méthode)
// 1 – drop la base
// fichier texte a executer
cmd = "drop database ma_base;" + RC + "create database ma_base;"
fSauveTexte("drop_ma_base.sql", cmd)
// shell
cmd = "mysql -u root –pmy_pwd < drop_ma_base.sql"
fSauveTexte("drop_ma_base.bat", cmd)
LanceAppli("drop_ma_base.bat", exeActif, Oui)
Multitâche(1)
fSupprime("drop_ma_base.bat") ; fSupprime("drop_ma_base.sql")
// 2 - restauration
Cmd = "mysql -u root –pmy_pwd -h localhost -D ma_base < """ + rep + "backup_ma_base.sql"""
fSauveTexte("restaure_ma_base.bat", cmd)
LanceAppli("restaure_ma_base.bat", exeActif, Oui)
Multitâche(1)
fSupprime("restaure_ma_base.bat") ; fSupprime("backup_ma_base.sql")


Modification de la base
// 1 – création du fichier de cmd : cmd.sql par ex
// ne pas oublier le point virgule sur chaque ligne !!!
cmd = "alter table …;" + RC + "drop table…;"
fSauveTexte("cmd.sql", cmd)
// shell
cmd = "mysql -u root –pmy_pwd < cmd.sql"
fSauveTexte("modif_base.bat", cmd)
LanceAppli("modif_base.bat", exeActif, Oui)
Multitâche(1)
fSupprime("modif_base.bat") ; fSupprime("cmd.sql")


merci a JP pour ce tutoriel


 
Les commentaires appartiennent à leurs auteurs. Nous ne sommes pas responsables de leur contenu.
Copyright: © 2004 By SQLManagerX
WinDev©, WebDev© et HyperFile© sont des marques déposées par PCSoft.
By Firetox
IMAGO:THEMES Theme Design by IMAGO DESIGN CORP.