Partie 2/2
Dans le premier article, j'ai expliqué comment
établir une connexion sur une base MySQL à l'aide
de DBExpress. Malheureusement si la connexion est simple le résultat
est unidirectionnel. Ce n'est pas une fatalité, voici déjà
deux façons d'obtenir un résultat plus conventionnel.
Utilisation du composant TSQLClientDataSet
Il est sur la palette DBExpress, très simple à l'utilisation,
il faut juste référencer le TSQLConnection dans la propriété DBConnection.
La commande SQL est a inscrire dans la propriété CommandText. C'est
tout !
Les tests sur ma petite base MySQL semble montrer
que cela fonctionne. Finalement, c'est simple et efficace c'est
la méthode la plus directe pour obtenir un ensemble de données qui
soit "navigable" . Les test avec un TDBNavigator ou TDBGrid s'avèrent
très satisfaisants. Il faut noter que l'aide indique que les relations
maîtres/détails ne sont pas très conseillées.
Utilisation du composant TDataSetProvider
Sur la Palette DataAccess, notre bon vieux TDataSource
est toujours là, mais il est maintenant accompagné d'un TDataSetProvider
et d'un TClientDataSet. Ces deux composants permettent apparemment
d'utiliser diverses sources de données, pas seulement des bases
de données mais aussi une source XML ou des Dataset de la palette
ADO ou encore Interbase, et d'effectuer la liaison avec un TDataSource.
Il est donc possible de visualiser différentes source de données
comme une base et de les manipuler de la même façon, Insert, Delete
etc.. Dans le cas d'un résultat de requête unidirectionnel il est
est possible d'utiliser ces composants pour contourner cet état.
L'utilisation et la maîtrise de cet aspect est plus complexe, le
DataSet Provider se charge d'établir la liaison et de maintenir
une "bulle" de données dans un "cache".
Cette vue montre le fonctionnement de la liaison à
ma table MySQL. En partant du haut le premier composant SQLConnection
établit la liaison avec le serveur MySQL. SQLQuery par le biais
d'une requête, me retourne un ensemble données unidirectionnel,
non navigable donc. C'est là qu'intervient le DataSetProvider qui
récupère l'ensemble de donnée fournit par le SQLQuery et le met
en cache. Dans cette utilisation, le composant ClientDataSet1 ne
permet pas l'utilisation de sa propriété CommandText, car il reprends
la commande SQL du SQLQUery mais se fournit en données auprès du
DataSetProviser. Cet ensemble de données navigable et modifiable,
est distribué par le DataSource traditionnel que nous connaissons
tous. Une remarque il s'agit donc d'un ensemble de données mis cache
par le DataSetProvider, cette particularité autorise une grande
souplesse d'utilisation. Les modifications auront besoin d'être
validé, pour être reportées dans la base de données, ce tampon permet
de simuler une transaction, pour une base de données qui ne possèderait
pas cette fonctionnalité. De plus le ClientDataSet possède une propriété
PacketsRecords qui permet de spécifié le volume de données qui doit
être manipulé à chaque fois. Encore une fois cette fois façon de
procéder reste compatible Kylix, c'est vraiment le coté primordial
de DBExpress.
Conclusion
DBExpress est puissant , mais il est plus complexe
qu’un acces direct à l'aide de composant spécifiques ou à travers
le BDE, mais sa souplesse, et son portabilité vers Kylix mérite
les petits efforts d'accoutumance qu'il demande. Delphi 6 est confortable
et rapide, plus on s'en sert et moins il est possible de s'en séparer,
dans mon cas j'ai eu toutes les peines du monde à rédiger ce papier,
à la place j'ai fait ça, un début de projet pour administrer mes
tables MySQL, Normalement ,bien que je n'ai pas encore testé, cela
devrait être portable vers Kylix sans problème. Quel environnement
de programmation peut me permettre un accès direct a MySQL et une
portabilité Windows / Linux ? Quand je pense qu’au début j'ai utilisé
Delphi par hasard, cette fois là, je peux dire que j'ai eu de la
chance :-))
Avril 2001 - Jean Marc Carayon
|