データシートのレコードをフィルタリングするためのグラフィカルインターフェイスを提供するフォームがあります。私は後でリコールできるように、ユーザーがフィルタ設定を保存できるように一連のコントロールを追加しています。保存されたフィルタはテーブルに保存されます。各レコードにはニックネーム(主キー)と実際のSQLステートメントのフィールドがあります。メインフォームには、保存されたすべてのフィルタをニックネームで表示するリストボックスがあります(下記参照)。このリストボックスのRowSource
が保存にバインドされている私は、ユーザーが保存したフィルタのニックネームおよび/またはSQLステートメントを変更できるようにしたいテーブルテーブルにバインドされたリストボックスは、クエリの後にテーブルへの更新を完全に反映しません。
をフィルタリングします。これを実現するには、[編集]ボタンをクリックして、選択したレコードのフィールドが入力された2つのテキストボックスを含むサブフォームを開きます。サブフォームが閉じられると、レコードに変更を保存するかどうかをユーザーに確認します(このため、サブフォームとそのコントロールはSaved Filtersテーブルにバインドされません)。
私が知る限り、レコードのサブレコードおよび更新レコードをスムーズに実行する関数があります。ただし、保存されたフィルタニックネームのリストボックスに問題があります。レコードのニックネームが編集されると、テーブルとリストボックスの両方に変更が反映されます。リストボックスの.Value
プロパティが古い名前を返しているため、ユーザーは保存されたフィルタをすぐに再度編集しようとすると問題に遭遇します。ユーザーが他のニックネームを選択した後、最初の選択に戻り、編集しようとすると、サブフォームが正しく開きます。
コントロールを検索する前にリストボックスを再クエリしようとしましたが、問題を解決できませんでした。私はリストボックスと再クエリーの項目の選択を外そうとしましたが、それはどちらもうまくいきませんでした。ユーザーが保存されたフィルタを変更したときにリストボックスコントロールが適切に更新されるようにするにはどうすればよいですか?ここで
は私のコードです:(親フォーム)
'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エディタ]別名編集ポップアップ)
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
あなたはこの質問を最小限に抑えることができますか?クリーンなデータベースでそれを複製しようとしますか?そのコードがすべて適切であるとは思われません。参照:[最小限で完全で検証可能な例を作成する方法](https://stackoverflow.com/help/mcve) –
@ErikvonAsmuthが行います。申し訳ありませんが、これのすべてにはまだ新しいです。 –