2017-10-16 5 views
0

J'ai un formulaire qui fournit une interface graphique pour le filtrage des enregistrements sur une feuille de données. J'ajoute un ensemble de contrôles qui permettent à un utilisateur d'enregistrer des configurations de filtre afin qu'elles puissent être rappelées ultérieurement. Les filtres enregistrés sont stockés dans une table; chaque enregistrement a un surnom (clé primaire) et un champ pour l'instruction SQL réelle. Le formulaire principal aura une zone de liste qui affiche tous les filtres enregistrés par surnom (voir ci-dessous). La RowSource de cette zone de liste est liée à la table de filtres enregistrésLa zone de liste liée à la table ne reflète pas complètement les mises à jour de la table après requery

Saved Filter List

Je veux permettre aux utilisateurs de changer le pseudo et/ou une instruction SQL d'un filtre enregistré. Pour ce faire, le bouton Modifier ouvre un sous-formulaire avec deux zones de texte remplies avec les champs de l'enregistrement sélectionné. Lorsque le sous-formulaire est fermé, il demande à l'utilisateur s'il souhaite enregistrer les modifications dans l'enregistrement (pour cette raison, le sous-formulaire et ses contrôles ne sont pas liés au tableau Filtres enregistrés).

Pour autant que je sache, les fonctions qui remplissent le sous-dossier et mettent à jour l'enregistrement se déroulent sans problème. Toutefois, la zone de liste des filtres Nicknames enregistrés a un problème. Lorsque le surnom d'un enregistrement est modifié, la modification se propage à la fois à la table et à la zone de liste. Si l'utilisateur tente immédiatement de modifier à nouveau le filtre enregistré, il rencontre un problème car la propriété .Value de la zone de liste renvoie toujours l'ancien nom. Si l'utilisateur sélectionne à la place un autre surnom, puis revient à la première sélection et tente de l'éditer, le sous-formulaire s'ouvre correctement.

J'ai essayé de réactualiser la zone de liste avant de rechercher le contrôle et cela n'a pas résolu le problème. J'ai essayé de désélectionner l'élément dans la zone de liste et requery, et cela n'a pas fonctionné non plus. Comment puis-je m'assurer que le contrôle de la zone de liste est correctement mis à jour lorsqu'un utilisateur modifie un filtre enregistré?

Voici mon code:

(formulaire parent)

'Function that is bound to the OnClick event of the Edit button 
Private Function sfEdit() 

    Dim sfLabel As String 
    sfLabel = Me.List_Saved.Value 

    If epuModule.OpenEditor(sfLabel) = False Then 
     MsgBox "Unable to locate record with name " & Chr(34) & sfLabel & Chr(34), vbCritical 
    End If 

    Debug.Print Me.List_Saved.Value 
    Me.List_Saved.Requery 

End Function 

([Form_SQL Editor] alias éditeur Pop-Up)

Private Sub Form_Close() 
    If PromptSave = True Then 
     Select Case MsgBox("Do you want to save your changes?", vbYesNo) 
      Case vbYes 
       sfModule.Edit RecordLabel, Me.tbTerms.Value, NewLabel 
      Case vbNo 

     End Select 
     PromptSave = False 
    End If 
End Sub 
+0

Pouvez-vous rendre cette question plus minimale, par ex. essayer de le répliquer dans une base de données propre? Il semble improbable que tout ce code soit pertinent. Voir: [Comment créer un exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) –

+0

@ErikvonAsmuth Will do. Désolé, encore nouveau pour tout cela. –

Répondre

0

Déplacer Me.List_Saved.Requery (en remplacement de façon appropriée "Moi" avec un identifiant global) à votre Form_Close après sfModule.Edit RecordLabel, Me.tbTerms.Value, NewLabel. À moins que votre formulaire d'édition ne soit modal, il s'exécute avant que toute modification soit réellement effectuée/enregistrée.