Lucinda000
Messages postés27Date d'inscriptionmardi 24 avril 2007StatutMembreDernière intervention21 juin 2007
-
7 mai 2007 à 14:33
Lucinda000
Messages postés27Date d'inscriptionmardi 24 avril 2007StatutMembreDernière intervention21 juin 2007
-
22 mai 2007 à 15:51
Bonjour à tous,
Je souhaite accéder à une base access sur un PC Linux en Red Hat 3. Sur
ce PC, il y a donc mon fichier *.mdb et Oracle version 9.2.0
Après plusieurs petites recherches, j'ai trouvé le bon driver pour lire mon fichier *.mdb (j'ai choisi libmdbodbc.so).
J'ai ensuite fouillé sur internet pour trouver un peu d'aide.
J'ai bien créé mon DSN, dont voici les détails :
Pour mon fichier odbcinst.ini :
[MicrosoftAccess]
Description = ODBC for Microsoft Access
Driver = /usr/lib/libmdbodbc.so
Setup = /usr/lib/libmdbodbc.so
FileUsage = 1
et pour mon fichier odbc.ini :
[DSN]
Description = MicrosoftAccess Base
Driver = MicrosoftAccess
Database = /home/users/data/mestests/base.mdb
Servername = localhost
Donc bon, j'essaie de voir si mon DSN est bien configuré, OpenOffice.org le voit, j'me dis : "Chouette, ça doit être bon !"
Ben non, c'est pas fini. Parce que je dois aller lire ma base par programmation...
Donc je me dis, essayons les "heterogeneous services" d'Oracle, ça doit être bien tout ça.
Donc je configure mes p'tits fichiers qui vont bien.
Mon fichier "inithsdsn.ora" localisé dans $ORACLE_HOME/admin
HS_FDS_CONNECT_INFO = DSN
HS_FDS_TRACE_LEVEL = 0
HS_DB_NAME = hsdsn
HS_FDS_SHAREABLE_NAME = /usr/lib/libmdbodbc.so
Mon fichier "listener.ora" placé dans $ORACLE_HOME/network/admin
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(PROGRAM=hsodbc)
(SID_NAME=DSN)
(ORACLE_HOME=/home/oracle/product/9.2.0)
)
)
et mon fichier "tnsnames.ora" placé aussi dans $ORACLE_HOME/network/admin
hsdsn =
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=tcp)
(HOST=localhost)
(PORT=1521)
)
(CONNECT_DATA=
(SERVICE_NAME=DSN)
)
(HS=OK)
)
Une fois tout ça effectué, je suis contente normalement. J'me dis, ça devrait marcher...
Bon je mets les droits sur le fichier "listener.log" sinon ça marche pas.
Et là, je vois aucun service quand je lance la commande "lsnrctl start".
Voilà ce que j'obtiens (oh joie!) :
LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 07-MAY-2007 13:54:43
Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.
Bon alors qu'est-ce que j'ai mal fait ? Comment je peux créer le lien
entre ma base de données access base.mdb et ce truc ? Comment je peux
faire des requêtes là-dedans ?
Lucinda000
Messages postés27Date d'inscriptionmardi 24 avril 2007StatutMembreDernière intervention21 juin 2007 22 mai 2007 à 15:51
J'ai fini par réussir, sans ODBC ni DSN, je donne donc ma solution (pour ceux que ça intéresse).
Je rappelle le contexte :
J'ai une base Access sur un PC Windows sur lequel je souhaite ne rien
installer ou rajouter. Et je dois exploiter cette base sous un PC Linux
contenant Oracle (9i). Les deux PC sont en réseau.
Solution
Elle ne fut pas simple à trouver. On ne trouve quasiment rien sur le net
de ce genre.
Attention, elle n'est valable qu'avec un Linux RHEL 3 & Access 97. Je
pense qu'elle est portable sur du RHEL 4 (j'en suis sure même) voir un
autre Linux, mais pour Access, mieux vaut rester dans la version 97 ou
2000 (éventuellement 2002), pas au-delà. Cependant, Microsoft Access
permet la possibilité d'enregistrer sa base en une version antérieure,
donc tout va bien.
Prérequis :
- J'ai trouvé sur le net un magnifique outil : MDBTools
(http://sourceforge.net/projects/mdbtools/). J'ai choisi la version
0.5-1 (la version 0.6pre1 fonctionne, mais uniquement à partir de RHEL
4). Cet outil est tout simplement un driver qui lit les bases Access, et
possède quelques commandes simples d'accès. Donc il faut l'installer sur
le PC Linux
- Il faut créer un compte sur le PC Windows spécifique pour la base (à
cause d'une ligne de commande sous Linux) et mettre en partage le
dossier dans lequel il y a la base.
- La base Oracle doit contenir les tables que l'on veut importer
(c'est-à-dire qu'elles doivent déjà être créées)
Choix des noms :
J'appelle ma base base.mdb (pas original, mais compréhensible) qui aura
une table "table". Et disons que j'appelle mon PC "PC" et le domaine de
mon PC windows "domaine". Le compte nécessaire sur le PC Windows :
"compte" avec comme mot de passe "password" (pas très dur à suivre comme
ça) et le dossier partagé "dossier".
Etapes à Suivre :
Donc je fais les choses dans l'ordre suivant:
1) à l'aide de la commande suivante, je copie ma base sur le PC Linux
(dans le répértoire que je choisis)
Je fais cela car il est nécessaire de n'avoir que les enregistrements
dans le fichier. L'option "-p" sert à enlever la mise en forme du type :
---------
| table |
---------
| plouf |
---------
L'option -d sert à choisir le séparateur.
NB : sur la version 0.6pre1 du MDBTools, les options "-HF" permettent
d'enlever les noms des colonnes et les stats du fichier csv, donc pas
besoin des "grep".
3) J'importe les tables dans Oracle à l'aide de "sqlldr" après avoir
configuré tous les fichiers de control et d'option correctement. (je ne
mets pas la ligne de commande, je n'ai pas encore approfondi la
question, mais il y a de l'aide sur le site d'Oracle). Il y a notamment
selon moi un bon tuto ici : http://www.supinfo-projects.com/fr/2005/sqlldr/ 4) Je fais des requêtes dans Oracle :)
Voili voilou, très simple vu comme ça, mais fallait trouver, et c'était
pas gagné !