Chemin pour la source de données

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 !
Ayana
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 27 avr. 2006 08:25

Chemin pour la source de données

Message par Ayana »

Bonjour,


Je cherche à récupérer la source de données et à l'associer à un ensemble de formulaires.

Pour détailler, j'ai plusieurs formulaires, dans un dossier, qui utilisent tous la même base de données.
En absolu, il faut associer chaque formulaire à une source de données.
Le problème, c'est que le chemin d'accès va être modifié souvent, et qu'il faudrait le modifier pour tous les formulaires et sous-formulaires !!

J'aimerai donc avoir une boîte de dialogue qui me demande de choisir la source de données, et qu'ensuite cette source de données soit associée à tous les formulaires et sous-formulaires.


J'ai trouvé une macro qui marche pour avoir le fichier Base qui me sert de source de données.

Code : Tout sélectionner

Sub choisir_Et_Ouvrir_Repertoire
Dim Fichier As Object , Shell As Object
Dim Valeur As Integer

Fichier = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
Fichier.SetDisplayDirectory("C:\")
Valeur = Fichier.Execute()
If Valeur = 1 Then
   Shell = createUnoService("com.sun.star.system.SystemShellExecute")
   Shell.execute(Fichier.getDirectory(), "", 0)
End If

End Sub

Le problème c'est que je ne veux pas qu'il l'ouvre, mais qu'il l'associe aux formulaires :roll:

J'ai une page d'accueil, donc au chargement je dois pouvoir ouvrir cette boîte de dialogue, mais après ??? ......
--= Ayana =--

OOo 2.0.1
XP Pro 2002 SP2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Message par Dude »

Ce lien répond peut être à ta question :
http://forum-openoffice.org/forum/ftopi ... %E9es.html
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Ayana
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 27 avr. 2006 08:25

Message par Ayana »

Oui je l'ai trouvé ce fil aussi, et j'ai essayé. Mais ça ne marche pas.
Peut-être l'ai-je mal utilisé ???

Sub creerSourceDynamique
dim monDBcontext as object, uneInstance as object, monDocBase as object
dim maSource as object,maConnexion as object
dim chemin as string
monDBcontext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
chemin = convertToURL("Z:\BDD\formulaires\test5.odb")
maSource = monDBcontext.getByName(chemin)
maConnexion = maSource.getConnection("", "")
' ici traitement de la base de données
maConnexion.close
maConnexion.dispose
End Sub

Je ne sais pas quoi mettre à la place du rouge, je n'ai pas de traitement particulier à faire.
Ou alors je ne l'ai pas associé au bon événement. (mais j'en ai essayé plusieurs pourtant !)

Si je l'associe au formulaire, il me met un message d'erreur sur
maSource = monDBcontext.getByName(chemin)
Message :

Code : Tout sélectionner

Runtime Error BASIC
Exception
Type : com.sun.star.lang.WrappedTarget.Exception
Si je l'associe à un bouton, il ne met rien.


Sinon ce que j'avais trouvé marche, il récupère le fichier que je choisis, c'est juste qu'il faut l'associer, et je ne sais pas s'il y a une commande pour ça !
Dernière modification par Ayana le 24 mai 2006 07:33, modifié 1 fois.
--= Ayana =--

OOo 2.0.1
XP Pro 2002 SP2
Ayana
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 27 avr. 2006 08:25

Message par Ayana »

Ou j'ai ça aussi.
Cela me permet de récupérer le fichier sans l'ouvrir, mais toujours pas de l'associer !
Et j'ai dû faire un bouton pour le déclencher, je ne trouve pas le moyen de l'ouvrir dès le chargement du formulaire.

Sub Renvoi_Fichier
dim document as object
dim dispatcher as object
Dim Fichier As Object , Shell As Object
Dim Valeur As Integer
Dim args(0) as new com.sun.star.beans.PropertyValue

document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args())
Fichier = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
Fichier.DisplayDirectory("Z:\")
Valeur = Fichier.Execute()
If Valeur = 1 Then
args(0).Name = "StringName"
args(0).Value = "Chemin : " & Fichier.Files(0)
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args())
End If

End Sub
--= Ayana =--

OOo 2.0.1
XP Pro 2002 SP2
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Code : Tout sélectionner

adresseBase = convertToURL("C:\OPENOFFICE\mesBases\BaseXYZ.odb")
monForm = thisComponent.drawpage.forms.getByName("monFormulaire")
monForm.setPropertyValue("DataSourceName", adresseBase)

pour assigner une source de données à un formulaire, si cela peut t'aider...

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2
Ayana
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 27 avr. 2006 08:25

Message par Ayana »

ça marche, merci infiniment :D


Par contre, un dernier détail : à quel événement dois-je l'associer ?

J'en ai essayé plusieurs, j'aimerai que ça se charge dès l'ouverture du formulaire.
Si je créé un bouton, que j'associe la macro à "lors du déclenchement", que j'appuie sur le bouton, que j'enregistre et que je recharge, ça marche.
Mais j'aimerais me passer du bouton !!

Ou alors, je rajoute autant de lignes de code que j'ai de formulaires, et je mets un bouton sur la page. Mais ça veut dire un bouton par page ....

Je suis vraiment pas douée :marto: :aie:
--= Ayana =--

OOo 2.0.1
XP Pro 2002 SP2
Ayana
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 27 avr. 2006 08:25

Message par Ayana »

J'ai trouvé une autre solution, c'est de faire "Exécuter la macro", mais c'est pareil, faut le faire pour chaque page.


S'il y a un moyen de dire telle macro pour telle page, il me suffirait de lister toutes les pages d'un coup, ça chargerait partout. Mais je ne suis pas sûre que cela puisse se faire. :roll:



Membres HOOonOOorables, auriez-vous une idée pour ce genre de propriétés ??? :roll:
--= Ayana =--

OOo 2.0.1
XP Pro 2002 SP2
poukram
Membre OOrganisé
Membre OOrganisé
Messages : 93
Inscription : 03 avr. 2006 15:50

Message par poukram »

J'utilise une macro pour ouvrir tout mes formulaires en plein écran. Tu te doute donc que la macro doit s'exécuter dès l'ouverture ..

J'ai mis qq temps a trouver :
Outils/personaliser/assigner une macro a 'ouverture de document' ;)

++
OOo 2.0.2 sous windows XP
Ayana
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 27 avr. 2006 08:25

Message par Ayana »

Merci, ça associe bien la source de données à l'ouverture, mais ça ne charge pas lol.

J'ai un "Grid" qui doit se charger à partir de ces données, et ça ne le fait pas. Il faut que je ferme et rouvre, ou que je recharge la page.
--= Ayana =--

OOo 2.0.1
XP Pro 2002 SP2
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Fait un monForm.reload() en fin de ta macro sur ouverture

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2
Ayana
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 27 avr. 2006 08:25

Message par Ayana »

Bon, voici ma macro, le reload ne marche pas, il faut toujours que je recharge le formulaire :?

Code : Tout sélectionner

Sub AppliquerSource
Dim adresseBase As String
Dim monForm As Object
Dim monDBContext As Object

monDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
adresseBase = convertToURL("Y:\BDD\formulaires\test5.odb")
monForm = ThisComponent.DrawPage.Forms.getByName("Liensmatos")
monForm.setPropertyValue("DataSourceName", adresseBase)
monForm.reload()

End Sub

Et ce code ne marche pas pour les sous-formulaires ...
--= Ayana =--

OOo 2.0.1
XP Pro 2002 SP2
poukram
Membre OOrganisé
Membre OOrganisé
Messages : 93
Inscription : 03 avr. 2006 15:50

Message par poukram »

Tu ouvre ton document comment ?

Si tu l'ouvre avec une macro, par défaut a l'ouverture il n'autorise pas les macros. D'ou peut etre le fait que ta macro ne s'exécute pas.

Sinon je me demandais un truc : le reload il faut pas plutot l'appliquer au Form = thisComponent ?
OOo 2.0.2 sous windows XP
Ayana
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 27 avr. 2006 08:25

Message par Ayana »

J'ouvre mes formulaires avec des hyperliens.
Mais lorsque je devrai récupérer des données, il faudra que je fasse des macros.
Mais le formulaire sur lequel j'essaie en ce moment est ouvert via un hyperlien sur le formulaire précédent, donc pas de macro d'ouverture.


Et s'il faut appliquer le reload à un formulaire particulier, ça va en faire des reload :shock: !!

Tu penses à un truc comme ça : :?:


Code : Tout sélectionner

ThisComponent.DrawPage.Forms.GetByName("Liensmatos").reload
--= Ayana =--

OOo 2.0.1
XP Pro 2002 SP2
Ayana
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 27 avr. 2006 08:25

Message par Ayana »

poukram a écrit :Tu ouvre ton document comment ?

Si tu l'ouvre avec une macro, par défaut a l'ouverture il n'autorise pas les macros. D'ou peut etre le fait que ta macro ne s'exécute pas.

Sinon je me demandais un truc : le reload il faut pas plutot l'appliquer au Form = thisComponent ?
La macro fonctionne, il n'y a que le reload qui ne fonctionne pas ... :roll:


Faut que je me réveille :marto:
--= Ayana =--

OOo 2.0.1
XP Pro 2002 SP2
poukram
Membre OOrganisé
Membre OOrganisé
Messages : 93
Inscription : 03 avr. 2006 15:50

Message par poukram »

la notion de form est pas top ...

Un formulaire désigne a la fois le doc que tu créer et ou tu place tes champs etc etc
Et un ensemble de champs dans ce doc :roll: :roll:

Dans ce cas précis je pense au Doc donc faire
monDoc = thisComponent
monDoc.reload
OOo 2.0.2 sous windows XP
Ayana
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 27 avr. 2006 08:25

Message par Ayana »

J'ai essayé ça, ça met un bug

Code : Tout sélectionner

monDoc=ThisComponent
monDoc.reload()

Si je mets ça, ça ne bug pas, mais ça ne marche pas, pourtant XRay me dit que c'est une méthode de monDoc, ça devrait marcher, je comprends pas :roll:

Code : Tout sélectionner

monDoc=ThisComponent
monDoc.refresh()
--= Ayana =--

OOo 2.0.1
XP Pro 2002 SP2
Ayana
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 27 avr. 2006 08:25

Message par Ayana »

Non, ça ne marche vraiment pas !! :x

Code : Tout sélectionner

Sub AppliquerSource
Dim adresseBase As String
Dim monForm As Object
Dim monDBContext As Object
monDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
adresseBase = convertToURL("Y:\BDD\formulaires\test5.odb")
monForm = ThisComponent.DrawPage.Forms.getByName("Liensmatos")
monForm.setPropertyValue("DataSourceName", adresseBase)
monForm.reload
End Sub

Pour le sous-formulaire, je ne trouve toujours pas non plus, il me met une erreur sur la ligne :

Code : Tout sélectionner

monForm = ThisComponent.DrawPage.Forms.getByName("SFormcriticite")
--= Ayana =--

OOo 2.0.1
XP Pro 2002 SP2
Ayana
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 27 avr. 2006 08:25

Message par Ayana »

Arg, j'ai trouvé pour le formulaire, c'est un load, et non pas un reload quand c'est l'ouverture !!

Code : Tout sélectionner

Sub AppliquerSource
Dim adresseBase As String
Dim monForm As Object
Dim monDBContext As Object

monDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
adresseBase = convertToURL("Y:\BDD\formulaires\test5.odb")
monForm = ThisComponent.DrawPage.Forms.getByName("Liensmatos")
monForm.setPropertyValue("DataSourceName", adresseBase)
monForm.load

End Sub

Mais je trouve pas pour le sous-formulaire, est-ce qu'il y a autre chose que "Forms" ??? Du style "SubForm" ??
--= Ayana =--

OOo 2.0.1
XP Pro 2002 SP2