Vous êtes sur la page 1sur 17

4.

Prsentation dun accs [alter]natif

Accs [Alter]natifs

PHP4WD
Prise en main
Rappels
Revue du package

Version 2.0.3
Dcembre 2005
SQLManagerX Team
Firetox@SQLmanagerX.com

4. Prsentation dun accs [alter]natif

Accs [Alter]natifs

1. Sommaire
1.

SOMMAIRE ............................................................................................................................................................. 2

2.

RAPPELS .................................................................................................................................................................. 3
2.1.

3.

COMMENT LIRE CE DOCUMENT..................................................................................................................... 4


3.1.
3.2.

4.

RAPPEL GENERAL ................................................................................................................................................ 3

RAPPELS TYPOGRAPHIQUES ................................................................................................................................ 4


JE NE CONNAIS PAS WINDEV DEPUIS LONGTEMPS ............................................................................................... 4

PRESENTATION DUN ACCES [ALTER]NATIF.............................................................................................. 5


4.1. RAPPEL : LES METHODES EXISTANTES STANDARDISEES ...................................................................................... 5
4.2. METHODES POUR WINDEV (INSPIREES DE LA DOCUMENTATION) ........................................................................ 6
Accs une base de donnes HyperFile (diffusion libre et gratuite avec vos applications WinDev) ........................ 6
Accs par un driver ODBC direct............................................................................................................................... 6
Accs ODBC via le provider OLE DB ........................................................................................................................ 6
Accs par un provider OLE DB .................................................................................................................................. 6
Accs par un accs natif : Accs natif Oracle, SQL Server, AS/400, ......................................................................... 6
4.3. LACCES [ALTER]NATIF ....................................................................................................................................... 7
4.4. PRESENTATION DU PACKAGE LIVRE POUR UN ACCES ........................................................................................... 8
4.5. COMMENT LINTEGRER DANS UN PROJET EXISTANT ............................................................................................ 9
Partie technique.......................................................................................................................................................... 9
Partie dveloppement ................................................................................................................................................. 9
4.6. FONCTIONNEMENT DE PHP4WD....................................................................................................................... 11
Rappels du besoin ..................................................................................................................................................... 11
Architecture propose............................................................................................................................................... 11
Un petit exemple ....................................................................................................................................................... 14
4.7. PUIS-JE UTILISER LES ACCES (SOUS LICENCE WD-LIBRE) DANS UN SOFT COMMERCIAL ? DOIS-JE RETRIBUER
L'AUTEUR ? .................................................................................................................................................................... 15
4.8. CONCERNANT LES DLL, OU VAUT-IL MIEUX LES PLACER ?................................................................................. 15
4.9. LA GRANDE QUESTION : QUELLE BASE POUR MON PROJET ? .............................................................................. 15
4.10.
POURQUOI UTILISEZ-VOUS DES TABLES MEMOIRES ?..................................................................................... 15
4.11.
JUTILISE REGULIEREMENT WDMAP, MAINTENANT JE FAIS COMMENT ? ...................................................... 16
4.12.
POURQUOI TOUTES LES METHODES DISPONIBLES COMMENCENT-ELLES PAR MYSQL ?................................. 16
4.13.
ACCES NATIFS : QUELS SONT LES NUMEROS DE REQUETES PERMIS?.............................................................. 16
4.14.
ACCES NATIFS : POURQUOI DOIS-JE FAIRE MYSQLFERME(X)? ...................................................................... 16
4.15.
Y-A-T-IL COMPATIBILITE ASCENDANTE ENTRE LES VERSIONS SUCCESSIVES DES ACCES NATIFS ? ................. 17

4. Prsentation dun accs [alter]natif

Accs [Alter]natifs

2. Rappels
2.1.

Rappel gnral

WinDev, WebDev, WinDev Mobile et HyperFile sont des marques dposes par PCSoft. La
documentation ici prsente na aucun lien direct ou indirect avec cette socit.

4. Prsentation dun accs [alter]natif

Accs [Alter]natifs

3. Comment lire ce document


Tout dpend de ce que vous devez faire. Nous avons recens ci dessous les principaux cas de figure.
Nanmoins, nous partons du principe que vous avez un minimum de bagages informatiques.

3.1.

Rappels Typographiques
Cette icne annonce une information ou un rappel. La teneur de ce point est
prsente en italique.
Cette icne annonce un point important. La teneur de ce point important est
prsente en italique.
CETTE ICONE ANNONCE UN EXEMPLE DE CODE SOURCE.
MAJUSCULES.

3.2.

CE CODE EST PRESENTE EN PETITES

Je ne connais pas WinDev depuis longtemps

Dans votre cas il sera parfois difficile de suivre ce document. Certains aspects (utilisation des
classes, hritage, utilisation de DLL) vont vous paratre bien compliqus. Nous vous conseillons de
bien lire la documentation sur ces points avant de suivre ce guide.

4. Prsentation dun accs [alter]natif

Accs [Alter]natifs

4. Prsentation dun accs [alter]natif


4.1.

Rappel : les mthodes existantes standardises

Il existe diffrentes mthodes pour accder une base de donnes tierce (entendons par tierce tout
autre SGBD (Systme de Gestion de Bases de Donnes) que HyperFile) au travers dune
application WinDev :
ODBC (Open Database Connectivity) fournit une interface API (Application Program Interface
- Interface de programmation) que diffrents diteurs de bases de donnes implmentent par
l'intermdiaire de pilotes ODBC spcifiques un systme SGBD particulier. Votre application
utilise cette API pour appeler le gestionnaire de pilotes ODBC, qui transmet les appels au pilote
appropri. Le pilote, son tour, interagit avec le SGBD par l'intermdiaire de SQL.
DAO (Data Access Objects) utilise le moteur de bases de donnes Microsoft Jet pour fournir un
ensemble d'objets d'accs aux donnes. Il est optimis autour du moteur de bases de donnes
Microsoft Jet (Access !).
OLE DB (Object Linking and Embeding DataBases) est une api COM qui permet un accs
unifi toutes sortes de sources de donnes. Des fournisseurs OLE DB existent pour la plupart des
serveurs de bases de donnes, Active Directory, les feuilles de calcul Excel, les fichiers XML ou les
fichiers texte (.txt ou .csv).
ADO (ActiveX Data Object) est un composant ActiveX permettant d'accder aux bases de
donnes de faon beaucoup plus facile que les mthodes prcdentes sans se soucier de tout ce qui
est allocation des environnements de travail (cf. programmation avec la couche basse d'ODBC).
ADO fournit des objets (les principaux sont Connection, Command et Recordset) qui permettent de
se connecter une base et de raliser des requtes SQL (Structured Query Language langage
structur de requte) sur cette base.
Mais quel est le lien entre toutes ces mthodes
daccs :
ODBC a t avant tout conue par Microsoft
pour rpondre aux besoins des programmeurs
C/C++.
Microsoft introduit RDO pour faciliter le
travail des programmeurs en Visual Basic (RDO
se base sur lODBC).
Microsoft introduit DAO pour accder
Access en pleine volution.
Microsoft unifie tout cela et dveloppe OLEDB mais son exploitation est particulirement
difficile aussi bien en C++ quen VB.
Microsoft met alors au point ADO et tout
rcemment ADO.net

Figure 1: Historique

4. Prsentation dun accs [alter]natif

4.2.

Accs [Alter]natifs

Mthodes pour WinDev (inspires de la documentation)

WinDev propose diffrents modes d'excution des requtes SQL en fonction du type d'accs
effectu la base de donnes.
Accs une base de donnes HyperFile (diffusion libre et gratuite avec vos applications
WinDev)
Aucune contrainte d'installation.
Les fonctions SQL et HyperFile (HLitxxx, ...) peuvent tre utilises avec ce type d'accs.
Accs par un driver ODBC direct
Les caractristiques de la connexion la base de donnes doivent tre dfinies dans l'administrateur
ODBC de Windows. Seules les fonctions de type SQL sont utilisables pour ce type d'accs. Les
fonctions HyperFile (HLitxxx, ...) ne sont pas utilisables.
Accs ODBC via le provider OLE DB
Ce type d'accs utilise un provider OLE DB spcifique. Ce type d'accs est dconseill car plus lent
qu'un accs par un driver ODBC. En effet, les performances sont moins bonnes que par un driver
ODBC direct car l'accs se fait la fois par le driver ODBC et par le provider OLE DB.
Les fonctions HyperFile (HLitxxx, ...) et SQL peuvent tre utilises avec ce type d'accs.
Il est ncessaire de dfinir les caractristiques de la connexion la base de donnes dans
l'administrateur ODBC de Windows. Le provider ainsi que le MDAC 2.6 (ou suprieur) doivent
tre installs sur le poste.
Accs par un provider OLE DB
Ce type d'accs utilise un provider OLE DB. Le provider ainsi que le MDAC 2.6 (ou suprieur)
doivent tre installs sur le poste.
Les fonctions SQL et HyperFile (HLitxxx, ...) peuvent tre utilises avec ce type d'accs.
Accs par un accs natif : Accs natif Oracle, SQL Server, AS/400, ...
Pour chaque type d'accs natif, il est ncessaire de possder un module complmentaire (et payant
sauf pour MySQL NDLR) WinDev. Il permet d'accder la base sans drivers externes depuis un
programme en W-Langage.
L'accs est direct sur base sans passer par une couche intermdiaire : MDAC inutile, OLE DB
inutile, ODBC inutile. Seule installation ncessaire : la couche client sur le poste de l'utilisateur.
La structure de la base peut tre rcupre dans lanalyse WinDev.
Le RAD permet de gnrer du code avec les fonctions Hxxx (HLitSuivant, ...) ou SQLxxx.

4. Prsentation dun accs [alter]natif

Accs [Alter]natifs

Loutil visionneur de donnes (WDMAP) est utilisable sur la base de donnes.


Les fonctions SQL et HyperFile (HLitxxx, ) peuvent tre utilises avec ce type d'accs. Ce type
d'accs est plus rapide que les accs par ODBC ou par un provider OLE DB.

4.3.

Laccs [alter]natif

Un accs [alter]natif sappuie sur les accs bas niveau fournis par lditeur du SGBD accd (pas de
couches intermdiaires utilises).
Les accs bas niveau plus communment appels API sont fournis bien souvent par un jeu de
fichiers crits en C (par exemple OCI, Oracle Call Interface pour Oracle, DBLIB pour SQL Server,
Jet pour Access). Nous devons avoir un lien entre ces API et notre application WinDev. Pour se
faire, une dll (Dynamic Link Library - Bibliothque de Liens Dynamique) est llment le plus
simple mettre en uvre. On se base donc sur les API pour crer une dll laide dun logiciel
spcifique (entre autre : Dev-Cpp1, Visual Studio, Borland C++) tout en rpondant nos besoins
fonctionnels (se connecter la base, effectuer des ordres SQL,). Lutilisation dune dll prsente
un double intrt :

Une dll est plus facilement exploitable par WinDev (ou tout autre application Windows)

Une dll est plus facilement intgrable dans un projet WinDev

Pour terminer une classe WinDev encapsule les diffrents appels la dll pour faciliter le
dveloppement.
Le tout permet :

Une faible consommation de ressource mmoire et CPU avec une seule dll charge.

Une intgration dans votre projet facilite.

Un mode de programmation facile matriser.

Une gnration de type RAD ( venir) grce aux fichiers MDL et MDE de WinDev.

Le tout ne permet pas :

De rcuprer la structure des tables dans une analyse WinDev.

Dutiliser WDMap car lanalyse est inexistante (voir la FAQ Jutilise rgulirement WDMap,
maintenant je fais comment ? page 15).
1

Gratuit, les deux autres payants

4. Prsentation dun accs [alter]natif

Accs [Alter]natifs

4.4.

Prsentation du package livr pour un accs

Le package livr a souvent une arborescence type :


-

La racine contient gnralement 2 fichiers :

: trace de toutes le versionning de laccs

: reprend la licence WD-Libre

dll contient les sources de la dll. Leur mise en forme peut


varier en fonction de loutil utilis pour gnrer la DLL (Devcpp, VC++, Borland C++)

Windev7 contient un projet type.


Par dfaut, le projet exemple fourni utilise la base de donnes cre par dfaut avec
votre SGBD.

4. Prsentation dun accs [alter]natif

4.5.

Accs [Alter]natifs

Comment lintgrer dans un projet existant

Partie technique
Pour utiliser laccs que vous venez de rcuprer, vous avez besoin de :
Copier la DLL prsente dans le rpertoire Windev7/Exe du projet type dans le rpertoire Exe de
votre projet,
Copier la classe prsente dans le rpertoire Windev7 dans le rpertoire hbergeant les classes de
votre projet. Certaines classes utilisent la classe gnrique c_log4WD.wdc (Celle-ci permet de tracer
les ordres envoys la base), il est ncessaire de la copier aussi.
Vous avez donc maintenant les fichiers ncessaires au bon fonctionnement de laccs. Il faut
maintenant importer la (ou les) classe(s) dans votre projet (clic droit dans le kouglof et importer une
classe).
Par soucis de vrification immdiate, une compilation totale du projet apparat
intressante.
La DLL de laccs devra tre livre dans le package de linstallation destination
de lutilisateur final.
Partie dveloppement
Pour pouvoir exploiter laccs, il faut ouvrir une connexion la base de donnes. Ensuite, vous
pouvez vous baser sur les nombreux exemples fournis dans le projet type pour commencer vos
dveloppements.

4. Prsentation dun accs [alter]natif

Accs [Alter]natifs

Les exemples fournis ci-dessous sont lis laccs Oracle4WD. Ils seront repris et expliqus en
dtail dans les pages suivantes.
Dclaration :
// Instance de la classe accs natif
MonOracle est c_Oracle4WD

Connexion :
//Gre la connexion la base Oracle avec comme paramtre la chane
//de connexion au format user/pwd@base
SI PAS MonOracle:mySQLConnecte("user/pwd@base") ALORS
Info (MonOracle:mySQLErreur+ "/"+MonOracle:mySQLGetErrorMessage())
FIN

Affichage dans une table mmoire :


// Remplir une table mmoire avec une requte
TableSupprimeTout(TABLE1)
// Excution avec ouverture implicite du curseur 0
retCode = MonOracle:mySQLExec("SELECT work_list, lnotes FROM work_list ",0)
SI (retCode =1) ALORS
MonOracle:mySQLTable(0, "TABLE1")
SINON
Info (MonOracle:mySQLErreur+ "/"+MonOracle:mySQLGetErrorMessage())
FIN
// Fermeture du curseur 0
MonOracle:mySQLFerme(0)

Erreur ! Source du renvoi introuvable.. Erreur ! Source du renvoi introuvable.

4.6.

Fonctionnement de PHP4WD

Le but de cet accs est daccder un serveur MySQL chez un hbergeur public sur Internet
au travers du langage PHP. Lide a t lance en 2002 sur le site wdforge (rbesset lpoque).
Notre quipe a dvelopp ce concept simple de prime abord mais demandant des connaissances
PHP en sus.
Rappels du besoin
Les serveurs MySQL des hbergeurs publics ne sont videment pas disponibles directement, par
soucis de scurit ceux-ci bloque le port standard 3306. Ces hbergeurs proposent souvent le couple
PHP/Apache. La page PHP est elle capable d'accder au serveur de donne (HTTP PHP
MySQL).

Figure 2: Constatation avec un serveur MySQL sur le port 3301

Pourquoi ne pas alors utiliser un script PHP qui reoit en paramtre la requte SQL excuter sur le
serveur de donne et retourne le rsultat ? Le PHP s'occupe de la connexion avec le serveur de
donne, excute la requte et peut mme proposer un retour en HTML.

Figure 3: Principe de contournement

Architecture propose

Accs [Alte

Erreur ! Source du renvoi introuvable.. Erreur ! Source du renvoi introuvable.

Figure 4: Principe mis en uvre

Erreur ! Source du renvoi introuvable.. Erreur ! Source du renvoi introuvable.

La classe php4wd envoie la requte crypte par une cl publique et prive au script PHP se trouvant
sur le site Web (chez votre hbergeur).
Le script php4wd.php excute la requte, rcupre le rsultat, crypte celui-ci et le transmet la
classe par HTTP.
La classe lit le rsultat et conserve celui-ci en mmoire (ce que font les dll des accs natifs). Ensuite
la classe php4Wd exploite ce rsultat au mme titre quun autre accs.
La cl publique est celle qui sert pour l'laboration de la cl prive, qui permet le cryptage et le
dcryptage.
Seule la dpose des deux fichiers PHP est ncessaire dans la mise en uvre. Il suffit
de modifier les paramtres de connexion.
On peut donc venir interfacer une application WinDev sur un site WEB existant !
Attention, utilisez vos propres cls. Modifiez les cls dans les fichiers pour vous
assurez un chiffrement personnel.

Erreur ! Source du renvoi introuvable.. Erreur ! Source du renvoi introuvable.

Un petit exemple
monAccess is c_Php4WD()
v_retCode = MonAccess:mySQLConnecte("http://monsite.com/php4wd.php")
IF (v_retCode = false) THEN
Erreur("Impossible de se connecter la base de donne 'test'.",
"Erreur n " + monAccess:mySQLErreur, monAccess:mySQLGetErrorMessage())
END
retCode = monAccess:mySQLExec("SELECT * FROM client", 0)
IF (retCode=1) THEN
monAccess:mySQLPremier(0)
WHILE (NOT monAccess:mySQLEnDehors)
Trace( monAccess:mySQLCol(0,1)+/+monAccess:mySQLCol(0,2))
monAccess:mySQLSuivant(0)
END
ELSE
Erreur("Erreur n " + monAccess:mySQLErreur,
monAccess:mySQLGetErrorMessage())
END
monAccess:mySQLFerme(0)

Etant donn que la classe communique avec la page PHP, et que cest la page PHP
qui communique avec la base de donnes, on remarque que toute base pouvant tre
accde par le PHP le sera aussi par la classe.

Erreur ! Source du renvoi introuvable.. Erreur ! Source du renvoi introuvable.

4.7.
Puis-je utiliser les accs (sous licence WD-Libre) dans un soft
commercial ? Dois-je rtribuer l'auteur ?
Oui, vous pouvez intgrer les diffrentes ressources autour de SQLManagerX dans un produit
mme finalit commerciale. En aucun cas une redevance ne vous sera exige. La seule obligation
morale concerne un remerciement au travers de la fentre A propos de dans votre
application.

4.8.

Concernant les dll, o vaut-il mieux les placer ?

Lorsque lon installe une application, on se demande o placer les dll. Deux possibilits soffrent
nous : dans le rpertoire exe de lapplication, dans le rpertoire system32 du poste client :
Lavantage dans system32 est une non multiplication des dll sur le poste, linconvnient est que
toutes les applications ncessitant cette dll vont utiliser cette dll unique. Tout va bien si toutes les
applications impactes utilisent bien la mme version de la dll sinon de gros problmes apparaissent
(la majorit des cas).
Lavantage dans le rpertoire exe est que lapplication fonctionnera toujours vu son
indpendance vis--vis des autres. Linconvnient comme vous vous en doutez la multiplication
des dll.

4.9.

La grande question : quelle base pour mon projet ?

Plutt que de reprendre une analyse dj effectue, je vous renvoie sur une page de developpez.net :
comparatif ralis par dveloppez.com (http://fadace.developpez.com/sgbdcmp) sur les diffrents
SGBD du march.

4.10.

Pourquoi utilisez-vous des tables mmoires ?

Tout simplement parce que les tables fichier sont directement lies sur un fichier ou une requte
HyperFile. Nous ne pouvons donc pas utiliser cette fonctionnalit.

Erreur ! Source du renvoi introuvable.. Erreur ! Source du renvoi introuvable.

4.11.

Jutilise rgulirement WDMap, maintenant je fais comment ?

Comme HyperFile, tout diteur de SGBD propose une application permettant de consulter et piloter
les donnes contenues en base.
En plus de cela, il existe des produits commerciaux (TOAD pour Oracle, IB-Expert pour
FireBird,), des programmes en open-source (TORA pour Oracle, Sqlyog pour MySQL,) ou
bien encore des outils au travers de page web (le plus connu phpMyAdmin pour MySQL,
IBWebAdmin pour FireBird, SQLiteManager pour SQLite, phpPgAdmin pour PostgreSQL,...).

4.12. Pourquoi toutes les mthodes disponibles commencent-elles


par MySQL ?
Cest tout simplement li un historique. MySQL4WD a t le premier accs [alter]natif cr juste
avant SQLManagerX. Par un souci de compatibilit de nommage des mthodes entre les diffrents
accs (surtout au niveau SQLManagerX), les mthodes ont toutes le mme nom de mthode au
niveau de la classe. Sinon la lgende veut aussi que Rodolphe soit un peu possessif et quil ait
dbut ses mthodes par MySQL pour MonSQL .

4.13.

Accs natifs : Quels sont les numros de requtes permis?

SQLManagerX utilise gnralement le numro de requte 0 (et galement 1 dans SQLedit). Un


nombre limit didentifiant (gnralement 5) de requtes simultanes vous est propos.

4.14.

Accs natifs : Pourquoi dois-je faire MysqlFerme(X)?

A chaque excution dune requte, vous lui affectez un identifiant (Cet identifiant est transparent
avec SQLManagerX). Afin de pouvoir rutiliser cet identifiant, il est ncessaire de fermer la requte
prcdemment ouverte afin de librer les ressources alloues en mmoire pour celle-ci. Dans les
accs [alter]natifs, cela est fait de manire explicite par le dveloppeur avec la commande
MysqlFerme(X).

Erreur ! Source du renvoi introuvable.. Erreur ! Source du renvoi introuvable.

4.15. Y-a-t-il compatibilit ascendante entre les versions successives


des accs natifs ?
Dans la mesure du possible oui. Seule exception est faite si lAPI de lditeur change et nous oblige
ajouter dans paramtre dans les mthodes existantes. Dans tous les cas, une mention spciale vous
est communique lors de la mise disposition de laccs.

Vous aimerez peut-être aussi