Base:compléter des nouveaux champs

Bonjour,

On m'a demandé d'ajouter deux champs à la base de données d'une assoc.
J’ai adapté le fichier odb sans souci.

Maintenant, j'ai 450 membres dont les 2 champs doivent être complétés.

J'ai les informations sur une feuille de calcul.

Comment compléter la base sans avoir à tout taper?

J'ai essayé un copier/coller, mais ça n'a pas marché.
Aurai-je raté quelque chose ?

Merci de votre aide.

Pierre

Bonsoir,

Bonjour,

On m'a demandé d'ajouter deux champs à la base de données d'une assoc.
J’ai adapté le fichier odb sans souci.

Maintenant, j'ai 450 membres dont les 2 champs doivent être complétés.

Soit les membres identifiables via un "identifiant".
La feuille de calcul doit contenir si possible 3 colonnes, l'identifiant
et les 2 colonnes à ajouter.
Tu peux ensuite créér une quatrième colonne qui reprend la requête à
effectuer sur ta base de donnée.
En gros ça donnerais :
="Update ma_table where identifiant=" & CelluleIdentifiant & " set
monchampaajouter1=" & cellulechamp1 & " , monchampaajouter2=" &
cellulechamp2 & ";"

De cette manière tu vas obtenir une colonne avec toutes les commandes
"update" adéquate.
Ensuite, il suffit de copier ces commandes dans une commande SQL de ta db.

C'est une des possibilités.
Une autre peut-être plus simple, serait de créer une nouvelle table à
partir de ta feuille excel et ensuite effectuer les updates
update ma_table where identifiant=ma_nouvelle_table.identifiant set
monchampsaajouter1=ma_nouvelle_table.champ1,
monchampaajouter2=ma_nouvelle_table.champ2

nb : j'ai testé aucune des deux possibilités, y'a peut-être des erreurs de
syntaxe, mais le principe doit être +/- bon :wink:
Yves

Bonjour

+1 sur les principes donnés par Yves

J'ajouterais, au cas où, quelques précisions "en amont" dans le
raisonnement :

1. La mise à jour d'une table se fait "traditionnellement" par une requête
mettant
en oeuvre une commande "update" (cf. message de Yves)
2. Le mode "ébauche" de Base ne permet pas d'exécuter des requêtes de ce
type.
En gros il ne permet que les requêtes qui sélectionnent des données.
3. Il faut passer par la commande Outil >SQL pour exécuter de telles
requêtes.
4. Le "truc" est souvent de passer d'abord par la création d'une requête en
mode
ébauche pour sélectionner les tables et champs et définir les jointures puis
de
passer en mode SQL pour récupérer ce dernier et le copier. On peut ensuite
lancer la commande Outils > SQL et "finaliser" la requête en ajoutant
notamment
le "update". Cette technique permet d'éviter de taper les noms de champs et
tables
avec toutes les erreurs que cela suppose...

Les FAQ http://wiki.documentfoundation.org/FR/FAQ/Base/128 et
http://wiki.documentfoundation.org/FR/FAQ/Base/126 illustrent ces
techniques (bien que sur des fonctionnalités différentes).

Cordialement
Pierre-Yves

Merci Pierre-Yves et Yves,

J'ai créé une nouvelle table (Ajout) avec une clé primaire commune à ma
table Membres.

Dans une fenêtre SQL, quand je veux faire l'update :
«update Membres where IdMembre=Ajout.IdMembre set IdFiche=Ajout.IdFiche,
MdpFiche=Ajout.MdpFiche»
j'obtiens le message «Table not found in statement [update Membres]».

J'en conclus que j'ai dû louper quelque chose...
Pouvez-vous encore m'aider?

Je vous en remercie d'avance!

Pierre

et avec : update 'Membres' ?

Merci Jean-François,
mais ça ne résout malheureusement pas le problème.

Cordialement,

Pierre

Bonjour ;

Bonjour

Merci Pierre-Yves et Yves,

J'ai créé une nouvelle table (Ajout) avec une clé primaire commune à ma
table Membres.

Dans une fenêtre SQL, quand je veux faire l'update :
«update Membres where IdMembre=Ajout.IdMembre set IdFiche=Ajout.IdFiche,
MdpFiche=Ajout.MdpFiche»
j'obtiens le message «Table not found in statement [update Membres]».

J'en conclus que j'ai dû louper quelque chose...
Pouvez-vous encore m'aider?

Je vous en remercie d'avance!

Pierre

Il me semble que la syntaxe exacte devrait être :

UPDATE Membres, Ajout
    SET Membres.IdFiche = Ajout.IdFiche, Membres.MdpFiche = Ajout.MdpFiche
    WHERE Membres.IdMembre = Ajout.IdMembre

En cas de noms de champ identiques entre deux tables, l'utilisation du
nom canonique est obligatoire pour lever toute ambiguïté. D'autre part,
lorsqu'on utilise UPDATE dans un contexte multi-tables, on doit déclarer
les tables utilisées après UPDATE, qu'elles soient cibles ou sources de
mise à jour. Ici, l'erreur "table not found" concerne à mon avis la
table Ajout, pas la table Membres.

Sous une base MySQL, la syntaxe que j'indique fonctionne. Je ne sais pas
ce qu'il en est sous HSQL, mais je ne vois pas de raison que ça ne
marche pas.

Cordialement ;

Marc Romano

Merci Marc,

Ta proposition m'a aussi semblé sensée, mais elle aboutit encore à :
«Table not found in statement [UPDATE Membres]»
(c'est moi qui encadre de guillemets).

Cordialement,

Pierre

En fait, j'ai l'impression (à confirmer) que le moteur HSQL ne prend pas
en charge l'utilisation d'UPDATE en multi-tables. Je viens de faire une
recherche sur la doc en ligne de ce moteur, les explications données
pour UPDATE ne concernent qu'une utilisation mono-table.

En revanche, il semble qu'il permettrait (sous réserves) l'utilisation
de MERGE, mais outre le fait que ce n'est pas une instruction SQL très
pratique, un petit essai que je viens de faire sur un petit bout de base
monté sous LibO 3.6.1 me renvoie une erreur "unexpected token MERGE", ce
qui semble vouloir dire que le moteur implanté sous LibO ne prévoit pas
cette instruction.

Là, on coince... Il faudrait avoir quelques informations de la part des
développeurs, pour savoir exactement ce qui est implanté comme
fonctionnalités. J'avoue que je n'avais jamais tenté ce genre de mise à
jour sous HSQL, utilisant prioritairement des bases MySQL interfacées
avec LibO.

Désolé de ne pouvoir t'aider sur ce coup-ci. Je vais chercher une
solution de contournement, mais sans promesse de résultat !

Cordialement ;
Marc

Bonjour

Cela est géré avec une syntaxe du type :

UPDATE "Membres"
SET "IDFiche" = (SELECT "Ajout"."IdFiche" FROM "Ajout"
WHERE "Membres"."ID_Membre" = "Ajout"."IdMembre" )

Nota :

1. Avant toute tentative de mise à jour de tes données je suppose
que tu as fait une copie de ta base et que tu as vérifié que tu pouvais
ouvrir cette base...

2. Attention aux noms de champs ; j'ai créé rapidement une
base exemple et je n'ai pas repris exactement ta syntaxe...
(capitales, underscore)
le problème ne se serait pas posé si tu avais joint une base :slight_smile:

3. Je n'ai pas le temps de faire d'autres essais mais il me semble me
souvenir que ceci ne fonctionne que pour des tables (ok pour toi)
ou des vues. Si les données de mise à jour viennent d'une requête
il faut au préalable la transformer en vue (simple clic droit sur le
nom de la requête).

Cordialement
Pierre-Yves

Magnifique!

Je n'ai pas tout compris, mais ça a magnifiquement fonctionné.

Merci infiniment Pierre-Yves!

Au fil (régulier) de la lecture des listes de diffusion LibO
francophones, je suis épaté par l'ampleur de tes connaissances et au
moins autant par ta disponibilité.

Je pense qu'on est nombreux à te devoir de fières chandelles!

Cordialement,

Pierre

Bonjour

Cela est géré avec une syntaxe du type :

UPDATE "Membres"
SET "IDFiche" = (SELECT "Ajout"."IdFiche" FROM "Ajout"
WHERE "Membres"."ID_Membre" = "Ajout"."IdMembre" )

Nota :

1. Avant toute tentative de mise à jour de tes données je suppose
que tu as fait une copie de ta base et que tu as vérifié que tu pouvais
ouvrir cette base...

2. Attention aux noms de champs ; j'ai créé rapidement une
base exemple et je n'ai pas repris exactement ta syntaxe...
(capitales, underscore)
le problème ne se serait pas posé si tu avais joint une base :slight_smile:

3. Je n'ai pas le temps de faire d'autres essais mais il me semble me
souvenir que ceci ne fonctionne que pour des tables (ok pour toi)
ou des vues. Si les données de mise à jour viennent d'une requête
il faut au préalable la transformer en vue (simple clic droit sur le
nom de la requête).

Cordialement
Pierre-Yves

Magnifique!

Je n'ai pas tout compris, mais ça a magnifiquement fonctionné.

Merci infiniment Pierre-Yves!

Au fil (régulier) de la lecture des listes de diffusion LibO
francophones, je suis épaté par l'ampleur de tes connaissances et au
moins autant par ta disponibilité.

Je pense qu'on est nombreux à te devoir de fières chandelles!

Cordialement,

Pierre

J'abonde dans ton sens. Pierre-Yves m'a aussi dépanné et, comme toi, ses compétences me laissent admiratif.

Chapeau l'artiste !

Sincèrement.

Michel