[Résolu][Python]-Résultat SQL Select dans variable

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
Ernest
Membre hOOnoraire
Membre hOOnoraire
Messages : 143
Inscription : 26 févr. 2019 14:56

[Résolu][Python]-Résultat SQL Select dans variable

Message par Ernest »

Bonjour,

Comment fait-on pour placer dans une variable, le résultat d' une requête Select contenu dans un script Python? En python traditionnel, fetchall() fait bien le bouleau mais dans libre office, sa ne fonctionne pas!

Code : Tout sélectionner

requete = "SELECT * FROM Table1"
resultat = statement.excute(requete)
Dans ce cas, une boite de message retourne true
Chaque ligne de la table doit normalement être représenté par un tuple dans resultat.
Le problème que je souhaite résoudre est donc de travailler sur ces tuples.

Cordialement
Dernière modification par Ernest le 06 juil. 2021 12:24, modifié 1 fois.
Xubuntu 20.04 en dual boot avec Win10
Libre Office 7.06
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 669
Inscription : 20 déc. 2017 14:45

Re: [Python]-Récuperer résultat SQL Select dans une variable

Message par rollmops »

Bonjour,

Installe APSO et fais un debug.print de ce que te retourne l'exécution :
https://forum.openoffice.org/fr/forum/v ... 18&t=52834

Tu trouveras en Basic comment est traité un executeQuery :
https://forum.openoffice.org/fr/forum/v ... =15&t=1454

A+
OpenOffice 4.1.15 - Windows 10
Avatar de l’utilisateur
Ernest
Membre hOOnoraire
Membre hOOnoraire
Messages : 143
Inscription : 26 févr. 2019 14:56

Re: [Python]-Récuperer résultat SQL Select dans une variable

Message par Ernest »

Bonjour,
Apso est installé et je l' utilise pour développer le script.
Lorsque je lance le script avec la ligne suivante:
rslts = statement.execute(rqt)
la réponse est true
si je remplace la ligne citée par:
executeQuery(rqt),
le message d' erreur est:
TYPE is not supported! /home/buildslave/source/libo-core/stoc/source/typeconv/convert.cxx:442 (Error during invoking function ParcourirTable in module vnd.sun.star.tdoc:/41003416/Scripts/python/Bibliothèque1/Module1.py (<class 'ooo_script_framework.com.sun.star.script.CannotConvertException'>: TYPE is not supported! /home/buildslave/source/libo-core/stoc/source/typeconv/convert.cxx:442
File "/opt/libreoffice7.0/program/pythonscript.py", line 915, in invoke
ret = self.func( *args )
File "vnd.sun.star.tdoc:/41003416/Scripts/python/Bibliothèque1/Module1.py", line 26, in ParcourirTable
File "vnd.sun.star.tdoc:/41003416/Scripts/python/Bibliothèque1/Module1.py", line 38, in MessageBox
)).
L' erreur se situerait-elle avant cette commande?
Voici le script dans son état actuel:

Code : Tout sélectionner

# coding: utf-8
from __future__ import unicode_literals

import uno
import unohelper

from com.sun.star.awt.MessageBoxType import MESSAGEBOX, INFOBOX, WARNINGBOX, \
	ERRORBOX, QUERYBOX
from com.sun.star.awt.MessageBoxButtons import BUTTONS_OK
from com.sun.star.awt.MessageBoxResults import CANCEL, OK, YES, NO, RETRY, IGNORE
from com.sun.star.sdb.CommandType import TABLE, QUERY, COMMAND        

def ParcourirTable():

    ctx = XSCRIPTCONTEXT.getComponentContext()
    smgr = ctx.getServiceManager()
    document = XSCRIPTCONTEXT.getDocument()
   
    curseur = document.getCurrentController()
    source = curseur.DataSource
    connection = source.getConnection("","")
    statement = connection.createStatement()
    rqt = "SELECT count(*) FROM Table1"
    rslts = statement.executeQuery(rqt)
    #mri(ctx, rslts)
    MessageBox(WARNINGBOX, BUTTONS_OK, "Titre", rslts)

def mri(ctx, target):
    mri = ctx.ServiceManager.createInstanceWithContext(
        "mytools.Mri",ctx)
    mri.inspect(target)

def MessageBox( box_type: int, buttons: int, title: str, message: str)-> int:  #
    desktop = XSCRIPTCONTEXT.getDesktop()
    frame = desktop.getCurrentFrame()
    window = frame.getContainerWindow()
    toolkit = window.getToolkit()
    messagebox = toolkit.createMessageBox(window, box_type, buttons, title, message)
    return messagebox.execute()
Merci rollmops de votre aide.
Bonne journée
Xubuntu 20.04 en dual boot avec Win10
Libre Office 7.06
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 669
Inscription : 20 déc. 2017 14:45

Re: [Python]-Récuperer résultat SQL Select dans une variable

Message par rollmops »

Re,

Je n'ai pas compris.
As-tu fait un debug.print de statement pour voir ?
XRay serait plus adapté pour voir les propriétés de cet objet.

Ton code fait appel à un service Mri que je ne comprends pas.
Sans doute que si tu fournissais un document permettant de comprendre comment ce code est exécuté...

Tu ne facilites pas vraiment la tâche. :roll:
OpenOffice 4.1.15 - Windows 10
Avatar de l’utilisateur
Ernest
Membre hOOnoraire
Membre hOOnoraire
Messages : 143
Inscription : 26 févr. 2019 14:56

Re: [Python]-Récuperer résultat SQL Select dans une variable

Message par Ernest »

Bonjour,
Comme demandé, j' ai relancé le script par un debug print avec l' erreur ci_dessous:

Code : Tout sélectionner

Traceback (most recent call last):
  File "/home/elfouste/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu2774rj1axi.tmp_/apso.oxt/python/pythonpath/apso_debug.py", line 363, in actionPerformed
    tempfile = tempfiles[self.topfilename]
KeyError: 'vnd.sun.star.tdoc:/95253512/Scripts/python/Bibliothèque1/Module1.py'
Je joins également la base de test que j' utilise.
Cordialement
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Xubuntu 20.04 en dual boot avec Win10
Libre Office 7.06
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 669
Inscription : 20 déc. 2017 14:45

Re: [Python]-Récuperer résultat SQL Select dans une variable

Message par rollmops »

Re,

Il n'y a aucune table dans ton ODB. Comment veux-tu que cela fonctionne ?

:roll:
OpenOffice 4.1.15 - Windows 10
Avatar de l’utilisateur
Ernest
Membre hOOnoraire
Membre hOOnoraire
Messages : 143
Inscription : 26 févr. 2019 14:56

Re: [Python]-Récuperer résultat SQL Select dans une variable

Message par Ernest »

Bonjour,
Bizarre, bizarre , il y a bien une table dont le nom est "Table1". Je viens d' ouvrir le lien à l' instant pour m' en assurer.
Bonne journée
Xubuntu 20.04 en dual boot avec Win10
Libre Office 7.06
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 669
Inscription : 20 déc. 2017 14:45

Re: [Python]-Récuperer résultat SQL Select dans une variable

Message par rollmops »

Re,

Ton ODB est relié à une source autre que HSQL et qui n'est pas visible dans OpenOffice.
Sûrement le format expérimental Firebird.
Refais le test en fournissant un fichier au format natif pour voir si ce n'est pas un problème.
OpenOffice 4.1.15 - Windows 10
Avatar de l’utilisateur
Ernest
Membre hOOnoraire
Membre hOOnoraire
Messages : 143
Inscription : 26 févr. 2019 14:56

Re: [Python]-Récuperer résultat SQL Select dans une variable

Message par Ernest »

Bonjour,
Merci de votre réponse, Je refais le test ce soir en HSQL et vous tiens au courant.
Bonne journée
Xubuntu 20.04 en dual boot avec Win10
Libre Office 7.06
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: [Python]-Récuperer résultat SQL Select dans une variable

Message par jeanmimi »

rollmops a écrit :Sûrement le format expérimental Firebird.
Bien vu !
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
Ernest
Membre hOOnoraire
Membre hOOnoraire
Messages : 143
Inscription : 26 févr. 2019 14:56

Re: [Python]-Récuperer résultat SQL Select dans une variable

Message par Ernest »

Bonsoir,
Tout d' abord, je vous présente toutes mes excuses pour le retard dans la réponse demandée. J' ai eu un gros soucis avec mon PC et n'ai donc pus donner suite à votre demande.
J' ai recréé une nouvelle BD mais cette fois si en HSQLBD. Visiblement, je ne suis pas plus avancé. Mais vous saurez peut-être m' en dire plus.
Cordialement
Xubuntu 20.04 en dual boot avec Win10
Libre Office 7.06
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 628
Inscription : 09 août 2017 22:15

Re: [Python]-Récuperer résultat SQL Select dans une variable

Message par Jurassic Pork »

hello,
tu peux essayer ceci :

Code : Tout sélectionner

def ParcourirTable():
    ctx = XSCRIPTCONTEXT.getComponentContext()
    smgr = ctx.getServiceManager()
    document = XSCRIPTCONTEXT.getDocument()
    curseur = document.getCurrentController()
    source = curseur.DataSource
    connection = source.getConnection("","")
    statement = connection.createStatement()
    rqt = "SELECT count(*) FROM Table1"
    rslts = statement.executeQuery(rqt)
    rslts.next()
 #   mri(ctx, rslts)
    MessageBox(WARNINGBOX, BUTTONS_OK, "Titre", rslts.getLong(1))

ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Avatar de l’utilisateur
Ernest
Membre hOOnoraire
Membre hOOnoraire
Messages : 143
Inscription : 26 févr. 2019 14:56

Re: [Python]-Récuperer résultat SQL Select dans une variable

Message par Ernest »

Bonjour,
Merci beaucoup Jurassic, cela fonctionne. Je vais pousser plus loin, et voir si en Firebird, cela fonctionne aussi.
En attendant, le problème n' existe plus.
Cordialement
Xubuntu 20.04 en dual boot avec Win10
Libre Office 7.06