Retour
Accueil
CrossLoop
Revenir en haut de la page
Attaquer les données VFP (DBF) dans Windev/Webdev
WINDEV et les données VFP
Introduction.
Pour les développeurs
WINDEV
devant utiliser les tables au format
Visual FOX PRO
, il existe plusieurs solutions .
Laccès natif aux fichiers xBase.
Daprès la documentation (page
336
pour
WINDEV 17
), laccès natif
XBASE
permet dattaquer les tables
FOX
. Le détail concernant les possibilités de tables
VFP
et
CDX
est indiqué au paragraphe
1.2.4
page
337
. Il est indiqué que les index
CDX
sont supportés, ce qui est vrai, mais par contre, il nest pas indiqué que ceci fonctionne avec le pilote
OLEDB
.
Un petit peu plus de clarté aurait été parfait
La condition daccès avec laccès natif est de ne pas utiliser les index (de toute manière, les index
CDX
ne sont pas supportés).
Pour les requêtes, en utilisant ce type daccès, jai systématiquement un plantage.
En utilisant la liaison de données avec les champs, tout fonctionne. Les temps daccès sont relativement acceptables pour des tailles moyennes
.
Les index nétant pas supportés, je nai pas testé les fonctions du type
HLIT
.
Ma conclusion
: limpossibilité dutiliser des index et des requêtes fait quil vaut mieux passer son chemin avec ce type daccès, même pour consulter les données.
Laccès OLEDB en utilisant les MDAC et le pilote VFP OLEDB.
Cet accès nécessite linstallation du
MDAC
de
MICROSOFT
(proposé automatiquement par
WINDEV
), qui est un des nombreux avatars de laccès universel aux données de
MICROSOFT
.
En principe, la couche
MDAC
est installée sur les
PC
sous
XP
,
VISTA
et
SEVEN
. Attention, dans certains cas, linstallation pose quelques problèmes selon
MICROSOFT
: dans le cas où lon veut installer une version plus récente que celle par défaut.
Il faut aussi que le pilote
OLEDB
de
VFP
soit installé. Il suffit daller à ladresse suivante :
<http://www.microsoft.com/download/en/details.aspx?id=14839>
Le principal avantage est de pouvoir travailler avec lIntelliSense et de ne pas avoir à chercher le nom des champs.
Son utilisation est intéressante car elle permet dutiliser soit des tables indépendantes, soit des conteneurs bases de données.
Pour changer le répertoire des données, la fonction
WINDEV HCHANGEREP
fonctionne parfaitement, ce qui est plutôt une bonne nouvelle.
Au niveau des index et en mode daccès classique avec les fonctions du type
HLITRECHERCHE
, cela fonctionne, à la condition de trouver une valeur. Sinon, cest une erreur fatale qui est générée. La solution que jai trouvée est de faire un traitement dexception locale, et là pas de problème.
Il est toutefois conseillé de ne travailler que sur les index de type texte, la programmation étant beaucoup plus simple. Pour les index de type numérique ou composé, il faut privilégier les requêtes.
Les requêtes fonctionnent très bien, à la condition de ne pas charger trop de données à la fois, les limitations du pilote
OLEDB
étant les mêmes que pour tous les pilotes
OLEDB
du marché.
Pour un accès direct de la table sans passer par une requête, cela fonctionne très bien. Jai effectué des tests sur une table client de
50 MO
comportant
25 000 lignes
, et les temps de réponse sont supportables, même en réseau.
Pour des tables de taille beaucoup plus importante, il vaut mieux passer son chemin, un simple comptage du nombre de lignes avec la fonction
HNBENR
tourne vite au cauchemar, aussi bien en local que sur un réseau.
Ma conclusion
: ici encore, il vaut mieux utiliser cette possibilité comme une solution de dépannage, quitte à migrer définitivement les données au format
HYPERFILESQ
.
Laccès en programmant avec les fonctions WINDEV.
Ceci peut se faire en décrivant la structure des tables en utilisant les fonctions dédiées.
Ceci fonctionne parfaitement bien, à part louverture des index avec la fonction
HDBDecritIndex(),
qui renvoie systématiquement un message derreur.
Voici un exemple de code :
HDBDécritFichier
(
"CLIENTS"
,
"CL"
,
"G:\Win-Moenner\data_quimper\REFCLI01.DBF"
)
HDBDécritRubrique
(
"NOM,C,30"
)
HDBDécritRubrique
(
"PRENOM,C,30"
)
b
Val
=
HDBOuvre
(
"CLIENTS"
,
"CL"
,
"G:\Win-Moenner\data_quimper\REFCLI01.DBF"
)
HLitPremier
(
"CL"
)
TANTQUE PAS
HEnDehors
(
"CL"
)
WL.Trace( i + "----------------->" + NumériqueVersChaîne(i) + CL.NOM
HLitSuivant
(
"CL"
)
FIN
Les temps daccès sont très corrects, mais il y a un problème avec les champs logiques, qui sont reconnus de manière aléatoire (par ailleurs signalé dans la documentation).
Jai fait un essai de lecture pour un client avec une table de
4 500 00 enregistrements
et dune taille de près de
2 GO
, et les temps daccès sont très corrects.
Jai réussi sans problème à écrire dans la table
VFP
en utilisant la fonction
HMODIFIE
.
Ma conclusion
: cette possibilité est à utiliser dans le cas dune mise à jour dune table
VFP
à partir dune table
WINDEV
. Les performances sont correctes, mais le problème lié aux champs de type logique pose pas mal de difficultsé. De même, les index nétant pas supportés, la simple sélection de lignes devient vite problématique.
Laccès avec un composant COM.
Il sagit dune autre piste, complexe à mettre en uvre, mais qui donne de très bons résultats.
VFP
permet de créer des composants
COM
, en créant une
DLL OLE
à partir dune classe.
Dans
WINDEV
, il est possible dappeler un composant
COM
, un exemple pilotant les applications
MICROSOFT
OFFICE
montre comment faire.
La difficulté de développer un composant (sous
VFP
)
COM
étant de composer avec l
UAC
de
WINDOWS
, ce qui nécessite de développer en mode déconnecté de tout réseau pour des raisons de sécurité.
Dautre part, linstallation dun composant
COM
nest pas une partie de plaisir, mais par contre est possible sous
SEVEN 64
.
Dans tous les cas, on bénéficie de la puissance du moteur
VFP
, mais par contre la liaison de données devient impossible dans
WINDEV
.
Lautre problème important est lavenir de cette technologie.
Ma conclusion
: cette possibilité est a utiliser dans des cas très particuliesr, sur des liaisons de tables complexe par exemple.
Conclusions.
Pour intégrer des tables
VFP
dans une application
WINDEV
, la seule solution vraiment pratique est dutiliser
OLEDB
. Parc contre, les tables ne doivent pas être trop volumineuses. Par exemple, si un fichier client est parfaitement exploitable, une table contenant de nombreuses factures et lignes de factures ne peut poser que des problèmes.
Tant quil sagit de petites tables, tout est facile, pour les autres, il est temps de migrer
Marc MIRVILLE, modifié le 12/12/2011
.