2010-07-21 6 views
1

Je suis nouveau dans le développement Access VBA et je suis invité à déboguer et ajouter des fonctionnalités à une application Access 2007 sur laquelle deux développeurs précédents ont travaillé.ouvrir le fichier du chemin stocké dans l'accès db lorsque l'utilisateur clique sur le bouton

Un formulaire affiche les enregistrements d'une base de données et affiche un bouton pour chaque enregistrement. Le bouton est censé ouvrir un fichier en utilisant le chemin approprié. Mais lorsque l'utilisateur clique sur le bouton, il utilise toujours le chemin de fichier du premier enregistrement que le formulaire affiche, au lieu du chemin de fichier de l'enregistrement correct.

Le code semble essayer d'utiliser un signet pour ouvrir le fichier correct, mais comme indiqué ci-dessus, cela ne fonctionne pas. Voici le code pertinent de l'événement de clic sur le bouton. Lorsque j'essaie de formulaire Debug.Print.Bookmark à la fenêtre immédiate, il affiche simplement un point d'interrogation.

Dim rs As Recordset 
Set rs = form.RecordsetClone 
rs.Bookmark = form.Bookmark 

Éditer: ajouter plus de code pour @ la demande de Remou. Lorsque le bouton est cliqué:

Private Sub OpenFile_Click() 
    Form_FilingProcess.Subform_cmdOpenFile_Click Me 
End Sub 

qui appelle:

Public Sub Subform_cmdOpenFile_Click(frm As Form) 
Set rs = frm.RecordsetClone 
rs.Bookmark = frm.Bookmark 

Et puis il passe pour ouvrir le fichier.

+0

Peut-être sur votre Debug.Print vous pouvez afficher la valeur d'un champ d'identification rs recordset? – JeffO

+0

@Jeff O - Je peux afficher toutes les valeurs du jeu d'enregistrements que je veux, mais cela ne m'aide pas à ouvrir le fichier lié à l'enregistrement correct, si cela a du sens. J'ai besoin de déterminer quel enregistrement est lié au fichier que l'utilisateur veut ouvrir. – LFurness

Répondre

4

Si le bouton est pour chaque enregistrement, il n'est pas nécessaire de jouer avec le jeu d'enregistrements. Vous pouvez utiliser le nom du contrôle pour obtenir le fichier:

TheFile=Me.MyControl 

Il semble que vous ayez à la fois un formulaire et un sous-formulaire. Je devine que de vos réponses que le set-up est quelque chose comme ceci:

|------------------------------| 
    | Main Form     | 
    -------------------------------- 
    Sub form 
    -------------------------------- 
    Row      Button 
    -------------------------------- 
    Row      Button 
    -------------------------------- 

Si le nom du bouton est OpenFile, essayez:

Private Sub OpenFile_Click() 
    MsgBox Me.NameOfAContolHere & "" 
    'Form_FilingProcess.Subform_cmdOpenFile_Click Me 
End Sub 

Cela peut ensuite être utilisé pour Ope un fichier comme ceci:

Private Sub OpenFile_Click() 
    FollowHyperlink Me.NameOfControlWithPathToFile 
    'Form_FilingProcess.Subform_cmdOpenFile_Click Me 
End Sub 
+0

Le bouton n'est pas lié à l'enregistrement ou au fichier. Il déclenche simplement l'événement On Click, qui exécute une méthode qui ouvre le fichier à partir du chemin dans un enregistrement. Y a-t-il un moyen pour moi de savoir quel bouton a été cliqué? – LFurness

+0

Est-ce que votre formulaire en mode Formulaire est constitué d'un nombre de lignes avec un bouton sur chaque ligne? – Fionnuala

+0

Oui, c'est vrai. – LFurness

0

Voici ce que votre sous devrait ressembler à:

Public Sub Subform_cmdOpenFile_Click(frm As Form) 
    Dim CurrentBookmark as String 
    Set rs = frm.RecordsetClone 
    CurrentBookmark = frm.Bookmark 
    rs.Bookmark = CurrentBookmark 
End Sub 

Définissez une variable de chaîne sur la valeur du signet du formulaire. Définissez ensuite le signet du jeu d'enregistrements sur la valeur de la variable chaîne.

Dim rs As Recordset 
dim CurrentBookmark as String 

Set rs = Me.RecordsetClone 

CurrentBookmark = Me.Bookmark 
rs.Bookmark = CurrentBookmark 

http://msdn.microsoft.com/en-us/library/aa223967(office.11).aspx

+1

Quelle est la raison pour cela? – Fionnuala

+0

@Jeff O - form.Bookmark a la valeur "?" et Me.Bookmark renvoie une erreur: "Vous avez entré une expression qui contient une référence non valide à la propriété Bookmark." – LFurness

+0

Parce que Microsoft l'a dit;) – JeffO

Questions connexes