Delphi 8 ADO NET - John COLIBRI. |
- abstract: utilisation de bases de donnée avec Delphi 8 via Ado.Net
- mots clé:tutorial - base de données - Delphi 8 - Windows Forms - Ado.Net - Access - OleDb
- logiciel utilisé: Windows XP, Delphi 8, .Net SDK
- matériel utilisé: Pentium 1.400Mhz, 256 M de mémoire
- champ d'application: Delphi 8 sur Windows, librairie .Net, fichier Access
- niveau: débutant Delphi et Base de Données
- plan:
1 - Introduction J'ai choisi de présenter à Borcon 2004 les différents moyens d'utiliser Interbase:
- pour Delphi 5 à 6, les API, le BDE et Sql Links, Interbase Express, dbExpress et Ado
- pour Delphi 8, dbExpress.Net, Ibx.Net, Ado.Net et le BDP
Cet article présente l'utilisation de la mécanique Ado sous .Net pour gérer des données. Pour les autres façons d'utiliser Interbase, voyez:
- le tutorial interbase: comment utiliser des bases de données en mode Client Serveur (Delphi 6, Ibx). L'article d'initiation le plus complet
- Interbase dbExpresss: le mode dbExpress (Delphi 6, dbExpress). Le mode qui permet le mieux de comprendre
l'architecture Ado.Net qui en est directement issue
- Interbase Ibx.Net: le portage sous .Net de la
mécanique Ibx (Delphi 8, Ibx.Net). Le moyen le plus simple d'utiliser Interbase et Delphi 8. Contient aussi un comparatif de toutes ces architectures avec les schémas correspondants
- Interbase dbExpress.Net: le portage sous .Net de la mécanique dbExpress (Delphi 8, dbExpress.Net). L'utilisation
des techniques VCL pour Interbase ET pour les autres serveurs (Oracle, Sql Server, MyBase etc)
- Interbase Borland Data Provider: la voie royale sous Windows Forms, et pour toutes les base, même pour tous
les langages
2 - Architecture 2.1 - Organisation La librairie .Net offre plusieurs façons de gérer des données: - soit en liaison directe avec les pilotes
- soit en utilisant le Borland Data Provider.
- soit en communiquant au travers de couches COM
L'accès direct n'est possible que si les pilotes sont disponibles. C'est le cas
pour Sql Server, mais pas pour Interbase. Le Borland Data Provider, qui permet l'accès à Interbase, sera présenté dans un article séparé.
Nous nous intéresserons ici à la troisième possibilité: communiquer avec les anciennes couches COM. En fait il s'agit d'un mode proche de .Ado sous Win32: nous utilisons un "OleDbProvider" qui communique avec le Serveur qui nous
intéresse. Borland n'a pas fourni de module OleDb pour Interbase. Sachant que la solution Borland Data Provider permet le traitement Interbase, cela ne nous
fait guère défaut. Nous pouvons acheter un OleDb Provider pour Interbase, mais cet article serait sans intérêt pour ceux qui n'ont pas ce module. Nous
allons donc, pour montrer comment utiliser Ado.Net, utiliser un Serveur dont le module OleDb est fourni par défaut par Microsoft: le composant Jet pour les bases Access.
Nous pouvons donc résumer les trois modes d'accès sur le schéma suivant: 2.2 - Préparation Pour utiliser plus simplement notre exemple, nous allons copier la base Acess
dans un sous répertoire puis préparer les composants OleDb. Donc: | cherchez dans "Program Files" ou "Fichier Communs" la base de démonstration
Access founie par Delphi. Elle s'appelle: DBDEMOS.MDB | |
créez un répertoire DATA de même niveau que celui du .DPR (parallèle) | | copiez DBDEMOS.MDB dans ce sous-répertoire |
A présent, nous devons préparer les composants Delphi 8 qui nous permettent d'accéder à OleDb. Ces composants sont disponibles sur notre machine, mais par
défaut Delphi 8 ne les incorpore pas dans la Palette. Pour les ajouter, il suffit d'utiliser l'utilitaire de sélection des composants .Net. Par conséquent:
3 - Connexion à la base 3.1 - Le Projet | lancez Delphi 8 si ce n'est pas fait |
| sélectionnez "Fichiers | Nouveau | Windows Forms" | Nous allons commencer par nous connecter à la base Access:
| dans la page "Data Components" de la Palette, sélectionnez OleDbConnection
et posez-le sur la Forme | | Delphi le place en-dessous de la Forme, comme une sorte de DataModule incorporé:
| | connectons ce composant à notre base Access:
- sélectionnez la propriété ConnectionString
- tapez la valeur correspondant à la base DBDEMOS.MDB. Cette chaîne magique est:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\data\dbdemos.mdb;Persist Security Info=False | | |
pour vérifier notre connections, nous l'ouvrons: - posez un Button sur la Forme et créez son événement OnClick
- ouvrez OleDbConnection1:
procedure TWinForm.fill__Click(sender: System.Object; e: System.EventArgs);
begin
OleDbDataAdapter1.Fill(DataSet1, 'my_dataset');
DataGrid1.DataMember:= 'my_dataset';
end; // fill__Click | | |
pour vérifier la connection, nous avons aussi créé l'événement OleDbConnection.OnStateChange et nous affichons dans un TextBox la valeur de StateChangeEventArgs (valeur "Opened") |
| compilez, exécutez, et cliquez "open_" | |
la TextBox affiche bien que l'état de OleDbConnection a changé |
Voici ce qui arriverait si notre chaîne de connection était erronnée:
4 - Affichage et Modification cd 3 Affichage
Ajoutons à présent les composants de lecture de donnée et de visualisation - ajoutons un OleDbDataAdapter:
- sur la page "Data Components", sélectionnez OleDbDataAdapter
et posez-le sur la forme - spécifions que nous souhaitons récupérer des données de
OleDbConnection:
- cliquez sur le "+" de la propriété SelectCommand
- sélectionnez la sous-propriété Connection et cliquez dessus pour désigner OleDbConnection1
- sélectionnez la sous-propriété CommandText, et tapez la requête SELECT etc:
Mais comme nous devrons indiquer en détail la correspondance entre
les colonnes de la Table ACCESS et notre grille, il faut préciser le détail des colonne. Donc expliciter "*". Pour cela il faut connaître ces colonnes. Dans notre cas, nous utiliserons les colonnes CustoNo et Company
La requête devient alors: SELECT CustoNo, Company
FROM Customer | - vous pouvez refermer la propriété SelectCommand en cliquant sur "-"
- pour spécifier la correspondance entre les colonnes de la Table et celle de la grille, nous utilisons TableMappings.
- dans la page "Data Components" sélectionnez un DataSet et posez-le sur la Forme
Sélectionnez sa propriété DataSetName et tapez un nom, par exemple: my_dataset
- dans la page "Data Controls", sélectionnez un DataGrid et posez-le sur la Forme.
Sélectionnez sa propriété DataSource et placez-y DataSet1
Nous allons à présent remplir la grille:
| posez un Button sur la Forme, nommez-le "fill_" et créez son événement OnClick. Placez-y l'instruction de remplissage de la grille:
procedure TWinForm.fill__Click(sender: System.Object; e: System.EventArgs);
begin
OleDbDataAdapter1.Fill(DataSet1, 'my_dataset');
DataGrid1.DataMember:= 'my_dataset';
end; // fill__Click | | |
compilez, exécutez, et cliquez "fill_" | | nous voyons le contenu de la table: |
4.1 - Modification Voyons comment modifier les données: | posez un Button sur la Forme et créez son événement OnClick
procedure TWinForm.update__Click(sender: System.Object; e: System.EventArgs);
var l_c_ole_db_command_builder: OleDbCommandBuilder; begin
// -- attach a builder to the Adapter
l_c_ole_db_command_builder:= OleDbCommandBuilder.Create(OleDbDataAdapter1);
// -- send the update OleDbDataAdapter1.Update(DataSet1);
end; // update__Click | | |
compilez et exécutez |
5 - Evaluation En résumé: - Comme pour ADO en Delphi 6, la chaîne de connexion est plutôt bizarre. Elle
est l'équivalent de l'alias que Borland avait inventé pour regrouper dans un RECORD la kyrielle de paramètres spécifiques à chaque moteur de base de données. Microsoft préfère nous laisser grenouiller dans une chaîne dont la
syntaxe périlleuse ferait la joie des administrateurs Linux les plus retors.
Il existe même des sites Web consacrés à guider le malheureux programmeur dans ses errances de connexion:
Pacheto consacre aussi un paragraphe complet pour essayer de donner une logique à cette chaîne.
- n'ayant pas fait l'investissement de maîtriser les techniques .Net de base (les Collections, les Interfaces etc) je suis très mal à l'aise dès qu'il s'agit de coder quelques lignes. Une utilisation plus intensive de la
mécanique .Net en mode Windows Forms nécessitera impérativement cet apprentissage
- l'organisations et le fonctionnement des composants OleDb n'est pas sans
rappeler dbExpress: OleDbConnection sert à se connecter, le OleDbDataAdapter ressemble un peu au tDataSetProvider doté des instructions Sql du SqlQuery.
En revanche, Ado.Net a des ambitions plus vastes: l'ensemble permet de doter de nombreux composants d'accès aux données. C'est la raison pour laquelle nous remplissons la DataGrid en propageant les données depuis le
OleDbDataAdapter et non pas en connectant simplement le DataSet et l'adaptateur. - le mode OleDb est, à mon avis, un mode rabouté à .Net. C'est l'équivalent d'une connexion ODBC sous Win32.
Si nous souhaitons utiliser un moteur, il vaut mieux utiliser - soit un pilote direct (similaire à celui que Microsoft s'est construit pour Sql Server)
- soit utiliser le Borland Data Provider qui est bien plus confortable et qui est présenté dans un autre article
- pour le reste de l'interface utilisateur, la performance Borland reste une
fois de plus remarquable
6 - Télécharger les Exemples Le projet de cet article et téléchargeable:
Ce .ZIP qui comprend: - le .DPR, la forme principale, les formes annexes eventuelles
- les fichiers de paramètres (le schéma et le batch de création)
- dans chaque .ZIP, toutes les librairies nécessaires à chaque projet (chaque
.ZIP est autonaume)
Ces .ZIP contiennent des chemins RELATIFS. Par conséquent: - créez un répertoire n'importe où sur votre machine
- placez le .ZIP dans ce répertoire
- dézippez et les sous-répertoires nécessaires seront créés
- compilez et exécutez
Ces .ZIP ne modifient pas votre PC (pas de changement de la Base de Registre, de DLL ou autre). Pour supprimer le projet, effacez le répertoire.
Comme d'habitude: - nous vous remercions de nous signaler toute erreur, inexactitude ou problème de téléchargement en envoyant un e-mail à jcolibri@jcolibri.com. Les corrections
qui en résulteront pourront aider les prochains lecteurs
- tous vos commentaires, remarques, questions, critiques, suggestion d'article, ou mentions d'autres sources sur le même sujet seront de même
les bienvenus à jcolibri@jcolibri.com.
- plus simplement, vous pouvez taper (anonymement ou en fournissant votre e-mail pour une réponse) vos commentaires ci-dessus et nous les envoyer en
cliquant "envoyer" :
- et si vous avez apprécié cet article, faites connaître notre site,
ajoutez un lien dans vos listes de liens ou citez-nous dans vos blogs ou réponses sur les messageries. C'est très simple: plus nous aurons de visiteurs et de références Google, plus nous écrirons d'articles.
7 - Conclusion Nous avons présenté un exemple d'utilisation d'Ado.Net pour accéder à des données d'une base Access.
Pour ceux intéressés par le développement ADO.Net, nous avons un nouvel article, beaucoup plus développé:
- firebird_ado_net_tutorial: ADO .Net Tutorial, utilsant Firebird. Une
introduction complète au développement ADO .Net, utilisant SqlConnection, SqlCommand, SqlDataAdapter pour se connecter à un Serveur, exécuter
directement du SQL, travailler avec des tables en mémoire, utiliser des DataGrids pour afficher et modifier les données. Très nombreux schémas et code source complets
ainsi que les articles d'installation de Firebird:
- firebird_installation: installation du Serveur et du Client Firebird. Le détail pas à pas avec les vérifications à chaque étape
- firebird_dot_net_installation: installation du DataProvider Firebird
permettant d'utiliser le moteur avec .Net, et installation du DataProvider dans l'IDE Delphi
- firebird_bdp_installation: installation du Borland Data Provider Firebird permettant d'utiliser le moteur Firebird avec .Net, et test de
connection sous Delphi
Rappelons aussi que nous organisons tous les mois des formations, et en particulier pour ceux intéressés par les bases de données et .Net:
Nous avons déjà organisé pour certains clients des formations ADO.Net uniquement (3 jours), et envisageons de la placer au catalogue. Ceux intéressés peuvent nous contacter à jcolibri@jcolibri.com.
8 - L'auteur John COLIBRI est passionné par le développement Delphi et les applications de Bases de Données. Il a écrit de nombreux livres et articles, et partage son temps entre le développement de projets (nouveaux projets, maintenance, audit, migration BDE, migration Xe_n, refactoring) pour ses clients, le
conseil (composants, architecture, test) et la
formation. Son site contient des articles
avec code source, ainsi que le programme et le calendrier des stages de formation Delphi, base de données, programmation objet, Services Web, Tcp/Ip et
UML qu'il anime personellement tous les mois, à Paris, en province ou sur site client. |