[Résolu][Base] Enregistrer et fermer un formulaire

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 !

[Résolu][Base] Enregistrer et fermer un formulaire

Messagepar ThierryM » 05 Sep 2008 22:52

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/forum/viewtopic.php?f=9&t=3329&p=18651#p18651).
Pourriez-vous m'éclairer ?
Merci pour vos réponses.

Thierry
Dernière édition par ThierryM le 06 Sep 2008 19:40, édité 1 fois.
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Re: [Base] Macro pour enregistrer et fermer un formulaire

Messagepar Pierre-Yves Samyn » 06 Sep 2008 12:19

Bonjour

Code : Tout sélectionner   AgrandirRéduire
option explicit

Sub PysFermer(PysEvent)

PysEvent.source.model.parent.updateRow
thiscomponent.currentController.Frame.close(true)

End Sub
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 11276
Inscrit le : 02 Mai 2006 09:42

Re: [Base] Macro pour enregistrer et fermer un formulaire

Messagepar ThierryM » 06 Sep 2008 12:29

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/forum/viewtopic.php?f=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/forum/viewtopic.php?f=20&t=7750
Dernière édition par ThierryM le 06 Sep 2008 14:57, édité 1 fois.
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Re: [Base] Macro pour enregistrer et fermer un formulaire

Messagepar ThierryM » 06 Sep 2008 12:50

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
Formulaire avec bouton "Valider" pour enregistrer et fermer le formulaire
(206.08 Kio) Téléchargé 388 fois
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Re: [Base] Macro pour enregistrer et fermer un formulaire

Messagepar ThierryM » 06 Sep 2008 14:45

Je viens de trouver quelques éclaircissements ici : http://www.oooforum.org/forum/viewtopic.phtml?p=288564#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   AgrandirRéduire
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   AgrandirRéduire
thisComponent.parent.FormDocuments.getByName(curFormName (thisComponent)).dispose()


[Ajout]
En fait,
Code : Tout sélectionner   AgrandirRéduire
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   AgrandirRéduire
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
Dernière édition par ThierryM le 06 Sep 2008 19:24, édité 1 fois.
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Re: [Base] Macro pour enregistrer et fermer un formulaire

Messagepar Bidouille » 06 Sep 2008 17:33

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.
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 10032
Inscrit le : 08 Nov 2005 17:23
Localisation : Brest, France

Re: [Base] Enregistrer et fermer un formulaire

Messagepar ThierryM » 06 Sep 2008 19:40

Ç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.phtml?p=272290#272290 fourni par Evgenych.
Code : Tout sélectionner   AgrandirRéduire
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
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Re: [Résolu][Base] Enregistrer et fermer un formulaire

Messagepar tiago972 » 03 Juin 2016 13:23

Bonjour à tous,

Je rencontre un petit problème avec la macro présentée par Thierry : quand j'utilise
Code : Tout sélectionner   AgrandirRéduire
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
Open office 4.1.2
Windows XP
tiago972
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 14
Inscrit le : 02 Juin 2016 16:51

Re: [Résolu][Base] Enregistrer et fermer un formulaire

Messagepar MrPropre » 03 Juin 2016 13:27

Ami fossoyeur,

Pas de déterrage, surtout d'un fil marqué résolu.
Nettoyez votre PC du piratage, utilisez des logiciels libres à chaque lavage.
Une seule dose de OpenOffice suffit à éliminer durablement toute trace de MS-Office.
Avatar de l’utilisateur
MrPropre
MOOdérateur
MOOdérateur
 
Message(s) : 1139
Inscrit le : 01 Oct 2008 17:54


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 5 invité(s)