Comment peut-on copier les valeurs d'un champ d'une table, dans un champ d'une autre table?

Bonjour à toutes et tous, et excellente année 2022 !

Ce que je cherche à résoudre :
J’ai une table nommée “T_Communes” composée de nombreux champs.

  • J’ai entre autres un champ nommé “Nom_communes”

J’ai une autre table nommée “T_Circonscriptions”

  • Dans laquelle des champ qui se nomment “Ville”, “Canton”, “Circonscription”

J’ai créé dans la table “T_Communes” des champs également nommées “Canton”, “Circonscription” (Deux champs vides pour l’instant)

Vous l’avez certainement compris, j’aimerais transférer les données de ces champs communs depuis la table “T_Circonscriptions” vers la table “T_Communes”
A noter :

  1. Seul les champs “Ville” de “T_Circonscription” et “Nom_communes” de “T_Communes” peuvent être comparés. (Ils doivent correspondre.)
  2. j’ai moins de données dans la table “T_Circonscriptions” que dans la table “T_Communes”
    (Pour résumer, j’ai moins de villes dans “T_Circonscriptions” que dans “T_Communes”

Pour moi, le but est de supprimer la table “T_Circonscriptions” une fois que ses valeurs importantes seront dans la table “T_Communes” (“Canton” & “Circonscription”)

Pardonnez-moi si c’est un tantinet confus…

Je pense qu’il est évident de passer par une macro… ??? (Requête ?)
Et cela ne servira qu’une fois. A la main, il y a des centaines d’enregistrements… Et ce n’est pas très élégant, n’est-ce-pas ?

Mille Mercis d’avance et bonne fin de journée !

Bonsoir à toutes et tous,

J’ai essayé ce code :

REM execute!
if IsNull(ThisDatabaseDocument.CurrentController.ActiveConnection) then
ThisDatabaseDocument.CurrentController.connect
endif
Dim oStatement As Object
Dim strSQL_Canton As String
Dim strSQL_Old_Circonscription As String
Dim strSQL_New_Circonscription As String

strSQL_Canton =“UPDATE ““T_Communes”” set ““Canton”” = ““T_Circonscriptions_Majuscules””.”“Ville”" WHERE ““T_Communes””."“Nom.commune”" = ““T_Circonscriptions_Majuscules””."“Ville”""

Print strSQL_Canton ’ REM (Pour vérifier la valeur de la variable strSQL_Canton)

oStatement = ThisDatabaseDocument.CurrentController.ActiveConnection.createStatement()

oStatement.execute(strSQL_Canton)
'oStatement.execute(strSQL_Old_Circonscriptionn)
'oStatement.execute( strSQL_New_Circonscription)

End Sub


ça ne fonctionne pas, probablement en raison d’une erreur dans la définition de la variable ‘strSQL’, mais pas sûr non plus de la syntaxe UPDATE
D’autre part, faut-il définir un lien entre les deux tables ?

Message d’erreur ( Sur la ligne oStatement.execute(strSQL_Canton) ) :

Erreur d’exécution BASIC.
Une exception s’est produite :
Type: com.sun.star.sdbc.SQLException
Message: firebird_sdbc error:
*Dynamic SQL Error
*SQL error code = -206
*Column unknown
*T_Circonscriptions_Majuscules.Ville
*At line 1, column 111
caused by
‘isc_dsql_prepare’

Merci pour votre aide !

Bonjour à toutes et tous.
Rien à faire, je débute avec LibreOffice et les macros sont encore d’étranges langages pour moi…
Je joins à ma prose une petite base de données.
Si un désœuvré compatissant et généreux pouvait m’éclairer…
J’aimerais pouvoir “injecter” les champs " Canton" et “Nouvelle Circonscription” de la Table “T_Circonscriptions_Majuscules” dans les champs idoines de la table “T_Commune”
Le critère étant :
Le champ “Ville” de la table “T_Circonscriptions_Majuscules” doit être identique au champ “Nom_commune” de la table “T_Communes”.
Il y a une macro dans le fichier joint que je tente désespérément de mettre au point depuis deux jours !
(Ne vous moquez pas, hein ! j’en vois qui rigolent !)
Je crois bien que si j’avais commencé à renter les données à la main d’un peu plus de 600 enregistrements, j’aurais déjà fini depuis que je tourne en rond ! :rofl: :astonished:
Mais j’ai envie d’apprendre, Base me plaît bien.
Et cette macro n’est censée ne servir qu’une fois ! Je détruirai la table inutile une fois la chose résolue…
Merci pour votre aide !
Communes_Circonscriptions.odb (29.9 KB)

operer.odt (30.4 KB)

Bonjour ,
J’ai préféré vous joindre un exemple de macro pour une base que j’ai créée pour une gestion de comptes personnels . Vous y avez les commandes "insert into " avec conditions pour insérer dans une autre table ;“delete from” pour supprimer avec conditions également et même "update " pour une mise à jour avec conditions ,qui sont des requêtes sql et évidemment les déclarations (dim, object) ,déclaration de la base etc . Cette macro s’effectue à partir d’un bouton dans un formulaire .D’où les déclarations de formulaire et sous-formulaire . Ces commandes doivent pouvoir s’exécuter à partir d’outils → sql si on ne doit le faire qu’une fois . Ma base est sous Firebird .En espérant que cela vous aidera . :blush:

1 Like

Mille mercis !

Je vais étudier attentivement votre solution et je vous tiens au courant !

Vraiment très sympa de m’aider, @aboulafia !

Excellente soirée, je ne pense pas répondre avant demain…

1 Like

Bonjour ,
Communes_Circonscriptions.odb (30.7 KB)

Le mieux , c’est de créer une requête qui permet une liaison entre les tables .(voir ma requête rq) et d’ensuite avec le bouton droit sur la requête choisir créer une vue qui va créer la table désirée . Ensuite si vous ne maitrisez pas trop le sql vous pouvez éditer la requête en sql afin d’avoir un aperçu de la formulation . Perso, je n’utilise jamais d’espace, ou d’underscore ainsi que les majuscules dans les noms de champs et de fichiers .C’est plus facile à recopier et cela évite des erreurs dont on se demande d’où ça vient .

Bonjour à toutes et tous,
Mille mercis @aboulafia !!!
Ça marche Nickel ! Yes ! :+1: :+1: :+1:
Quelques petites modifs dans un formulaire et Bingo !
Vraiment, je vous suis très reconnaissant pour la peine que vous vous êtes donnée pour moi.
Je ne peux même pas vous dire “à charge de revanche”, je suis une vraie bille en la matière…
Et, concernant la détermination des noms, je vais suivre vos conseils, vous avez cent fois raison !
Excellente journée, vous m’avez rendu un fier service…

Avec plaisir .Content pour vous. :grinning: Pour info ,si vous voulez aller plus loin et si vous n’y avez jamais jeté un coup d’oeil ,vous avez les guides Libreoffice sur Base ici ,vous avez aussi les tutoriels de développez.com : ici

Merci encore une fois @aboulafia !
Attention !! : Votre lien vers Développ… pointe sur un site frauduleux… Voire dangereux.
Grosse alerte sur mon Ordi !
Ça ne vient pas de vous, quand j’ai mis le lien vers Développ… et que j’ai cliqué dessus, même punition!!
Ce forum ferait-il de la rétention, où est-il “Hacké” ???
Étrange tout de même…
Comme quoi… Les protections anti Malwares / Virus sont parfois utiles…
Bonne fin de journée ,