2011-10-05 4 views
0

Je ne peux pas obtenir la méthode OpenForm pour ouvrir un formulaire avec l'enregistrement correct chargé. Je vais faire de mon mieux ici pour fournir les détails:MS Access 2007 méthode OpenForm, impossible d'obtenir la clause where pour produire le résultat correct

Le formulaire 'source' est basé sur le tableau A, et il est en lecture seule. Un bouton sur le formulaire source est utilisé pour ouvrir un formulaire 'cible' utilisé pour l'édition des enregistrements, également à partir du tableau A.

J'ai essayé d'utiliser l'assistant pour créer le bouton qui ouvre le formulaire en fonction de la clé primaire égalité. Le résultat de l'assistant est que, quel que soit l'enregistrement en contexte sur le formulaire source, seul le premier enregistrement du tableau A est chargé par le formulaire cible.

J'ai essayé d'utiliser une procédure avec les variantes suivantes:

Dim frm As String, whr As String 
frm = "Target Form" 
whr = "Forms![Source Form]!ID = Forms![Target Form]!ID" 
'whr = "[ID] = [ID]" 
'whr = "[ID] = Forms![Target Form]!ID" 
DoCmd.OpenForm frm, acNormal, , whr, , , 1 

Je pouvais soit obtenir que le premier enregistrement à charger sous la forme cible ou d'obtenir un nouveau record pour charger sous la forme cible. Mais je ne peux pas obtenir l'enregistrement chargé du formulaire source pour déterminer l'enregistrement chargé dans le formulaire cible.

Merci pour toute aide

Répondre

1

Je pense que vous avez près. Vous voulez que WhereCondition soit identique à une clause WHERE pour une requête de source d'enregistrement de Target Form, mais sans le mot WHERE.

Dim frm As String, whr As String 
frm = "Target Form" 
whr = "[ID] = " & Me.ID 
Debug.Print "whr: " & whr 
DoCmd.OpenForm frm, acNormal, , whr 

je comptais Me.ID que la valeur d'un contrôle dont le nom est ID et est lié à un champ dans l'enregistrement en cours du formulaire Source. Je suis un raccourci pour "cette forme". L'une des raisons pour lesquelles cela est utile est que vous n'aurez pas à réviser votre code si vous décidez ultérieurement de donner un nom différent au formulaire.

J'ai ajouté l'instruction Debug.Print afin que vous puissiez basculer vers la fenêtre Exécution (Ctrl + g) et copier la chaîne whr, puis la coller dans une nouvelle requête basée sur la même source d'enregistrements que Target Form. Cela peut être utile dans le cas où vous n'obtiendrez toujours pas le bon enregistrement affiché lorsque le formulaire cible s'ouvre.

Votre version inclut également 1 OpenArgs to OpenForm. Je n'ai pas vu comment tu utilisais ça, alors je l'ai laissé. Si le formulaire cible inclut une procédure d'événement qui fait quelque chose avec OpenArgs, assurez-vous qu'il ne remplace pas votre WhereCondition.

Questions connexes