web-dev-qa-db-fra.com

Passage de paramètres entre des formulaires dans MS Access

J'ai créé un formulaire de connexion nommé login dans lequel le nom d'utilisateur est saisi dans la zone de texte txtEmployee. Je dois également afficher le même nom dans la deuxième page sous un autre formulaire MS Access.

15
user419263

DoCmd.OpenForm vous permet de passer une valeur arbitraire comme dernier paramètre. Cette valeur est accessible dans le nouveau formulaire en tant que Me.OpenArgs :

' Invoked by some Button on the first form '
Sub GoToSecondPage()
    DoCmd.OpenForm "MySecondPage", acNormal, , , , , txtEmployee.Value
End Sub

' Second form '
Sub Form_Open(Cancel As Integer)
    If Not IsNull(Me.OpenArgs) Then
        lblShowEmployeeName.Value = Me.OpenArgs
    End If
End Sub

(Exemple de code non testé.)

26
Heinzi

Vous pouvez passer une chaîne délimitée en tant que paramètre OpenArgs:

DoCmd.OpenForm FormName:="miscForm", OpenArgs:=paramstring

Voici une routine pour traiter une chaîne délimitée par des canaux passée en tant que paramètre à DoCmd.OpenForm:

Dim Pstring As Variant

If Len(Me.OpenArgs) > 0 Then
   Pstring = Split(Me.OpenArgs, "|")
   var1 = Pstring(0)
   <etc..>
End If
6
Lance Roberts

Personnellement, je leur transmettrais les arguments ouverts lors de l'ouverture du formulaire. Par exemple, du formulaire A, vous écririez

DoCmd.OpenForm "frmB", , , , , acDialog,”Badger”

Et ensuite, dans l'événement OnOpen du formulaire B, vous pouvez capturer ce que vous avez envoyé comme ceci

Me.txtSomething=Me.OpenArgs

Vous ne pouvez passer qu’une chose, mais ce que je fais souvent, c’est de passer une chaîne délimitée par des tubes dans les arguments ouverts, puis de la scinder.

4
Kevin Ross

Quelques idées ...

Utilisez l'événement AfterUpdate du champ Nom d'utilisateur de connexion pour écrire le nom dans une variable globale, puis remplissez le champ de la deuxième page avec l'événement OnLoad.

Ou, si vous prévoyez de laisser le formulaire de connexion ouvert en permanence, vous pouvez définir la valeur par défaut du champ directement sur = [Forms]! [LogInForm]! [UserName]

0

Pourquoi ne pas créer une fonction publique qui stocke et/ou récupère une variable globale que vous stockez après l'exécution du premier formulaire? Cela vous permettrait non seulement de l'utiliser sur un ou plusieurs formulaires, mais également comme critère dans une requête (par exemple, pour renvoyer des enregistrements qui correspondent au nom d'utilisateur que vous avez stocké).

Je conviens que c'est une "fausse" sécurité, mais il y a aussi des moments où cela suffit à vos besoins. J'ai déjà implémenté cela auparavant, en faisant correspondre le nom d'utilisateur de la chaîne d'environnement à une entrée dans une table utilisateur. 

BTW, je me réfère à cette fonctionnalité comme personnalisation, pas de sécurité.

Juste une pensée.

0
Jim Parker