[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 !
ThierryM
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 437
Inscription : 26 nov. 2006 12:29
Localisation : Les Corbières
Contact :

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

Message 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
Dernière modification par ThierryM le 06 sept. 2008 20:40, modifié 1 fois.
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

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

Message 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
ThierryM
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 437
Inscription : 26 nov. 2006 12:29
Localisation : Les Corbières
Contact :

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

Message 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
Dernière modification par ThierryM le 06 sept. 2008 15:57, modifié 1 fois.
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 437
Inscription : 26 nov. 2006 12:29
Localisation : Les Corbières
Contact :

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

Message 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
Formulaire avec bouton "Valider" pour enregistrer et fermer le formulaire
(206.08 Kio) Téléchargé 526 fois
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 437
Inscription : 26 nov. 2006 12:29
Localisation : Les Corbières
Contact :

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

Message 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 
Dernière modification par ThierryM le 06 sept. 2008 20:24, modifié 1 fois.
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12196
Inscription : 08 nov. 2005 17:23
Localisation : Caen, France
Contact :

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

Message 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.
ThierryM
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 437
Inscription : 26 nov. 2006 12:29
Localisation : Les Corbières
Contact :

Re: [Base] Enregistrer et fermer un formulaire

Message 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
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
tiago972
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 02 juin 2016 17:51

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

Message 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
Open office 4.1.2
Windows XP
Avatar de l’utilisateur
MrPropre
MOOdérateur
MOOdérateur
Messages : 1139
Inscription : 01 oct. 2008 18:54

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

Message par MrPropre »

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.
Verrouillé