Page 1 sur 1
[Résolu][Base] Enregistrer et fermer un formulaire
Publié : 05 sept. 2008 21:52
par ThierryM
Bonjour à tous,
Je travaille avec une base de données. J'utilise une table qui me permet de stocker des paramètres, il n'y donc qu'un seul enregistrement dans cette table. J'interagis sur cette table via un formulaire. Je veux une fois que j'ai modifié un paramètre (valeur d'un champ) pouvoir enregistrer et fermer ce formulaire via un seul bouton. Actuellement je suis obliger d'utiliser la croix de fermeture et évidemment une boîte de dialogue s'ouvre me demandant si je veux enregistrer les modifications, ce que je fais : ce n'est vraiment pas ergonomique.
J'ai donc créé un bouton auquel je voulais assigner une action du type "valider" (comme dans une boîte de dialogue) mais ce type d'action n'existe pas. Il faut donc que j'y assigne une macro combinant l'action "enregistrer" puis "fermer". Je sais fermer un formulaire par contre comment faire pour l'enregistrer ?
J'ai cherché sur le web et je n'ai trouvé aucune macro qui pourrait convenir (il y a eu une question similaire sur le forum en 2006 mais sans réponse :
http://user.services.openoffice.org/fr/ ... 651#p18651).
Pourriez-vous m'éclairer ?
Merci pour vos réponses.
Thierry
Re: [Base] Macro pour enregistrer et fermer un formulaire
Publié : 06 sept. 2008 11:19
par Pierre-Yves Samyn
Bonjour
Code : Tout sélectionner
option explicit
Sub PysFermer(PysEvent)
PysEvent.source.model.parent.updateRow
thiscomponent.currentController.Frame.close(true)
End Sub
Re: [Base] Macro pour enregistrer et fermer un formulaire
Publié : 06 sept. 2008 11:29
par ThierryM
Merci Pierre-Yves,
Je viens de trouver dans la partie "Suprême de code" un post de Dude concernant l'ouverture et la fermeture de formulaire :
http://user.services.openoffice.org/fr/ ... =15&t=6355 mais il semblerait qu'il manque la macro permettant justement de quitter un formulaire dans la base exemple de Dude.
J'applique (une fois de plus) ta macro et te tiens au courant.
À bientôt,
Thierry
Rajout : il semblerait que cela soit une issue
http://user.services.openoffice.org/en/ ... =20&t=7750
Re: [Base] Macro pour enregistrer et fermer un formulaire
Publié : 06 sept. 2008 11:50
par ThierryM
Resalut Pierre-Yves,
Je viens de tester ta macro. Pas de problème au premier enregistrement. Par contre quand je réouvre mon formulaire "Paramétrage", j'ai mes zones de listes qui ont leur contenu écrit avec des caractères sur un fond bleu et lorsque je clique à nouveau sur le bouton, j'obtiens un message d'erreur comme quoi il n'y a pas de script (No Script).
Ci-joint une base exemple simplifiée :
BD_Ecole_simplifiée_quitterForm.odb
Re: [Base] Macro pour enregistrer et fermer un formulaire
Publié : 06 sept. 2008 13:45
par ThierryM
Je viens de trouver quelques éclaircissements ici :
http://www.oooforum.org/forum/viewtopic ... 564#288564.
En fait, il semblerait qu'il y ait un problème avec ThisComponent...
Voilà le code proposé sur le lien ci-dessus (à adapter et à tester) :
Code : Tout sélectionner
function OpenForm( formContainer as variant, oConnection as variant, sFormName as string) as variant
Dim aProp(1) As New com.sun.star.beans.PropertyValue
aProp(0).Name = "ActiveConnection"
aProp(0).Value = oConnection
aProp(1).Name = "OpenMode"
aProp(1).Value = "open"
OpenForm = formContainer.loadComponentFromURL(sFormName,"_blank",0,aProp())
end function
function getFormsTC() as variant
getFormsTC = thisComponent.Parent.getFormDocuments
end function
function getConnectionTC() as variant
getConnectionTC = thisComponent.Drawpage.Forms(0).ActiveConnection
end function
sub OpenClienten ( oev as variant )
sFormName = "Cliënten"
OpenForm( getFormsTC, getConnectionTC, sFormName )
thisComponent.parent.FormDocuments.getByName(curFormName (thisComponent)).dispose()
end sub
sub OpenRelaties ( oev as variant )
sFormName = "Relaties"
OpenForm( getFormsTC, getConnectionTC, sFormName )
thisComponent.parent.FormDocuments.getByName(curFormName (thisComponent)).dispose()
end sub
sub OpenFinancien ( oev as variant )
sFormName = "Financiën"
OpenForm( getFormsTC, getConnectionTC, sFormName )
thisComponent.parent.FormDocuments.getByName(curFormName (thisComponent)).dispose()
end sub
sub OpenInstellingen ( oev as variant )
sFormName = "Instellingen"
OpenForm( getFormsTC, getConnectionTC, sFormName )
thisComponent.parent.FormDocuments.getByName(curFormName (thisComponent)).dispose()
end sub
Si on regarde chaque macro ouvre un formulaire (à l'aide de 3 fonctions définies en premier)... et elle le ferme aussi (ce que je ne comprends pas) avec
Code : Tout sélectionner
thisComponent.parent.FormDocuments.getByName(curFormName (thisComponent)).dispose()
Ajout :
En fait, Code : Tout sélectionner thisComponent.parent.FormDocuments.getByName(curFormName (thisComponent)).dispose()
est à dissocier de la macro d'ouverture du formulaire.
J'ai trouvé la fonction "curFormName" manquante :
Code : Tout sélectionner function curFormName (o as object) as string
args = o.getArgs
for i = lBound(args) to uBound(args)
if args(i).name = "DocumentTitle" then
curFormName = args(i).value
exit for
end if
next
end function
Thierry |
Re: [Base] Macro pour enregistrer et fermer un formulaire
Publié : 06 sept. 2008 16:33
par Bidouille
On vous rappelle que le terme "Macro" est implicite et n'a pas besoin d'être mentionné.
Merci de ne pas poster plusieurs messages à la suite !
Le bouton "Editer" à la droite du message permet d'y remédier.
Re: [Base] Enregistrer et fermer un formulaire
Publié : 06 sept. 2008 18:40
par ThierryM
Ça y est j'ai pu contourner le problème.
En fait en fermant le formulaire par le biais du currentcontroller.frame, il y a un problème lorsque l'on recharge le formulaire fermé de cette façon.
Voici donc le code trouvé sur
http://www.oooforum.org/forum/viewtopic ... 290#272290 fourni par Evgenych.
Code : Tout sélectionner
REM ***** BASIC *****
option explicit
Function curFormName (o as object) as string
'Fonction qui permet de récupérer le nom du formulaire
Dim args as object, i as integer
args = o.getArgs
for i = lBound(args) to uBound(args)
if args(i).name = "DocumentTitle" then
curFormName = args(i).value
exit for
end if
next
End Function
Sub FermerFormulaireDansBase(oEvent)
oEvent.source.model.parent.updateRow 'met à jour l'enregistrement
thisComponent.parent.FormDocuments.getByName(curFormName (thisComponent)).dispose()'ferme le formulaire
end sub
Peut-être pourrait-on le mettre en "suprême de code" ?
À bientôt,
Thierry
Re: [Résolu][Base] Enregistrer et fermer un formulaire
Publié : 03 juin 2016 12:23
par tiago972
Bonjour à tous,
Je rencontre un petit problème avec la macro présentée par Thierry : quand j'utilise
Code : Tout sélectionner
REM ***** BASIC *****
option explicit
Function curFormName (o as object) as string
'Fonction qui permet de récupérer le nom du formulaire
Dim args as object, i as integer
args = o.getArgs
for i = lBound(args) to uBound(args)
if args(i).name = "PECM" then
curFormName = args(i).value
exit for
end if
next
End Function
J'ai une erreur qui s'affiche me disant que "l'argument n'est pas facultatif" en me sélectionnant le args= 0.getArgs
Quelqu'un aurait une idée?
Merci beaucoup,
Tiago
Re: [Résolu][Base] Enregistrer et fermer un formulaire
Publié : 03 juin 2016 12:27
par MrPropre
Ami fossoyeur,
Pas de
déterrage, surtout d'un fil marqué résolu.