#1 Le 26/09/2024, à 19:29
- El Catala
[Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Bonsoir,
Depuis un moment, j' essaie de mettre à jour une table de Lo avec un script Python.
Je lance le script depuis un bouton placé sur un formulaire.
En fait, rien ne se passe:
Pas d' insertion de données
Aucun message d' erreur.
Aucun retour d' informations depuis les nombreux print que j' ai placé au fil du script.
#!/usr/bin/env python3
import pyuno
def miseajourTable(event = True):
# Obtenir le contexte du composant
context = XSCRIPTCONTEXT.getComponentContext()
# Accéder au document actuel
document = XSCRIPTCONTEXT.getDocument()
# Accéder à la base de données via le document
connection = None
try:
print("Tentative de connexion à la base de données...")
# Accéder à l'interface de base de données
database_context = context.getByName("/com/sun/star/sdb/DatabaseContext")
data_source = database_context.getByName("/mnt/El_Casot/Yvon/Informatique/LibreOffice/Base_Test")
# Établir la connexion
connection = data_source.getConnection("", "")
if connection:
print("Connexion réussie.")
# Créer une instruction
stmt = connection.createStatement()
# Insertion dans la table T_Departement
sql = "INSERT INTO T_Departement(Numero, Departement) VALUES (88, 'Vosges')"
print("Exécution de la requête SQL :", sql)
stmt.execute(sql)
connection.commit()
print("Insertion réussie.")
except Exception as e:
print("Erreur lors de l'accès à la source de données :", str(e))
finally:
if 'connection' in locals() and connection:
connection.close()
g_exportedScripts = (miseajourTable(),)
Ceci n' est qu' un test car la finalité, lorsque le script sera fonctionnel, est de modifier des champs d' une table à l' aide de données contenu dans un fichier.csv.
Je ne vois vraiment pas comment régler ce problème.
Cordialement
Dernière modification par El Catala (Le 06/10/2024, à 13:10)
PC portable HP Laptop 17
Xubuntu 22.04.2 Lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.21: LibreOffice 7: Ancestris 0.12:
Hors ligne
#2 Le 27/09/2024, à 08:22
- Rafbor
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Bonjour,
tu es bien dans un formulaire LO Base, pas dans Calc ?
J'ai déjà fait ça dans Base, mais en basic, pas en python.
Xubuntu 22.04 - Mes projets sur Github
Hors ligne
#3 Le 27/09/2024, à 12:01
- El Catala
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Bonjour;
Pas de soucis, je suis bien dans LO Base. Un débogage sous APSO m' a permis de trouver enfin la ligne en erreur. Cette ligne de commande est:
database_context = context.getByName("/com/sun/star/sdb/DatabaseContext")
L' erreur est: attibut error
Il semblerai que l' on ne puisse aps utiliser getByName. Je ne vois pas ou chercher pour remplasser cette ligne.
Cordialment
PC portable HP Laptop 17
Xubuntu 22.04.2 Lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.21: LibreOffice 7: Ancestris 0.12:
Hors ligne
#4 Le 27/09/2024, à 12:18
- Rafbor
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
D'après la doc, l'interface XScriptContext a bien une fonction getComponentContext qui renvoie un objet ::com::sun::star::uno::XComponentContext
A partir duquel tu as une fonction publique getValueByName
Essaie avec:
database_context = context.getValueByName("/com/sun/star/sdb/DatabaseContext")
Xubuntu 22.04 - Mes projets sur Github
Hors ligne
#5 Le 27/09/2024, à 16:39
- El Catala
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Bonsoir,
Effectivement, dans la ligne de code:
database_context = context.getValueByName("/com/sun/star/sdb/DatabaseContext")
il n' y aplus d' erreur.
Par contre, dans la ligne suivante,
data_source = database_context.getByName("/mnt/El_Casot/Yvon/Informatique/LibreOffice/Base_Test")
dans le cas de la forme getByName l' erreur suivante est levée:
None Type , object has no attribute getByName
le résultat est le même avec getValueByName.
Je vais approfondir cette documentation que vous m' avez transmise pour tenter dit voir plus clair.
Cordialement
PC portable HP Laptop 17
Xubuntu 22.04.2 Lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.21: LibreOffice 7: Ancestris 0.12:
Hors ligne
#6 Le 27/09/2024, à 17:17
- Rafbor
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Je sais pas de quel exemple tu es parti, mais il y a un truc qui me parait bizarre, puisque tu es déjà dans la base de données et que tu lances une macro, il n'est pas nécessaire de préciser le chemin pour accéder à cette base, la ligne
data_source = database_context.getByName("/mnt/El_Casot/Yvon/Informatique/LibreOffice/Base_Test")
me semble inutile.
En basic, on utilise l'object "ThisDatabaseDocument" qui représente la base de données courante et pour ouvrir la connection
ThisDatabaseDocument.CurrentController.connect("","")
maConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
Je pourrais pas t'aider plus en Python.
Xubuntu 22.04 - Mes projets sur Github
Hors ligne
#7 Le 29/09/2024, à 09:59
- El Catala
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Bonjour,
Bon, suite aux nombreuses recherches effectuées sur le net, j' ai trouvé un script pour vérifier l' etat de la connection. En retour de son execution, j' ai le message d' erreur suivant:
Erreur de connexion: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found and no default driver specified (0) (SQLDriverConnect)')
Il semblerai qu' il manque un driver ?
Voici le script:
#! /usr/bin/env python3
import pyodbc
try:
conn = pyodbc.connect('DSN=Base_Test;')
print("Connection réussie")
except pyodbc.Error as e:
print("Erreur de connexion:", e)
Avez-vous une idée pour s' en sortir!!!
Cordialement
PC portable HP Laptop 17
Xubuntu 22.04.2 Lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.21: LibreOffice 7: Ancestris 0.12:
Hors ligne
#8 Le 30/09/2024, à 07:30
- Rafbor
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Bonjour,
à mon avis, ta base n'est pas enregistrée au niveau système, c'est pour ça qu'elle n'est pas visible via DSN.
Quand tu crées une nouvelle base de données, on te demande si tu veux que la base soit référencée, il faut cocher Oui.
Tu peux l'enregistrer à posteriori via le menu Options->Libre Office Base->Bases de données
puis cliquer sur nouveau pour enregistrer ta base.
Xubuntu 22.04 - Mes projets sur Github
Hors ligne
#9 Le 30/09/2024, à 19:20
- El Catala
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Bonsoir,
J' ai suivi votre conseil, la base est maintenant enregistrée. Malheureusement cela ne change rien.
Je ne comprends vraiment pas pourquoi cela ne veut pas marcher.
Cordialement et merci de votre aide.
PC portable HP Laptop 17
Xubuntu 22.04.2 Lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.21: LibreOffice 7: Ancestris 0.12:
Hors ligne
#10 Le 30/09/2024, à 19:35
- Rafbor
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Si tu veux faire ça en basic, je peux t'aider, mais pas en python, désolé.
Xubuntu 22.04 - Mes projets sur Github
Hors ligne
#11 Le 30/09/2024, à 20:15
- El Catala
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
C' est d' autant plus incompréhensible que j' ai des script en scrptforge python qui interréagissent avec des formulaires des bases libreoffice .
Je vais encore tester deux trois choses avant de retourner au Basic( que je n' aime pas du tout).
Merci de votre proposition. Comme on dit à suivre.
Bonne soirée
PC portable HP Laptop 17
Xubuntu 22.04.2 Lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.21: LibreOffice 7: Ancestris 0.12:
Hors ligne
#12 Le 01/10/2024, à 13:03
- El Catala
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Bonjour,
Au final, je me demande si, à force de réaliser des tests, ma version de LibreOffice n' est pas dégradée. J' ai 4 bases de données réalisées avec LO Base Hsqldb.
Une pour gérer mes photos.
Une pour gérer mes plans pour le bricolage.
Une pour gérer des finances.
Et, enfin une qui me permet de réaliser les tests de scripts.
Ces quatres bases utilisent les même routines pour la gestions des formulaires et autres. Seul le préfixe change suivant la base concernée, par exemple:
phtMn.py, brsMn.py, plnMn.py et tstMn.py.
Alors que pour les trois premières, les scripts python fonctionnent sans problème, pour la dernière, (celle des tests), plus rien ne se passe.
Pire encore, j' utilise scriptforge python pour l' ensemble des BD, en voulant créer un nouveau script de test, le module n' existerait plus. Pas normal puisque les anciens scripts se déroulent sans erreur.
Cordialement
PC portable HP Laptop 17
Xubuntu 22.04.2 Lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.21: LibreOffice 7: Ancestris 0.12:
Hors ligne
#13 Le 01/10/2024, à 13:30
- Rafbor
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
A tout hasard (source)
• Les scripts Python nécessitent un import depuis le module scriptforge :
from scriptforge import CreateScriptService
Xubuntu 22.04 - Mes projets sur Github
Hors ligne
#14 Le 01/10/2024, à 13:39
- El Catala
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Bonjour,
C' est tout à fait cela. Sur le nouveau script que j' ai voulu créer j' ai le message d' erreur "inconnu au bataillon". Cette erreur m' est transmise aussi bien par APSO que par Thonny, mon IDe habituel.
Pourtant, ce module doit bien exister puisqu' il fonctionne sur les trois premières bases!!!
Ou alors, c' est ma base test qui est pollué. Cela mérite que j' en créer une autre pour en avoir le coeur net.
Cordialement
Dernière modification par El Catala (Le 01/10/2024, à 13:40)
PC portable HP Laptop 17
Xubuntu 22.04.2 Lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.21: LibreOffice 7: Ancestris 0.12:
Hors ligne
#15 Le 03/10/2024, à 17:35
- El Catala
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Bonsoir,
Bon j' ai remanié un script test afin d' arrivée comprendre les problèmes rencontrés:
#! /user/bin/env python3
from scriptforge import CreateScriptService
import uno
def ouvrirTable(event = True):
ui = CreateScriptService('ui')
db = ui.GetDocument('/mnt/El_Casot/Yvon/Informatique/LibreOffice/Base_Test.odb')
base = db.GetDatabase()
#base.openTable('T_Departement')
#Requête à executer
rqt = 'INSERT INTO "T_Departement" ("Numero", "Departement") VALUES(1, "Ain")'
try:
base.RunSql(rqt, directsql=True)
except Exception as e:
print(f"Une erreur est survenue : {e}")
ouvrirTable()
Ce code, dans l' état, ouvre sans problème une table (T_Departement). Cette ligne est pour l' instant fermée.
Par contre, il reste un soucis avec la requête SQL. Avec l' outil incorporé dans LO, elle fonctionne.
Dans le script, une erreur de syntaxe est relevée.
A force de la lire, je ne vois pas ou cela peche. Si vous connaissez un tuto traitant de SQL dans scriptforge, je suis preneur.
Par avance merci.
Cordialement
PC portable HP Laptop 17
Xubuntu 22.04.2 Lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.21: LibreOffice 7: Ancestris 0.12:
Hors ligne
#16 Le 04/10/2024, à 08:44
- Dude
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Le numéro est-il déclaré en clé primaire ?
Hors ligne
#17 Le 04/10/2024, à 19:09
- El Catala
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Bonsoir,
Non, Numero n' est pas déclaré en clé primaire. Dans ce champ, on trouve le numéro du département.
Cordialement
PC portable HP Laptop 17
Xubuntu 22.04.2 Lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.21: LibreOffice 7: Ancestris 0.12:
Hors ligne
#18 Le 06/10/2024, à 13:07
- El Catala
Re : [Impossible]-Ajouter données dans LO Base HSQLDB Script Python3
Bonjour,
Visiblement, python ne peut pas fonctionner avec LibreOffice Base!!! Dommage
Cordialement
PC portable HP Laptop 17
Xubuntu 22.04.2 Lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.21: LibreOffice 7: Ancestris 0.12:
Hors ligne