menu
  Home  ==>  articles  ==>  bdd  ==>  interbase  ==>  delphi_8_ado_net   

Delphi 8 ADO NET - John COLIBRI.


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:
   lancez Delphi 8
   ouvrez l'onglet "Data Components". Si les composants OleDb ne sont pas installez, vous verrez:

   ouvrez le dialogue "Component | Installed .Net Components ..."
   sur l'onglet ".NET components" dans la liste, recherchez "Oledb" et cochez les 4 composants concernés:

   l'onglet "Data Components" de la palette est devenu:





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(senderSystem.ObjecteSystem.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:
  • tout d'abord nous avons un message d'erreur:

  • si nous laissons "inspect exception", nous voyons:

  • alors que "show disassembly" présenterait:

    Là, c'est bien évident, notre chaîne de correction é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:

         SELECT * FROM Customer

        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.
      • Sélectionnez TableMappings

        et cliquez sur l'ellipse ...

      • Delphi ouvre le dialogue suivant:

      • Confirmez en cliquant "Ok"
  • 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(senderSystem.ObjecteSystem.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(senderSystem.ObjecteSystem.EventArgs);
  var l_c_ole_db_command_builderOleDbCommandBuilder;
  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" :
    Nom :
    E-mail :
    Commentaires * :
     

  • 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.
Created: jan-04. Last updated: mar-2020 - 250 articles, 620 .ZIP sources, 3303 figures
Contact : John COLIBRI - Tel: 01.42.83.69.36 / 06.87.88.23.91 - email:jcolibri@jcolibri.com
Copyright © J.Colibri   http://www.jcolibri.com - 2001 - 2020
Retour:  Home  Articles  Formations  Développement Delphi  Livres  Pascalissime  Liens  Download
l'Institut Pascal

John COLIBRI

+ Home
  + articles_avec_sources
    + bases_de_donnees
      + programmation_oracle
      + interbase
        – interbase_blobs
        – interbase_tutorial
        – interbase_dbexpress
        – interbase_ibx_net
        – ib_dbexpress_net
        – delphi_8_ado_net
        – borland_data_provider
        – sql_script_extraction
        – interbase_udf
        – sql_script_executer
        – ib_blob_extraction
        – insert_blob_script
        – ib_stored_procedures
      + sql_server
      + firebird
      + mysql
      + xml
      – paradox_via_ado
      – mastapp
      – delphi_business_objects
      – clientdataset_xml
      – data_extractor
      – rave_report_tutorial
      – visual_livebindings
      – migration_bde
    + web_internet_sockets
    + services_web_
    + prog_objet_composants
    + office_com_automation
    + colibri_utilities
    + uml_design_patterns
    + graphique
    + delphi
    + outils
    + firemonkey
    + vcl_rtl
    + colibri_helpers
    + colibri_skelettons
    + admin
  + formations
  + developpement_delphi
  + présentations
  + pascalissime
  + livres
  + entre_nous
  – télécharger

contacts
plan_du_site
– chercher :

RSS feed  
Blog

Formation Delphi complete L'outil de développpement, le langage de programmation, les composants, les bases de données et la programmation Internet - 5 jours