[Résolu][Base] Zone de liste SQL invalide

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 !
Saint Foyen
Fraîchement OOthentifié
Messages : 2
Inscription : 25 avr. 2018 13:03

[Résolu][Base] Zone de liste SQL invalide

Message par Saint Foyen »

Bonjour,
je construis une base dans laquelle j'utilise des boîtes de dialogue.
Une boîte contient une zone de liste, et je voudrais qu'à son affichage elle propose dans la liste les valeurs enregistrées dans un champ d'une table.
J'ai utilisé le livre de Mr Marcelly et lu beaucoup de sujets en lien sur votre forum, mais je bute sur un problème que ne vois nulle part évoqué : la liste n'est pas remplie avec le résultat de la requête SQL, mais avec la requête elle-même.
liste mise à jour.png
J'ai fabriqué une base uniquement centrée sur ce problème :
Problème ListBox.odb
Une table : Table1 avec un champ : chpID (integer, non auto, clé primaire) ; contient 3 enregistrements
Un module : Module1
une procédure : procRemplirListe doit affecter à la liste les valeurs des champs des 3 enregistrements, et afficher la boîte de dialogue.
Une boîte de dialogue : Dialog1 contient un contrôle de type liste de choix, déroulante : ListBox1
ModUtilitaires contient la fonction pour l'ouverture du dialogue (Mr Marcelly)

Code : Tout sélectionner

Sub procRemplirListe
	dim oDlg as object 'pour la boîte de dialogue
	dim oBoiteListe as object 'pour le contrôle
	dim strSQL as string 

	'créer la boîte de dialogue
	oDlg = FctCreerDialogue("Standard", "Dialog1")
	'remplir la liste de la zone de liste du contrôle ListBox1 avec les enregistrements du champ chpID de la table Table1
	'Initialiser l’objet vue du contrôle
	oBoiteListe = oDlg.getControl("ListBox1")
	'préparation instruction SQL
	strSQL = "SELECT ""chpID"" FROM ""Table1"" "
	'Atteindre le modèle du contrôle et lui affecter le tableau comme liste
	oBoiteListe.Model.stringItemList = Array(strSQL)

	'Afficher la boîte
	oDlg.execute
End Sub
J'utilise Windows 7 Pro SP1 64 bits et LibreOffice 5.4.5.1 (x64)

Je vous remercie
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Saint Foyen le 26 avr. 2018 21:30, modifié 1 fois.
LibreOffice 5.4.1 (x64)
Windows 7 pro SP1 64 bits
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Base] Zone de liste SQL invalide

Message par Piaf »

Bonjour
Une instruction SQL pour renvoyer un résultat doit être exécutée.
Tu peux tester :

Code : Tout sélectionner

Sub procRemplirListe
Dim oDlg as object 'pour la boîte de dialogue
Dim oBoiteListe as object 'pour le contrôle
Dim strSQL as string 
Dim oConnexion as Object, maRequete as Object, resultat as Object
Dim monTab()
	thisDatabaseDocument.CurrentController.Connect("","")
	oConnexion = thisDatabaseDocument.CurrentController.ActiveConnection
	maRequete = oConnexion.createStatement 
	'créer la boîte de dialogue
	oDlg = FctCreerDialogue("Standard", "Dialog1")
	'remplir la liste de la zone de liste du contrôle ListBox1 avec les enregistrements du champ chpID de la table Table1
	'Initialiser l’objet vue du contrôle
	oBoiteListe = oDlg.getControl("ListBox1")
	'préparation instruction SQL
	strSQL = "SELECT ""chpID"" FROM ""Table1"" "
	resultat = maRequete.executeQuery(strSQL)
	While resultat.Next
		Redim Preserve monTab(intx)
		monTab(intx) = resultat.columns.getByName("chpID").int
		intx = intx + 1	
	Wend 
	'Atteindre le modèle du contrôle et lui affecter le tableau comme liste
	oBoiteListe.Model.stringItemList = monTab()
	'Afficher la boîte
	oDlg.execute	
End Sub
Dialog.png
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Saint Foyen
Fraîchement OOthentifié
Messages : 2
Inscription : 25 avr. 2018 13:03

Re: [Base] Zone de liste SQL invalide

Message par Saint Foyen »

Merci pour ce code qui fonctionne bien.
Suite à ta résolution, et comme je ne comprenais pas pourquoi on trouve de nombreux exemples de code avec passage direct de l'instruction SQL dans l'argument de la fonction array, j'ai à nouveau fouillé dans le forum et je crois comprendre ça fonctionne avec un formulaire, mais pas avec un contrôle de dialogue.
(https://forum.openoffice.org/fr/forum/v ... QL#p129321) :Les contrôles de dialogues ne sont pas orientés base de données.

Du coup on est obligé de remplir la liste élément par élément, ce qui est peut-être beaucoup plus long pour une table comportant beaucoup d'enregistrements ?
LibreOffice 5.4.1 (x64)
Windows 7 pro SP1 64 bits