[Résolu][Base]Modifier commande SQL à l'ouverture du rapport

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 !
hcm
Membre hOOnoraire
Membre hOOnoraire
Messages : 125
Inscription : 03 janv. 2007 21:16

[Résolu][Base]Modifier commande SQL à l'ouverture du rapport

Message par hcm »

Bonjour,

Je cherche à faire la modification de la commande SQL sur laquelle est basé un rapport avant d'ouvrir celui-ci via une macro activée par un bouton.
Je sais le faire sur un formulaire grâce au code trouvé sur ce site, mais je n'ai rien vu pour faire la même chose sur un rapport.

Je précise que je ne souhaite pas que mon rapport s'appuie sur une requête à modifier avant ouverture (des exemples existent sur le site), mais bel et bien sur une commande SQL.

D'avance merci.

Je poste ici juste pour info le code que j'utilise pour faire la même opération sur un formulaire, code qui ne marche pas avec un rapport la propriété CommandType n'existant pas.
C'est peut être ma manière d'accéder à l'objet de mon rapport (via maConnexion) qui n'est pas la bonne ...

Code : Tout sélectionner

	'Instruction SQL sélectionnant l'enregistrement de la table correspondant au critère	
		requeteSql = "SELECT * FROM T_recettes WHERE " & chaine

		'Va récupérer le nom de l'élément dans Complément d'information du bouton appelant la macro
		nomElement = fiEvt.Source.Model.Tag
		
		'Appel la fonction OuvreLeFormulaireOuRapport avec le nom du formulaire en paramètre	
		nouvelElement= OuvreLeFormulaireOuRapport(nomElement, fiTypeObjet)

	
		If (fiTypeObjet = BDDCUIS_RECH_FORMULAIRE ) Then
	
			' On accède au formulaire principal (l'objet) du formulaire (fichier) en prenant comme
			' hypothèse que ce formulaire principal habituellement nommé (MainForm) a été renommé
			' du nom du formulaire ouvert.
			nouvelElement = nouvelElement.DrawPage.Forms.getByName(nomElement)
		Else
			' On travaille sur un rapport. Le moyen d'y accéder passe par l'objet de connexion à la Bdd
			maConnexion   = fiEvt.Source.Model.Parent.ActiveConnection
			nouvelElement = maConnexion.Parent.DatabaseDocument.ReportDocuments.getByName(nomElement)
		EndIf

		'défini le type de contenu du formulaire à instruction SQL
		'la commande est utile car par défaut le type de contenu est sur Table
		nouvelElement.Commandtype = 2 
		'défini le contenu du formulaire (la requête SELECT)
		nouvelElement.command = requeteSql
		nouvelElement.reload
LibO Version: 6.4.6.2 distribution Linux Lubuntu 20.04.01 LTS
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25169
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] - Modifier la commande SQL à l'ouverture d'un rap

Message par Dude »

Salut,

Inscrit depuis 2007 et toujours pas l'habitude de fournir un contexte d'utilisation ? :evil:

Modifier une requête peut se faire via l'interface createQueryComposer

L'ODB joint permet dans le formulaire de rectifier la requête en précisant l'employé sur lequel on se trouve.
On ajoute son identifiant dans la clause WHERE avant l'ouverture du rapport.
Celui-ci, au lieu d'afficher tous les enregistrements par défaut, ne portera que sur l'employé sélectionné :

Code : Tout sélectionner

sub ExecuteReport(	oCnx as variant, _
					sQueryName as string, _
					sFilter as string, _
					sReportName )
    dim Prop(1) as new com.sun.star.beans.PropertyValue 
    
	oComp = oCnx.createQueryComposer
	oQuery = oCnx.Queries.getByName(sQueryName)
	oComp.setQuery(oQuery.Command)
	oComp.setFilter(sFilter)
	
	oQuery.Command = oComp.ComposedQuery
	
	Prop(0).Name = "ActiveConnection"
	Prop(0).Value = oCnx
	Prop(1).Name = "OpenMode"
	Prop(1).Value = "open"
	
	'msgbox "Tasks for employee ID = " & nID & chr(10) & oQuery.Command	
	
	oReport = oCnx.Parent.DatabaseDocument.ReportDocuments
	oReport.loadComponentFromURL(sReportName, "_blank", 0, Prop())
	oQuery.Command = oComp.getQuery

end sub
Adapt_report.odb
NB : il y a deux types de rapport (créés avec l'assistant et l'extension ORB)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
hcm
Membre hOOnoraire
Membre hOOnoraire
Messages : 125
Inscription : 03 janv. 2007 21:16

Re: [Base] - Modifier la commande SQL à l'ouverture d'un rap

Message par hcm »

Bonjour Dude,
Tout d'abord merci de t'intéresser au sujet.
Si je n'ai pas fourni de contexte c'est que ma base n'était pas utilisable au moment de la création du fil (en cours de développement entre deux incréments) et que la question posée me semblait suffisamment claire à savoir:
comment modifier
la commande SQL sur laquelle est basé un rapport
J'ai même précisé
je ne souhaite pas que mon rapport s'appuie sur une requête à modifier avant ouverture
car des exemples existent déjà sur le site.

Or quand j'ouvre le rapport que tu me donnes en exemple, celui ci s'appuie sur une requête justement.
Donc ça ne répond pas à ma question.

J'ai actuellement une version stable (toujours en dev) donc si tu veux faire un essai dessus, il faut:
. ouvrir le formulaire de recherche
. appuyer sur le bouton "Lancer la recherche"
. sélectionner une ou plusieurs lignes et appuyer sur le bouton avec les flèches vers le bas.
. sélectionner une ou plusieurs lignes dans la table des recettes présélectionnées
. et enfin appuyer sur le bouton "Générer le livret"
Cela ouvre le rapport "LivretDesRecettes" qui est basé sur une commande SQL et non pas une requête. Sauf que je ne sais pas la mettre à jour avant ouverture. Le code donné dans mon premier post ne fonctionne pas sur cet objet rapport.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibO Version: 6.4.6.2 distribution Linux Lubuntu 20.04.01 LTS
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: [Base] - Modifier la commande SQL à l'ouverture d'un rap

Message par jeanmimi »

Bonjour,
Comme le lancement depuis le formulaire n'est pas souhaité,
quelle devrait l’instruction SQL attendue ?
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
hcm
Membre hOOnoraire
Membre hOOnoraire
Messages : 125
Inscription : 03 janv. 2007 21:16

Re: [Base] - Modifier la commande SQL à l'ouverture d'un rap

Message par hcm »

Bonjour Jeanmimi

La commande SQL à utiliser est construite dynamiquement via la fonction trtRecettesPreselectionnees().
Elle est contenue dans la variable "requeteSQL" en ligne 473.
Mais je ne sais pas l'affecter au rapport. L'instruction

Code : Tout sélectionner

nouvelElement.Commandtype = 2
en ligne 507 se solde par un "NoSuchElement".
C'est pourquoi j'indiquais dans mon post initial que je n'accède peut être pas correctement à mon objet Rapport.
LibO Version: 6.4.6.2 distribution Linux Lubuntu 20.04.01 LTS
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25169
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] - Modifier la commande SQL à l'ouverture d'un rap

Message par Dude »

hcm a écrit :Elle est contenue dans la variable "requeteSQL" en ligne 473.
Où est l'intérêt de mettre une requête dans le codage d'une macro ?
hcm a écrit :Cela ouvre le rapport "LivretDesRecettes" qui est basé sur une commande SQL et non pas une requête. Sauf que je ne sais pas la mettre à jour avant ouverture.
Pas possible puisque un rapport ORB ne se connecte à la base que lorsqu'il s'ouvre (le contexte n'est pas disponible avant).
hcm
Membre hOOnoraire
Membre hOOnoraire
Messages : 125
Inscription : 03 janv. 2007 21:16

Re: [Base] - Modifier la commande SQL à l'ouverture d'un rap

Message par hcm »

Où est l'intérêt de mettre une requête dans le codage d'une macro ?
C'est à dire que de mon côté, je ne vois pas l'intérêt de créer une requête de plus dans (i.e. d'encombrer) ma base quand la solution passe par une simple instruction SQL ...
Question de point de vue j'imagine :)
Pas possible puisque un rapport ORB ne se connecte à la base que lorsqu'il s'ouvre (le contexte n'est pas disponible avant).
Et si je le fais juste après avoir ouvert le rapport ... ?
Car en fait c'est codé ainsi (je m'aperçois avec ta remarque que je me suis mal exprimé auparavant :oops: ). J'ouvre le rapport et je cherche à appliquer la commande SQL.
LibO Version: 6.4.6.2 distribution Linux Lubuntu 20.04.01 LTS
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25169
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] - Modifier la commande SQL à l'ouverture d'un rap

Message par Dude »

hcm a écrit :Et si je le fais juste après avoir ouvert le rapport ... ?
Une fois le rapport ouvert, il n'est plus modifiable. C'est le principe même du rapport.
hcm a écrit :Question de point de vue j'imagine
Effectivement quand on veut visser avec un marteau...
Une requête se stocke logiquement au bon endroit.
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: [Base] - Modifier la commande SQL à l'ouverture d'un rap

Message par jeanmimi »

hcm a écrit :La commande SQL à utiliser est construite dynamiquement via la fonction trtRecettesPreselectionnees().
Elle est contenue dans la variable "requeteSQL" en ligne 473.
hcm a écrit :Cela ouvre le rapport "LivretDesRecettes" qui est basé sur une commande SQL et non pas une requête.
A la relecture, je ne comprends pas quelle différence tu fais entre une Requête SQL et une commande SQL.
S'il y a une différence, pour activer une Macro, ce serait plutôt entre un filtre et une requête ou commande SQL.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25169
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] - Modifier la commande SQL à l'ouverture d'un rap

Message par Dude »

jeanmimi a écrit :je ne comprends pas quelle différence tu fais entre une Requête SQL et une commande SQL.
Comme dit plus haut, la requête est stockée dans le container "Requête" de l'ODB.
La commande SQL sera directement intégrée dans le rapport lui-même.
Ce qui n'a strictement aucun intérêt en terme de maintenance.
hcm
Membre hOOnoraire
Membre hOOnoraire
Messages : 125
Inscription : 03 janv. 2007 21:16

Re: [Base] - Modifier la commande SQL à l'ouverture d'un rap

Message par hcm »

Merci à tous les deux pour vos réponses.
Je ne vais pas avoir le temps de les exploiter tout de suite car je dois m'absenter pour 3 semaines.
Concernant la question de jeanmimi
je ne comprends pas quelle différence tu fais entre une Requête SQL et une commande SQL
Je fais certainement un abus de langage quelquepart.
J'entends par requête ce qu'on trouve dans la rubrique "Requête" d'une Bdd. Dans mon cas, il y en a deux: RecettesDetaillees et RecettesDetailleesPourLivret.
Par commande SQL je parle du champ "Contenu" situé juste en dessous de "Type de contenu" lorsque ce dernier est positionné à "Commande SQL" dans un rapport (LivretDesRecettes).
C'est ce champ "Contenu" que je cherche à modifier après avoir ouvert le rapport. J'aimerais que cette commande effectue un filtrage sur la requête RecettesDetailleesPourLivret.
Un truc du genre "SELECT * from RecettesDetailleesPourLivret WHERE RéfRecette =XX OR RéfRecette=YY etc ... etc ...".
J'ai construit dynamiquement cette "commande SQL" (que j'ai malencontreusement appelée requeteSQL dans mon code ce qui est source de confusion j'en conviens) en fonction des choix de l'opérateur. Reste plus qu'à pouvoir l'affecter à mon rapport ...

Pour Dude: je ne comprends pas tout ce que tu me dis sur le moment mais je vais creuser à mon retour.
Encore merci à tous les deux.
LibO Version: 6.4.6.2 distribution Linux Lubuntu 20.04.01 LTS