[base] questions d'éternel débutant

Bonjour,

Je compte pendant cet été essayer pour la énième fois de transformer la feuille de calcul qui me sert de base de données en vraie base de données relationnelle. Pour éviter de me planter une fois de plus, je soumets aux surdoués de la liste quelques questions.

Quand je passe de Calc à Base, c'est-à-dire quand je crée un odb à partir d'un ods, je n'arrive pas à mettre de clé primaire, ce qui est apparemment indispensable pour créer des relations. Est-ce possible ? Sinon, comment faire autrement qu'en créant "ex nihilo" et en retapant 200 enregistrements avec de très nombreux champs ?

À (très) long terme, si j'arrive à créer quelque chose qui fonctionne, je voudrais le proposer à mes collègues. Actuellement, chacun utilise sa propre disposition de colonnes, ce qui ne facilite pas les échanges. Est-il envisageable d'échanger des enregistrements ? A priori, il faudrait transmettre les données de la table principale et reconstruire les liens avec les tables secondaires (dont le contenu change pour chaque collègue) ; Base est-il capable de s'y retrouver dans les index ?

À chacun de mes essais, je me suis rendu compte en cours de travail (malgré une longue préparation sur papier) que j'avais besoin de modifier la structure de la base, ce qui n'était plus possible (ou plutôt, il aurait fallu utiliser des commandes SQL auxquelles je ne comprenais rien). Est-il vraiment impossible de corriger simplement des erreurs de conception ?

J'utilise actuellement dans ma feuille de calcul des listes déroulantes (merci Pierre-Yves !) qui vont piocher leurs valeurs dans d'autres onglets. Est-il possible (facile ?) de créer plusieurs tables liées à partir des différents onglets ? J'arrive bien à créer des tables différentes mais elles sont dans des odb différents alors qu'il faudrait qu'elles soient dans le même.

Je ne comprends pas les discussions sur tous ces moteurs internes, externes… Concrètement, si je crée une base (sans doute avec la version 3.6, je vais faire ça au mois d'août) et que le "moteur interne" change dans un an ou deux, est-ce que je risque de ne plus pouvoir travailler avec ma base ? Est-ce que les données enregistrées avec le moteur interne peuvent éventuellement être traitées avec un moteur externe ?

Le wiki n'a apparemment rien sur Base. À part les anciens docs de OOo, auriez-vous des conseils pour des lectures répondant aux questions ci-dessus ?

Merci d'avance,

Henri

Bonjour, Henri ;

Il est difficile de te répondre sans avoir les données elles-mêmes sous
les yeux. Je vais essayer toutefois d'apporter quelques réponses simples
aux questions les plus simples.

Quand je passe de Calc à Base, c'est-à-dire quand je crée un odb à
partir d'un ods, je n'arrive pas à mettre de clé primaire, ce qui est
apparemment indispensable pour créer des relations. Est-ce possible ?
Sinon, comment faire autrement qu'en créant "ex nihilo" et en retapant
200 enregistrements avec de très nombreux champs ?

Oui, c'est possible. Je suppose que tu passes par un simple
copier/coller à partir de Calc dans Base, et je suppose de même que la
première ligne de ta plage de cellule contient les noms des champs.
Lorsque l'assistant d'importation te demande "Formatage de type", te
permettant de choisir le format des champs dans Base, il suffit de faire
un clic droit dans la fenêtre de gauche sur le champ qui doit devenir
clé primaire dans Base et de sélectionner l'entrée "clé primaire" (il
n'y a qu'une entrée, pas grand risque de se tromper...).

Si la clé primaire de la table est composée de deux champs (clé
concaténée) il faut sélectionner les deux champs (Ctrl + clic) avant de
faire le clic droit.

À (très) long terme, si j'arrive à créer quelque chose qui fonctionne,
je voudrais le proposer à mes collègues. Actuellement, chacun utilise
sa propre disposition de colonnes, ce qui ne facilite pas les
échanges. Est-il envisageable d'échanger des enregistrements ? A
priori, il faudrait transmettre les données de la table principale et
reconstruire les liens avec les tables secondaires (dont le contenu
change pour chaque collègue) ; Base est-il capable de s'y retrouver
dans les index ?

Pas de réponse possible sans examiner les différentes sources. A priori,
oui, mais en bricolant (et ça n'a rien à voir avec Base ou un autre
outil, c'est une question de structure et de logique : un ordinateur est
un tas de ferraille, il est rigoureusement incapable d'"interpréter" les
données qu'il voit). Il serait infiniment plus simple que les tables
secondaires aient la même structure, ça sera infiniment moins compliqué.

À chacun de mes essais, je me suis rendu compte en cours de travail
(malgré une longue préparation sur papier) que j'avais besoin de
modifier la structure de la base, ce qui n'était plus possible (ou
plutôt, il aurait fallu utiliser des commandes SQL auxquelles je ne
comprenais rien). Est-il vraiment impossible de corriger simplement
des erreurs de conception ?

Je ne vois pas quel est le problème. Si des liaisons ("relations", mais
je n'aime pas le terme qui induit une confusion) ont été définies et que
la modification remet en cause des l'intégrité des données, oui, c'est
normal que ce soit refusé. Il faut dans ce cas supprimer les liaisons
avant de faire toute modification de structure et les recréer ensuite.

En y réfléchissant, il me semble avoir eu un problème similaire,
précisément lorsque les liaisons sont définies. Base n'accepte plus de
modification de structure dans ce cas. La solution est celle que je
décris ci-dessus.

J'utilise actuellement dans ma feuille de calcul des listes
déroulantes (merci Pierre-Yves !) qui vont piocher leurs valeurs dans
d'autres onglets. Est-il possible (facile ?) de créer plusieurs tables
liées à partir des différents onglets ? J'arrive bien à créer des
tables différentes mais elles sont dans des odb différents alors qu'il
faudrait qu'elles soient dans le même.

Pour créer plusieurs tables par copier/coller à partir de Calc, il
suffit de répéter l'opération dans Base, dans la même base de données.
Sinon, je ne comprends pas ton problème. Peux-tu être plus explicite ?

Je ne comprends pas les discussions sur tous ces moteurs internes,
externes… Concrètement, si je crée une base (sans doute avec la
version 3.6, je vais faire ça au mois d'août) et que le "moteur
interne" change dans un an ou deux, est-ce que je risque de ne plus
pouvoir travailler avec ma base ? Est-ce que les données enregistrées
avec le moteur interne peuvent éventuellement être traitées avec un
moteur externe ?

Il existe plusieurs possibilités. Il est toujours possible de faire
l'opération inverse à celle de la création des tables à partir de Calc
(copier/coller de Base vers Calc), on récupère les données ce qui est
quand même le plus important.

La seconde est que les développeurs prévoient un outil de transfert des
anciennes bases vers le nouveau moteur. Possible mais ça risque d'être
un peu long à développer, il n'est donc pas certain que ce soit une
priorité et je le comprends assez.

La troisième est que dès le départ tu raisonnes avec un moteur externe,
comme MySQL par exemple. Ce n'est pas très difficile à installer et à
paramétrer, tu trouveras, ici ou sur les forums spécialisés MySQL,
suffisamment d'aide pour le faire. Les avantages sont multiples : tu
t'affranchis tout de suite du problème de compatibilité, tu peux très
facilement passer d'une base personnelle à une base partagée par
plusieurs en réseau, tu peux utiliser de nombreux outils (ex : Heidi
SQL, très pratique) pour administrer simplement ta base (si LibO est
performant en ce qui concerne l'exploitation des données, il l'est
beaucoup moins pour l'administration. Ça n'a rien d'anormal, c'est même
mieux comme ça).

Le wiki n'a apparemment rien sur Base. À part les anciens docs de OOo,
auriez-vous des conseils pour des lectures répondant aux questions
ci-dessus ?

Malheureusement, non. Il n'existe pas grand-chose à ma connaissance sur
Base. J'ai bien dans l'idée de créer quelques documents, mais c'est
encore à l'état de fantasme dans ma tête (comme participer davantage au
projet LibO). Un jour, ma retraite viendra...

Merci d'avance,

Henri

Si ces quelques indications peuvent t'aider, j'en suis heureux.

Cordialement ;
Marc

Bonjour

Henri Boyet wrote

Le wiki n'a apparemment rien sur Base. À part les anciens docs de OOo,
auriez-vous des conseils pour des lectures répondant aux questions
ci-dessus ?

Sur la soixantaine de fiches existantes il me semble en avoir pourtant
créé une vingtaine... et apporté des mises à jour substantielles aux
autres...

Ce n'est certes pas assez mais il me semble quand même qu'on ne
peut dire qu'il n'y a rien hormis ces "anciens docs".

http://wiki.documentfoundation.org/FR/FAQ/Base

Cordialement
Pierre-Yves

Bonjour, Henri ;

Il est difficile de te répondre sans avoir les données elles-mêmes sous
les yeux. Je vais essayer toutefois d'apporter quelques réponses simples
aux questions les plus simples.

Bonjour Marc,

Merci pour ta longue réponse très détaillée. Je ne vais pas avoir le temps pour l'instant de l'exploiter, je vais m'y plonger dans trois semaines.

Quand je passe de Calc à Base, c'est-à-dire quand je crée un odb à
partir d'un ods, je n'arrive pas à mettre de clé primaire, ce qui est
apparemment indispensable pour créer des relations. Est-ce possible ?
Sinon, comment faire autrement qu'en créant "ex nihilo" et en retapant
200 enregistrements avec de très nombreux champs ?

Oui, c'est possible. Je suppose que tu passes par un simple
copier/coller à partir de Calc dans Base, et je suppose de même que la
première ligne de ta plage de cellule contient les noms des champs.
Lorsque l'assistant d'importation te demande "Formatage de type", te
permettant de choisir le format des champs dans Base, il suffit de faire
un clic droit dans la fenêtre de gauche sur le champ qui doit devenir
clé primaire dans Base et de sélectionner l'entrée "clé primaire" (il
n'y a qu'une entrée, pas grand risque de se tromper...).

Si la clé primaire de la table est composée de deux champs (clé
concaténée) il faut sélectionner les deux champs (Ctrl + clic) avant de
faire le clic droit.

En fait, lors de mes essais, je ne faisais pas forcément de copier/coller de Calc dans Base. Je ne me souviens plus pourquoi j'avais abandonné cette méthode, il me semble que c'était une question de formats des champs. J'avais essayé une autre démarche : créer une nouvelle base, se connecter à une base existante, tableur. C'est sans doute là que je n'avais pas de clé primaire. À creuser.

À (très) long terme, si j'arrive à créer quelque chose qui fonctionne,
je voudrais le proposer à mes collègues. Actuellement, chacun utilise
sa propre disposition de colonnes, ce qui ne facilite pas les
échanges. Est-il envisageable d'échanger des enregistrements ? A
priori, il faudrait transmettre les données de la table principale et
reconstruire les liens avec les tables secondaires (dont le contenu
change pour chaque collègue) ; Base est-il capable de s'y retrouver
dans les index ?

Pas de réponse possible sans examiner les différentes sources. A priori,
oui, mais en bricolant (et ça n'a rien à voir avec Base ou un autre
outil, c'est une question de structure et de logique : un ordinateur est
un tas de ferraille, il est rigoureusement incapable d'"interpréter" les
données qu'il voit). Il serait infiniment plus simple que les tables
secondaires aient la même structure, ça sera infiniment moins compliqué.

Je constate que je me suis mal exprimé. Je ne parlais pas d'échanges entre des bases de types différents mais entre des bases de mêmes structures. Supposons que la même commune a un emplacement différent dans la table «T_Commune» de deux utilisateurs différents. Si j'importe des enregistrements de la table «T_Eleves», le champ «Commune» ne contient pas le nom de la commune mais un index vers la ligne de la table «T_Communes». Que se passe-t-il puisque l'index ne pointe plus vers la bonne valeur ? Je ne sais pas si je suis clair…

À chacun de mes essais, je me suis rendu compte en cours de travail
(malgré une longue préparation sur papier) que j'avais besoin de
modifier la structure de la base, ce qui n'était plus possible (ou
plutôt, il aurait fallu utiliser des commandes SQL auxquelles je ne
comprenais rien). Est-il vraiment impossible de corriger simplement
des erreurs de conception ?

Je ne vois pas quel est le problème. Si des liaisons ("relations", mais
je n'aime pas le terme qui induit une confusion) ont été définies et que
la modification remet en cause des l'intégrité des données, oui, c'est
normal que ce soit refusé. Il faut dans ce cas supprimer les liaisons
avant de faire toute modification de structure et les recréer ensuite.

En y réfléchissant, il me semble avoir eu un problème similaire,
précisément lorsque les liaisons sont définies. Base n'accepte plus de
modification de structure dans ce cas. La solution est celle que je
décris ci-dessus.

Ce n'était pas un problème de relations. Il me semble me rappeler que le problème principal était de rajouter un champ. Mais je n'arrivais pas non plus à corriger des formats de champs qui ne s'étaient pas importés correctement, en particulier les booléens.

J'utilise actuellement dans ma feuille de calcul des listes
déroulantes (merci Pierre-Yves !) qui vont piocher leurs valeurs dans
d'autres onglets. Est-il possible (facile ?) de créer plusieurs tables
liées à partir des différents onglets ? J'arrive bien à créer des
tables différentes mais elles sont dans des odb différents alors qu'il
faudrait qu'elles soient dans le même.

Pour créer plusieurs tables par copier/coller à partir de Calc, il
suffit de répéter l'opération dans Base, dans la même base de données.
Sinon, je ne comprends pas ton problème. Peux-tu être plus explicite ?

C'est sans doute parce que j'avais abandonné la technique du copier/coller. Je créais donc une nouvelle base à chaque fois.

Je ne comprends pas les discussions sur tous ces moteurs internes,
externes… Concrètement, si je crée une base (sans doute avec la
version 3.6, je vais faire ça au mois d'août) et que le "moteur
interne" change dans un an ou deux, est-ce que je risque de ne plus
pouvoir travailler avec ma base ? Est-ce que les données enregistrées
avec le moteur interne peuvent éventuellement être traitées avec un
moteur externe ?

Il existe plusieurs possibilités. Il est toujours possible de faire
l'opération inverse à celle de la création des tables à partir de Calc
(copier/coller de Base vers Calc), on récupère les données ce qui est
quand même le plus important.

La seconde est que les développeurs prévoient un outil de transfert des
anciennes bases vers le nouveau moteur. Possible mais ça risque d'être
un peu long à développer, il n'est donc pas certain que ce soit une
priorité et je le comprends assez.

La troisième est que dès le départ tu raisonnes avec un moteur externe,
comme MySQL par exemple. Ce n'est pas très difficile à installer et à
paramétrer, tu trouveras, ici ou sur les forums spécialisés MySQL,
suffisamment d'aide pour le faire. Les avantages sont multiples : tu
t'affranchis tout de suite du problème de compatibilité, tu peux très
facilement passer d'une base personnelle à une base partagée par
plusieurs en réseau, tu peux utiliser de nombreux outils (ex : Heidi
SQL, très pratique) pour administrer simplement ta base (si LibO est
performant en ce qui concerne l'exploitation des données, il l'est
beaucoup moins pour l'administration. Ça n'a rien d'anormal, c'est même
mieux comme ça).

J'avais acheté un livre qu'on m'avait recommandé, "Pratique de MySQL et PHP" mais ça dépassait mes capacités. Est-il possible d'utiliser MySQL sans PHP ?

...

Si ces quelques indications peuvent t'aider, j'en suis heureux.

Cordialement ;
Marc

C'est un bon début, j'appellerai sans doute au secours en août.

Encore merci,

Henri

Bonjour Pierre-Yves,

Merci pour ta réponse.

Effectivement, je n'avais pas cherché au bon endroit. J'allais à
http://wiki.documentfoundation.org/FR/La_documentation_de_l'utilisateur#Base
qui est vide. Je n'ai pas eu le réflexe FAQ. À cette nouvelle adresse, je vois des lectures intéressantes en particulier sur ma bête noire, les formulaires et sous-formulaires.

D'autre part, quand je parle des "anciens docs de OOo", je pense par exemple au how-to "de Calc à Base" qui date de 2006. Même si Base évolue moins que le reste de la suite, je suppose qu'il y a quand même des changements depuis.

Bonne journée,

Henri

Bonjour, Henri ;

En fait, lors de mes essais, je ne faisais pas forcément de
copier/coller de Calc dans Base. Je ne me souviens plus pourquoi
j'avais abandonné cette méthode, il me semble que c'était une question
de formats des champs. J'avais essayé une autre démarche : créer une
nouvelle base, se connecter à une base existante, tableur. C'est sans
doute là que je n'avais pas de clé primaire. À creuser.

Cet élément donne, me semble-t-il, l'explication à plusieurs de tes
problèmes. Ceux-ci d'abord, mon interprétation ensuite :

(1) Je constate que je me suis mal exprimé. Je ne parlais pas
d'échanges entre des bases de types différents mais entre des bases de
mêmes structures. Supposons que la même commune a un emplacement
différent dans la table «T_Commune» de deux utilisateurs différents.
Si j'importe des enregistrements de la table «T_Eleves», le champ
«Commune» ne contient pas le nom de la commune mais un index vers la
ligne de la table «T_Communes». Que se passe-t-il puisque l'index ne
pointe plus vers la bonne valeur ? Je ne sais pas si je suis clair…

(2) Ce n'était pas un problème de relations. Il me semble me rappeler
que le problème principal était de rajouter un champ. Mais je
n'arrivais pas non plus à corriger des formats de champs qui ne
s'étaient pas importés correctement, en particulier les booléens.

En fait, tu ne crées pas de "nouvelle" base de données avec la méthode
que tu utilises. Tu crées un simple "conteneur" qui va conserver les
paramètres de connexion à la "vraie" base de données et les objets
spécifiques que tu pourras y rajouter (requêtes, formulaires, rapports).
Mais les données elles-mêmes ainsi que la structure de la base restent
conservées dans la source originelle, c'est-à-dire le classeur dans ton cas.

Base fonctionne de la même façon pour la connexion vers n'importe quelle
source externe, que ce soit un classeur, une base MySQL ou autre. C'est
assez simple à vérifier : il suffit de regarder la taille du fichier odb
entre une base "native" et une base externe. Elle varie
considérablement, et c'esr encore plus net lorsque les données sont les
mêmes, avec une base sous HSQL et les mêmes données sous MySQL par
exemple. C'est aussi facile à vérifier autrement : fais une modification
dans le classeur d'origine et réouvre la base : la modification sera
apparente dans Base. Les données ne sont donc pas conservées dans Base,
celle-ci se comporte comme une simple "fenêtre" vers les données d'origine.

Ça peut paraître enquiquinant selon le problème que tu as à résoudre,
mais en réalité c'est très bien comme ça. C'est même ça qui va permettre
de partager une base de données entre plusieurs utilisateurs, et de
permettre à chacun d'utiliser les données selon ses besoins propres : le
"conteneur" odb pourra être personnel à chacun mais les données seront
les mêmes pour tous. Pédagogiquement (je suis très égoïste...), ça ouvre
de très intéressantes possibilités.

Ça veut dire aussi que selon le type de la source, tu pourras ou ne
pourras pas modifier la structure de la base. Ce sera possible par
exemple sur une base MySQL (en fonction des droits utilisateurs sur la
base et depuis peu, il me semble, parce que je me souviens que ce
n'était pas possible sous OpenOffice), mais pas une une base de type
"classeur", qui ne possède pas les caractéristiques (clé primaire,
nature de champ, etc.) d'une table de base de données.

AMHA, la connexion vers une feuille de calcul ne doit pas être retenue
lorsqu'on veut construire une base de données relationnelle. Si dans les
deux outils on parle de "table", la nature même de ces tables, leurs
caractéristiques propres sont trop éloignées l'une de l'autre pour
qu'une transition complète soit possible. La possibilité de transférer
des tables de Calc vers Base est très intéressante, par exemple pour
récupérer de gros volumes de données d'une autre source non directement
compatible, ou si on veut "manipuler cette source différemment de ce que
permet la version originelle. Dans un tel cas, exporter les données
d'origine au format texte, les importer dans Calc puis dans Base,
représente un gain de temps considérable par rapport à la saisie ex
nihilo de ces mêmes données.

La possibilité de se connecter directement sur une feuille de calcul est
aussi intéressante, mais dans des cas particulier : je veux faire par
exemple un publipostage à partie d'une liste d'adresses saisies dans un
classeur. Je crée un "conteneur" Base lié à la feuille de calcul et
j'utilise ce fichier odb comme source de données dans Writer. Pas de
problème, c'est ultra-rapide et ça marche très bien. Mais à partir du
moment où je veux pouvoir manipuler les adresses (quelles qu'en soient
les raisons, la simple connexion vers la table ne suffit plus, il faut
créer une "vraie" base relationnelle.

J'avais acheté un livre qu'on m'avait recommandé, "Pratique de MySQL
et PHP" mais ça dépassait mes capacités. Est-il possible d'utiliser
MySQL sans PHP ?

Oui, sans aucune difficulté. Il est possible d'installer séparément un
serveur PHP et un serveur MySQL. En fait, installer les deux (plus un
serveur Apache ou IIS) est intéressant (et indispensable) pour ceux qui
veulent créer une base de données accessible via un navigateur. MySQL
fournit le moteur de base de données, Apache (ou IIS) l'accès Web et PHP
l'outil de programmation qui permet de faire ce que l'on veut.

C'est aussi intéressant (et indispensable) lorsqu'on veut administrer sa
base de données via la célèbre interface PHPMyAdmin. Mais on peut très
bien administrer une base MySQL avec des outils spécifiques comme
HeidiSQL ou MyDB Studio (que j'utilisais il y a encore deux ans et ai
abandonné au profit du premier cité, libre et aussi efficace une fois
qu'on l'a pris en main).

...

Si ces quelques indications peuvent t'aider, j'en suis heureux.

Cordialement ;
Marc

C'est un bon début, j'appellerai sans doute au secours en août.

Encore merci,

Henri

Pas de problème, il y aura toujours quelqu'un au bout du fil.

Cordialement ;
Marc

Bonjour Marc,

Merci pour tes nouvelles explications (on sent le pédagogue :wink: ) ; j'ai maintenant compris ma principale erreur.
Je créerai donc une nouvelle base et non un simple conteneur !

Dans un premier temps, je pense plus sage de me limiter à LibreOffice. Peut-être que plus tard, si j'arrive à maîtriser cet outil, je passerai au niveau supérieur avec MySQL…

Bonne journée,

Henri