Dernière mise à jour :2008-07-25

informatique

Communication entre application Microsoft et BD Oracle

Oracle est certe l'une des bases de données les plus populaire au monde. Microsoft est une compagnie qui offre (entre autre) plusieurs type de technologies de développement d'applications. Ces deux technologies se rencontrent souvent dans les entreprises, c'est à dire qu'une entreprise est pourvu d'une base de données Oracle avec des interfaces Oracle et d'un autre côté, possède aussi une application créée avec des outils Microsoft, comme par exemple, un site web dynamique fonctionnant avec la technologie ASP (Active Server Pages) ou encore, une application créé dans un but quelconque à l'aide de visual Basic.

Dans de tel cas (souvent au niveau du web) il arrive que les développeurs se demande si il pourront par un moyen quelconque accéder à la base de données Oracle via leur applications Microsoft. La réponse est OUI, heureusement. En fait, le programmeur dispose même de deux techniques.

La première méthodes provient de la compagnie Microsoft et se nomme ADO (ActiveX Data Objects) qui permet à l'aide d'ODBC ou encore de OLE-DB d'accéder à une multitude de sources de données dont Oracle.

La seconde, qui est le principale sujet de cet article provient pour sa part de la compagie Oracle elle-même et se nomme Oracle Objects for OLE.

Qu'est-ce que Oracle Objects for OLE (oo4o)?

oo4o est un produit offert par la compagnie Oracle qui permet d'accéder à des bases de données de type Oracle depuis des applications client via la technologie Microsoft OLE (Object Linking and Embedding) et COM (Component Object Model). L'accès en question se fait de façon native et non via ODBC.

Les composants formant oo4o est la suivante:

  1. Oracle Data Control
  2. Classes c++ (Une pour MFC (Microsoft Foundation class) et l'autre pour Borland)
  3. OLE 2.0 Automation (InProcess) Server

Il est possible d'utiliser oo4o depuis plusieurs langages / logiciels Microsoft comme par exemple, Visual Basic, Visual c++, ASP (Active server pages), MS-Excel etc..

Installation et configuration

Pour faire fonctionner oo4o, il faut installer les logiciels client d'Oracle sur votre machine. Dans le cas d'une utilisation avec ASP, le client doit être installé sur le serveur web. L'installation terminé, vous disposerez de oo4o ainsi que SQL*Net.

Ajout d'un alias de la base de données

  1. Ouvrir SQL*Net Easy config . Dans le menu Démarrer (start) choisir : Programmes / Oracle for Windows NT / SQL Net Easy Configuration.
  2. Sélectionner Add Database Alias et inscrire un nom représentant l'alias en question.
  3. Choisir le protocole (bien souvent TCP / IP).
  4. Indiquer le serveur Oracle (host machinecomputerne) et ensuite la base de données sur ce serveur (database instance).

Note : Assurez vous que le PC sur lequel vous installez oo4o dispose d'au moins 20Mo d'espace disque libre (10 pour oo4o et environ 10 autres pour contenir votre plus large Dynaset).

Distribution d'une application utilisant oo4o

Si vous ne pouvez pas garantir de façon certaine que les ordinateurs sur lesquels votre application sera installée possède oo4o, vous devrez distribuer certains fichiers avec votre application, nottemment le contrôle Oracle Data (ORADC.ocx). De plus, si ce contrôle n'est pas installé à l'aide de l'installateur d'Oracle, celui-ci devra être inclut dans le registre de Windows d'une manière autre. Vous pourriez par exemple utiliser le petit programme regsvr32.exe lancé en commande DOS.

Description des composants

Oracle Data Control

Le contrôle Oracle Data est un contrôle ActiveX (.ocx) qui a été créé pour simplifier l'échange de données entre une base de données Oracle et une série d'autres contrôle comme par exemple, un contrôle Grid ou encore un contrôle List. Le contrôle comporte plusieurs interfaces utilisateurs tel la présentation ou l'édition des données.

Si vous êtes habitué à travailler avec les contrôles de données en VB, vous n'épprouverez pas d'énormes difficultés à comprendre le contrôle Oracle Data.

Classes c++

Les classes c++ de oo4o sont une collections de classes qui permettent un accès programmatique à l'objet Oracle Server. Cette librairie est destinée à éviter au développeur la corvée de créer un client COM pour accéder aux différentes interfaces de oo4o.

La librairie fournie aussi une classe de liaison (bound class) qui permet de lier des contrôles comme des contrôle Text ou List directement vers un champs du Dynaset. La classe de liaison supporte le «Late binding» ainsi que le «Early binding» comme en VB.

Serveur Automation

Le serveur Automation oo4o est un ensembles d'objets Automation pour la connection à une base de données Oracle. Il permet d'effectuer non seulement des requêtes SQL mais aussi des instructions PL/SQL.

Contrairement aux autres APIs de connection aux bases de données basées sur la technologie COM tel que ADO (ActiveX Data Objects) de la compagnie Microsoft, le serveur Automation de oo4o a été développé et a évolué en fonction d'une base de données unique qui est Oracle. Donc, selon le fabriquant (Oracle), ce serveur est plus rapide pour l'accès à sa base de données.

La question que vous vous poserez sûrement est, est-ce vrai? En effet, probablement que Microsoft dit exactement le contraire sur son site et privilégit sa méthode d'accès au BD (ADO). Je ne peux pas donner une réponse exacte à cette question mais après avoir fait des recherche sur le web sur une bonne quantité de site, la plupart des programmeurs ayant testé les deux technologie disent que oo4o est sensiblement plus performant que ADO.

Cette article ne vise cependant pas à privilégier une technologie particulière. Après tout, si votre application doit entrer en contact avec plusieurs types de BD incluant aussi des fichiers XML, le choix sera plus orienté vers ADO puisque le bon côté de cette technologie est de permettre un accès quasi universelle à diverses sources de données. Mais bon, comme je le mentionne une ou deux ligne plus haut, cette article ne vise pas à démistifier quelle est la meilleure technologie mais bien à présenter l'une d'entre elles.

Pour conclure sur la courte description du serveur, celui-ci fournit aussi les éléments nécessaires à la conception d'application client/serveur ou encore multi-tiers avec de technologie tel MTS (Microsoft Transaction Server) et IIS (Internet Information Server).

Détail des éléments inclus avec le serveur :

  1. Support de PL/SQL
  2. Support complet de Oracle Object-Relational and LOB Datatypes
  3. Objets Thread Safe et gestion de Pool de connections pour permettre le développement d'application web de qualité
  4. Support complet de Advanced Queuing
  5. Support de MTS (Microsoft Transaction Server)
  6. Support des curseurs «scrollable» et «updatable»
  7. Support des insertion et Mise à jour de tableaux

Modèle d'objet provenant avec Oracle 8I

  • OraSession
    • OraServer
      • OraDatabase
        • OraParameters
          • OraParameter
        • OraParameterArray
        • OraDynaset
          • OraField
        • OraMetaData
          • OraMDAttribute
        • OraAQ
          • OraAQMsg

Détails des principaux objets qui seront utilisés dans cet atelié

OraSession

OraSession est un objet retourné lorsqu'une instance du serveur oo4o est créé. Cet objet sert principalement d'interface pour établir les connections à la base de données Oracle.

OraServer

L'objet OraServer représente une connection physique à une base de données. Il fournit une méthode appelé OpenDatabase qui permet de créer des sessions utilisateurs (OraDatabase) à l'intérieur de la connection serveur qu'il contient.

OraDatabase

L'objet OraDatabase représente une connection utilisateur à une instance de base de données Oracle. Cette objet permet d'effectuer des requête SQL et/ou exécuter du code PL/SQL. Cette objet est créé en utilisant la méthode OpenDatabase de l'objet OraServer.

OraDynaset

Cet objet représente le «result set» retourné par une commande SQL de type SELECT ou du résultat d'un bout de code PL/SQL. C'est un curseur coté client qui peut être modifié et dans lequel ont peut se déplacer.

OraField

Cet objet représente un enregistrement (colonne) dans un objet OraDynaset.

Détails des principales méthodes qui seront utilisées dans cet atelié

OraSession.OpenDatabase

Cette méthode établit une session utilisateur sur la base de données. Elle renvois un objet de type OraDatabase.

Syntaxe

Set objOraDatabase = OraSession.OpenDatabase(nom_base_donnees,chaine_connection,options)

OU

Set objOraDatabase = OraServer.OpenDatabase(chaine_connection,options)

Liste des arguments de la méthode OpenDatabase

nom_base_donnees : Le nom de la base de données

chaine_connection : Le nom d'utilisateur suivit du caractère "/" lui-même suivit du mot de passe.

options : Un bit servant à indiquer un mode particulier. Si l'option est égal à 0, le mode par défaut est utilisé. Celui-ci est le mode Visual Basic.

OraDatabase.CreateDynaset

Fait la création d'un objet OraDynaset à partir d'une requête SQL spécifié dans l'un de ses argument.

Syntaxe

Set objOraDynaset = objOraDatabase.CreateDynaset(requete_sql, options, snapshotiD)

OU

Set objOraDynaset = objOraDatabase.DbCreateDynaset(requete_sql, options, snapshotiD)

Liste des arguments de la méthode CreateDynaset

requete_sql : Une chaine de caractère contenant une requête SQL Oracle valide.

options : Un bit servant à indiquer le statut de n'importe quel état optionel du Dynaset. La constante par défault se nomme ORADYN_DEFAULT et a la valeur &H0& (0).

SnapShotID : Un SnapShotID obtenu avec la propriété SnapShot de l'objet OraDynaset.

Maintenant que nous connaissons un peu plus les éléments formant oo4o, nous pouvons débuter à coder!!

Le code de cet exemple est en ASP (Active server pages) mais si vous êtes un programmeur VB, vous vous y retrouverez facilement car ASP est dériver de VB.

Description du petit projet

Vous travaillez dans une grande entreprise de vente de tablettes de chocolat. L'entreprise comprends plusieurs départements et votre patron aimerais bien en voir paraitre la liste sur le site web de l'entreprise. Hors, ces noms de département sont stockés dans une base de données Oracle. Lorsque votre patron vous demande si la chose est possible, vous lui dites rapidement qu'il n'y a pas de problème car vous connaissez l'existence de oo4o puisque vous avez lu cet article. Votre patron est alors très heureux et il décide de vous donner une boite pleine de tablettes de chocolat. Quel chance n'est-ce pas!

Vous commencez donc le projet tout en débutant la dégustation de vos multiples tablettes.

Vous examinez d'abord la table de la base de données contenant les informations à propos des départements. Voici sa structure:

TABLE DEPT
ID_DEPT NOM_DEPT CODE_DEPT
1 Production Chocolat noir PCN
2 Production Chocolat blanc PCB
3 Administration ADM
4 Informatique INF

Vous configurez ensuite avec l'aide du DBA (DataBase Administrator) le serveur web comme vous l'avez appris en effectuant la lecture des lignes ci-dessus.

Voici les info concernant la base de données:

  • Nom de la base : CHOCOLAT
  • Utilisateur : userChoco
  • Mot de passe : passChoco

Finalement, vous créez la page web en question dans votre éditeur favorit. Voici le listing du code en question :

Listing 1.0 Page ASP
1. <%@ Language=VBScript %>
2. <%Option Explicit%>
3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4. <html>
5. <head>
6. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-8859-1">
7. </head>
8. <body>
9. <%
10. Dim objOraSession
11. Dim objOraDatabase
12. Dim objOraDynaset
13. 
14. Set objOraSession = CreateObject("OracleInProcServer.XOraSession")
15. Set objOraDatabase = objOraSession.OpenDatabase("CHOCOLAT", "userChoco/passChoco", 0)
16. Set objOraDynaset = objOraDatabase.CreateDynaset("select * from DEPT", 0)
17. %>
18. 
19. <table border="1" summary="Données de la table OUT_DEPT" cellpadding="3">
20. <tr>
21.  <td colspan="3">Liste des départements</td>
22. </tr>
23. <tr>
24.  <td>Code</td>
25.  <td>Nom</td>
26.  <td>ID</td>
27. </tr>
28. <%
29. While Not objOraDynaset.EOF
30.  Response.Write "<tr><td>" & objOraDynaset.Fields("CODE_DEPT") & "</td><td>" & objOraDynaset.Fields("NOM_DEPT") & "</td><td>" & objOraDynaset.Fields("ID_DEPT") & "</td></tr>"
31.  objOraDynaset.MoveNext
32. Wend
33. 
34. Set objOraDynaset = Nothing
35. Set objOraDatabase = Nothing
36. Set objOraSession = Nothing
37. %>
38. </table>
39. 
40. </body>
41. </html>

Note : Quand j'ai fais la création de cet article, j'avais faim, de là découle le sujet du petit projet. Désolé pour ceux qui ont aussi faim en lisant ces lignes.

Voilà. C'est la fin d'un premier article à propos de l'accès aux bases de données Oracle via des applications de type Microsoft. Pour en savoir plus à propos de ce que vous avez la possibilité de faire à l'aide de oo4o, vérifiez si d'autres articles existe sur ce site ou encore, consultez la documentation officielle fournit par Oracle avec le produit. Bonne programmation!

Auteur : Sylvain Bilodeau

Date de mise en ligne : 2003-05-20 02:00:00

Aucun commentaire pour l'instant.