Différences entre versions de « OpenOffice.org Base et MySQL »

De Cliss XXI
Sauter à la navigation Sauter à la recherche
imported>SylvainBeucler
 
(18 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 7 : Ligne 7 :
  
 
=== Le serveur MySQL ===
 
=== Le serveur MySQL ===
 +
 
La configuration du serveur MySQL ne pose pas de difficulté particulière :
 
La configuration du serveur MySQL ne pose pas de difficulté particulière :
 
* Installation
 
* Installation
  aptitude install mysql-server
+
  $ aptitude install mysql-server
  
 
* Mot de passe root
 
* Mot de passe root
  mysql -uroot
+
  $ mysql -u root
  SET PASSWORD FOR root@localhost=PASSWORD('PassRoot');
+
  mysql> SET PASSWORD FOR 'root' = PASSWORD('PassRoot');
  quit
+
 
 +
* Création de la base contacts: c'est important, car OpenOffice.org ne permet pas la création de bases. OpenOffice.org accède à des bases existantes.
 +
mysql> CREATE DATABASE contacts;
 +
mysql> SHOW DATABASES;
 +
 
 +
* Création de l'utilisateur user1 + droits sur base contacts : même remarque : pour OpenOffice.org, l'utilisateur doit avoir été créé préalablement.
 +
mysql> GRANT ALL PRIVILEGES ON contacts.* TO 'user1' IDENTIFIED BY 'PassUser1';
 +
 
 +
* Dernière précaution : permettre l'accès à la base depuis un poste distant, en indiquant à MySQL le nom / l'adresse sur laquelle il doit écouter. Dans notre cas, il s'agit de 192.168.1.30 mais ce pourrait être un domaine pleinement qualifié, ou localhost. Modifier donc <code>/etc/mysql/my.cnf</code>:
 +
bind-address            = 192.168.1.130
 +
 
 +
=== Sur le poste client ===
 +
Indépendamment de OpenOffice.org, on va d'abord tester l'accès à la base distante, au travers d'un client MySQL
 +
 
 +
* Installation du client MySQL
 +
aptitude install mysql-client
 +
(installe aussi mysql-common).
 +
 
 +
* Tests de connexion :
 +
mysql -h 192.168.1.130 -u user1 -p contacts
 +
Enter password: PassUser1
 +
Tout semble bien se passer :
 +
Reading table information for completion of table and column names
 +
You can turn off this feature to get a quicker startup with -A
 +
Welcome to the MySQL monitor.  Commands end with ; or \g.
 +
Your MySQL connection id is 33 to server version: 5.0.24a-Debian_5~bpo.1-log
 +
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 +
mysql>
 +
A partir de là, place à quelques tests d'interrogations de la base
 +
mysql> show databases;
 +
+--------------------+
 +
| Database          |
 +
+--------------------+
 +
| information_schema |
 +
| contacts          |
 +
+--------------------+
 +
  2 rows in set (0.00 sec)
 +
....
 +
mysql> quit;
 +
Bye
 +
 
 +
=== ODBC ===
 +
Bref, tout va bien, on va maintenant tenter d'accéder à la base, toujours depuis notre poste client, mais via ODBC.
 +
aptitude install libmyodbc
 +
(installe aussi unixodbc)
 +
 
 +
Les fichiers /etc/odbc.ini (fichier vide) et /etc/odbcinst.ini sont créés.
 +
odbcinst.ini déclare le driver MySQL ODBC:
 +
<pre>
 +
[MySQL]
 +
Description    = MySQL driver
 +
Driver          = /usr/lib/odbc/libmyodbc.so
 +
Setup          = /usr/lib/odbc/libodbcmyS.so
 +
CPTimeout      =
 +
CPReuse        =
 +
FileUsage      = 1
 +
</pre>
 +
 
 +
On peut maintenant utiliser la commande '''odbcinst''' :
 +
# odbcinst -j
 +
unixODBC 2.2.4
 +
DRIVERS............: /etc/odbcinst.ini
 +
SYSTEM DATA SOURCES: /etc/odbc.ini
 +
USER DATA SOURCES..: /root/.odbc.ini
 +
CF '''man odbcinst''' pour toutes les options
 +
 
 +
On peut également utiliser la commande '''isql''' (voir plus bas)
 +
 
 +
Au préalable, il faut initialiser au moins un DSN (Data Source Name ou Data Set Name). En effet, toute connexion ODBC à une base s'initialise au travers d'un DSN existant. Ce sera vrai dans tous les cas, notamment pour initialiser une connexion ODBC depuis OpenOffice.org.
 +
 
 +
Pour créer une DSN, plusieurs solutions :
 +
* Modifier le fichier /etc/odbc.ini pour tous les utilisateurs du système.
 +
* Modifier le fichier ~/.odbc.ini pour un utilisateur donné.
 +
* Réaliser les modifications depuis une interface graphique '''ODBCConfig''' ou '''gODBCConfig''' (paquets debian du même nom). Les applications graphiques, au final, modifient les fichiers '''/etc/odbc.ini''' ou '''~/.odbc.ini'''
 +
 
 +
Exemple de fichier /etc/odbc.ini modifié manuellement :
 +
[MySQL-test]
 +
Description    =      Base MySQL ODBC
 +
TraceFile      =      stderr
 +
Driver          =      MySQL
 +
SERVER          =      192.168.1.130
 +
USER            =      user1
 +
PASSWORD        =
 +
DATABASE        =      contacts
 +
Dans ce cas, le DSN a pour nom '''MySQL-test'''
 +
 
 +
On peut alors tester, grâce à la commande '''isql''' :
 +
isql MySQL-test user1 PassUser1
 +
+---------------------------------------+
 +
| Connected!                            |
 +
|                                      |
 +
| sql-statement                        |
 +
| help [tablename]                      |
 +
| quit                                  |
 +
|                                      |
 +
+---------------------------------------+
 +
SQL> show databases;
 +
+-------------------+
 +
| Database          |
 +
+-------------------+
 +
| information_schema|
 +
| contacts          |
 +
+-------------------+
 +
2 rows affected
 +
2 rows returned
 +
SQL> quit;
 +
 
 +
=== JDBC ===
 +
 
 +
On peut aussi accéder à MySQL avec le connecteur JDBC.
 +
 
 +
aptitude install libmysql-java
 +
 
 +
Déclarer le connecteur auprès d'OpenOffice.org:
 +
* Outils -> Options -> Java -> Class path...
 +
* Ajouter une archive...
 +
* Sélectionner /usr/share/java/mysql.jar
 +
 
 +
== OpenOffice.org (module Base) ==
 +
La connexion à la base distante se fait alors simplement, via ODBC, au travers du DSN précédemment configuré :
 +
Fichier
 +
-> Nouveau
 +
-> Base de données
 +
-> Se connecter à une base de données existante
 +
-> MYSql
 +
-> Suivant
 +
-> Connexion utilisant ODBC
 +
-> Suivant
 +
-> Choisir une source de données
 +
-> MySQL-test
 +
-> Nom d'utilisateur : user1 + cocher ''Mot de Passe requis''
 +
-> Oui je souhaite que l'assistant enregistre la base de données
 +
-> Terminer
 +
A ce stade, on est connecté à la base contacts, en tant que user1. Au moment de toucher à la base (par exemple pour créer des tables), il faudra entrer son mot de passe.
  
* on delete les user sans passwd
+
Ensuite, tout se passe dans OpenOffice.org
mysql -uroot -pPassRoot
 
USE mysql;
 
DELETE FROM user WHERE Password='';
 
quit
 
  
* Pas de base test (si version < 5 : il n'y en a plus en mysql 5.0).
+
=== Quelques limitations du module base ===
mysql -uroot -pPassRoot
 
show databases;
 
DROP DATABASE test;
 
  
* Création de la base contacts : c'est important, car OpenOffice.org ne permet pas la création de tables. OpenOffice.org accède à des bases existantes.
+
Les fonctionnalités suivantes requièrent un environnement JAVA
CREATE DATABASE IF NOT EXISTS contacts;
+
* assistant de création de formulaire (alors que la création de formulaire en mode ébauche ne nécessite pas de JRE).
show databases;
+
* assistant de création de rapport.
 +
* assistant de création de requête (alors que la création de requête en mode ébauche, et la création de requête en vue SQL fonctionnent sans JRE).
 +
* assistant de création de table (alors que la création de table en mode ébauche, et la création de vue fonctionnent sans JRE).
 +
Installez le paquet 'openjdk-6-jre'.
  
* Création de l'utilisateur user1 + droits sur base contacts : même remarque : pour OpenOffice.org, l'utilisateur doit avoir été créé préalablement.
+
La connexion avec ODBC ne gère apparemment pas les bases en UTF-8 (problèmes d'accents).
grant all on contacts.* to user1 identified by 'PassUser1';
+
Elles passent correctement en JDBC.
 +
 
 +
== PostgreSQL ==
 +
 
 +
Variante de <code>odbcinst.ini</code> (cf. <code>/usr/share/psqlodbc/odbcinst.ini.template</code>):
 +
<pre>
 +
[PostgreSQL]
 +
Description    = PostgreSQL driver
 +
Driver          = /usr/lib/odbc/psqlodbcw.so
 +
Setup          = /usr/lib/odbc/libodbcpsqlS.so
 +
Debug          = 0
 +
CommLog        = 1
 +
</pre>
 +
 
 +
Variante de <code>.odbc.ini</code>:
 +
<pre>
 +
[pgtest]
 +
Description    =      Base PostgreSQL ODBC
 +
TraceFile      =      stderr
 +
Driver          =      PostgreSQL
 +
SERVERNAME      =      localhost
 +
USERNAME        =      monutilisateur
 +
PASSWORD        =      monmotdepasse
 +
DATABASE        =      mabasededonnees
 +
</pre>
 +
 
 +
== HSQLDB ==
 +
 
 +
Variante pour une base HSQLDB serveur (autonome, non intégrée):
 +
* <code>aptitude install libhsqldb-java</code>
 +
* Ajouter <code>/usr/share/java/hsqldb.jar</code> dans Outils -> Options -> Java -> Classpath -> Ajouter une archive
 +
* Se connecter via JDBC
 +
* URL: jdbc: <code>hsqldb:hsql://localhost;default_schema=true</code> (la partie <code>;default_schema=true</code> est nécessaire, Base ne permet quasiment rien sans ça)
 +
* Classe du pilote ODBC: <code>org.hsqldb.jdbcDriver</code>
 +
 
 +
== Liens ==
  
* Dernière précaution : permettre l'accès à la base depuis un poste distant, en indiquant à MySQL le nom / l'adresse sur laquelle il doit écouter. Dans notre cas, il s'agit de 192.168.1.30 mais ce pourrait être un domaine pleinement qualifié, ou localhost.
+
* [http://www.unixodbc.com/odbcinst.html unixODBC without the GUI]: or, everything you wanted to know about odbcinst but were afraid to ask
Modification de /etc/mysql/my.cnf
+
* [http://wiki.services.openoffice.org/wiki/HSQLDB:Tips_and_Tricks HSQLDB:Tips_and_Tricks]: accès à une base HSQLDB externe
bind-address            = 192.168.1.130
+
* [http://blixtra.org/blog/2006/06/30/mysql-jdbc-and-relationships-in-openofficeorg-20x/ Mysql, JDBC and relationships in Openoffice.org 2.0.x]: activer la gestion des relations pour MySQL

Version actuelle datée du 7 janvier 2009 à 12:05

Il s'agit ici d'utiliser le module base de OpenOffice.org, pour gérer une base de données MySQL.

La configuration

OpenOffice et MySQL sont sur deux machines différentes :

  • MySQL : sur une machine d'IP 192.168.1.130 Il s'agit de MySQL 5.0 (Debian GNU/Linux sarge-backports)
  • OpenOffice.org : sur une machine du réseau 192.168.1.0 Il s'agit de OpenOffice.org 2.0.3

Le serveur MySQL

La configuration du serveur MySQL ne pose pas de difficulté particulière :

  • Installation
$ aptitude install mysql-server
  • Mot de passe root
$ mysql -u root
mysql> SET PASSWORD FOR 'root' = PASSWORD('PassRoot');
  • Création de la base contacts: c'est important, car OpenOffice.org ne permet pas la création de bases. OpenOffice.org accède à des bases existantes.
mysql> CREATE DATABASE contacts;
mysql> SHOW DATABASES;
  • Création de l'utilisateur user1 + droits sur base contacts : même remarque : pour OpenOffice.org, l'utilisateur doit avoir été créé préalablement.
mysql> GRANT ALL PRIVILEGES ON contacts.* TO 'user1' IDENTIFIED BY 'PassUser1';
  • Dernière précaution : permettre l'accès à la base depuis un poste distant, en indiquant à MySQL le nom / l'adresse sur laquelle il doit écouter. Dans notre cas, il s'agit de 192.168.1.30 mais ce pourrait être un domaine pleinement qualifié, ou localhost. Modifier donc /etc/mysql/my.cnf:
bind-address            = 192.168.1.130

Sur le poste client

Indépendamment de OpenOffice.org, on va d'abord tester l'accès à la base distante, au travers d'un client MySQL

  • Installation du client MySQL
aptitude install mysql-client 
(installe aussi mysql-common). 
  • Tests de connexion :
mysql -h 192.168.1.130 -u user1 -p contacts
Enter password: PassUser1

Tout semble bien se passer :

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 33 to server version: 5.0.24a-Debian_5~bpo.1-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

A partir de là, place à quelques tests d'interrogations de la base

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| contacts           |
+--------------------+
2 rows in set (0.00 sec)
....
mysql> quit;
Bye

ODBC

Bref, tout va bien, on va maintenant tenter d'accéder à la base, toujours depuis notre poste client, mais via ODBC.

aptitude install libmyodbc
(installe aussi unixodbc)

Les fichiers /etc/odbc.ini (fichier vide) et /etc/odbcinst.ini sont créés. odbcinst.ini déclare le driver MySQL ODBC:

[MySQL]
Description     = MySQL driver
Driver          = /usr/lib/odbc/libmyodbc.so
Setup           = /usr/lib/odbc/libodbcmyS.so
CPTimeout       =
CPReuse         =
FileUsage       = 1

On peut maintenant utiliser la commande odbcinst :

# odbcinst -j
unixODBC 2.2.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
USER DATA SOURCES..: /root/.odbc.ini

CF man odbcinst pour toutes les options

On peut également utiliser la commande isql (voir plus bas)

Au préalable, il faut initialiser au moins un DSN (Data Source Name ou Data Set Name). En effet, toute connexion ODBC à une base s'initialise au travers d'un DSN existant. Ce sera vrai dans tous les cas, notamment pour initialiser une connexion ODBC depuis OpenOffice.org.

Pour créer une DSN, plusieurs solutions :

  • Modifier le fichier /etc/odbc.ini pour tous les utilisateurs du système.
  • Modifier le fichier ~/.odbc.ini pour un utilisateur donné.
  • Réaliser les modifications depuis une interface graphique ODBCConfig ou gODBCConfig (paquets debian du même nom). Les applications graphiques, au final, modifient les fichiers /etc/odbc.ini ou ~/.odbc.ini

Exemple de fichier /etc/odbc.ini modifié manuellement :

[MySQL-test]
Description     =       Base MySQL ODBC
TraceFile       =       stderr
Driver          =       MySQL
SERVER          =       192.168.1.130
USER            =       user1
PASSWORD        =
DATABASE        =       contacts

Dans ce cas, le DSN a pour nom MySQL-test

On peut alors tester, grâce à la commande isql : isql MySQL-test user1 PassUser1

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> show databases;
+-------------------+
| Database          |
+-------------------+
| information_schema|
| contacts          |
+-------------------+
2 rows affected
2 rows returned
SQL> quit;

JDBC

On peut aussi accéder à MySQL avec le connecteur JDBC.

aptitude install libmysql-java

Déclarer le connecteur auprès d'OpenOffice.org:

  • Outils -> Options -> Java -> Class path...
  • Ajouter une archive...
  • Sélectionner /usr/share/java/mysql.jar

OpenOffice.org (module Base)

La connexion à la base distante se fait alors simplement, via ODBC, au travers du DSN précédemment configuré :

Fichier 
-> Nouveau 
-> Base de données
-> Se connecter à une base de données existante 
-> MYSql 
-> Suivant
-> Connexion utilisant ODBC 
-> Suivant
-> Choisir une source de données 
-> MySQL-test
-> Nom d'utilisateur : user1 + cocher Mot de Passe requis
-> Oui je souhaite que l'assistant enregistre la base de données
-> Terminer

A ce stade, on est connecté à la base contacts, en tant que user1. Au moment de toucher à la base (par exemple pour créer des tables), il faudra entrer son mot de passe.

Ensuite, tout se passe dans OpenOffice.org

Quelques limitations du module base

Les fonctionnalités suivantes requièrent un environnement JAVA

  • assistant de création de formulaire (alors que la création de formulaire en mode ébauche ne nécessite pas de JRE).
  • assistant de création de rapport.
  • assistant de création de requête (alors que la création de requête en mode ébauche, et la création de requête en vue SQL fonctionnent sans JRE).
  • assistant de création de table (alors que la création de table en mode ébauche, et la création de vue fonctionnent sans JRE).

Installez le paquet 'openjdk-6-jre'.

La connexion avec ODBC ne gère apparemment pas les bases en UTF-8 (problèmes d'accents). Elles passent correctement en JDBC.

PostgreSQL

Variante de odbcinst.ini (cf. /usr/share/psqlodbc/odbcinst.ini.template):

[PostgreSQL]
Description     = PostgreSQL driver
Driver          = /usr/lib/odbc/psqlodbcw.so
Setup           = /usr/lib/odbc/libodbcpsqlS.so
Debug           = 0
CommLog         = 1

Variante de .odbc.ini:

[pgtest]
Description     =       Base PostgreSQL ODBC
TraceFile       =       stderr
Driver          =       PostgreSQL
SERVERNAME      =       localhost
USERNAME        =       monutilisateur
PASSWORD        =       monmotdepasse
DATABASE        =       mabasededonnees

HSQLDB

Variante pour une base HSQLDB serveur (autonome, non intégrée):

  • aptitude install libhsqldb-java
  • Ajouter /usr/share/java/hsqldb.jar dans Outils -> Options -> Java -> Classpath -> Ajouter une archive
  • Se connecter via JDBC
  • URL: jdbc: hsqldb:hsql://localhost;default_schema=true (la partie ;default_schema=true est nécessaire, Base ne permet quasiment rien sans ça)
  • Classe du pilote ODBC: org.hsqldb.jdbcDriver

Liens