Nous avons détaillé dans ce billet comment constituer un tel formulaire.
Choisissons d'éditer ce formulaire et ouvrons le navigateur de formulaire.
Nous obtenons ceci:
Cliquer droit dans le navigateur de formulaires sur l'icône "Sélection" :
nous permet d'afficher le panneau des propriétés du formulaire principal "Sélection". Dans notre cas, la source de données de ce formulaire principal "Sélection" est une instruction SQL
-------------+-----------------------+-----------
utilisateur | character varying(20) | not null
matricule | integer |
Le sous-formulaire "Employés" est lié à "Sélection" via le champ "matricule" (clef primaire de la table "employés") comme le montre le panneau des propriétés du sous-formulaire "Employés" (accessible bien sûr en cliquant droit sur l'icône "Employés")
Sub ReloadTableOne
'*************************************
Dim Frm as object
Frm=Thiscomponent.DrawPage.Forms.getByIndex(0)
Frm.reload()
End Sub
On peut aussi l'incorporer au document (bd01.odb dans notre exemple): dans ce cas le code ne sera disponible que pour ce document.
Si bd01.odb->Standard->Module1 n'existe pas encore, il faut cliquer sur nouveau pour le créer:
Si le module existe déjà, cliquer sur "Nouveau" nous permet d'ajouter la macro à ce module.
Pour que la macro puisse être utilisée, il faut via Outils->Options->Sécurité->Sécurité des macros
ajouter l'emplacement du fichier aux sources de confiances.
Si tout est en ordre au niveau des macros, un appui sur ENTER après encodage d'un matricule provoquera un rafraîchissement à condition que le focus soit propulsé hors du formulaire principal "Sélection". Pour cela, il faut veiller à faire passer la séquence d'activation du contrôle "fmtmatricule" de 0 à 1.
Qu'en est-il maintenant si à la place du champ formaté permettant de saisir le matricule, le formulaire contient une boite combinée (combobox):
Voici le texte de cette macro:
Sub SetFocusToEmployes
'*************************************
Dim Champ AS object
Dim Controleur AS object
Champ=Thiscomponent.DrawPage.Forms.GetByName("Sélection").getByName("Employés").getByName("txtnom")
Controleur = Thiscomponent.getCurrentController()
Controleur.getControl(Champ).setFocus()
End Sub
qui doit être rendue accessible tout comme la macro précédente
Le bouton "OK" est devenu inutile et le formulaire s'emploie maintenant de manière beaucoup plus confortable puisqu'un seul clic sur un matricule permet d'afficher les données concernées.
Post a Comment
Click to see the code!
To insert emoticon you must added at least one space before the code.