1

フォーム(ユーザー)にサブフォーム(ユーザーサブフォーム)が埋め込まれています。私が達成しようとしているのはロード時です。サブフォームはテーブル内のすべてのユーザーを表示し、メインフォームのコントロールはフィルターとして機能する必要があります。
つまり
、ユーザー A がメイン フォームのコンボボックスから選択された場合、ユーザー A の詳細のみがサブフォームに表示さ
れ、メイン フォームのコンボ ボックスから選択 (つまり userA) がクリアされた場合、すべてのレコードがサブフォームに再びポップアップ表示されます。

これは非常に単純に聞こえますが、まず、フォームをロードすると、サブフォームに 1 つのレコードのみが表示されます。ユーザー コンボボックスで選択すると、そのユーザーのレコードのみが表示されます。私が見ることができるのは、選択を行うかどうかに関係なく、一度に1つの記録だけである場合、サブフォームを持つ目的を無効にします.

アクセス'03を使用しています。誰でもこれを手伝ってもらえますか。私はこれを達成することができたサンプルデータベースをここに持っていますが、私のものと比較して設定の違いを見つけることはできません.

4

4 に答える 4

3

メイン フォームにはレコードソースがなく、リンク条件もありません。

フィルター コントロールの更新後イベントは、サブフォームのフィルターを更新する必要があります (CodeSlave のコードが行うように)。サブフォームのレコードソースを割り当てることができます (私は後者を好む傾向があります。フィルターに伴う問題)。

私はこれまで何度もこれを行ってきましたが、通常はサブフォームを使用しませんでした。私はデータシートが好きではなく、継続的なフォームを使用しており、フォームのヘッダーにフィルター コントロールを配置しています。これで、サブフォーム コントロールを参照する難しさを回避できます (ただし、Praesagus の投稿に見られるように、With/End With ブロックを使用できるため、これは非常に簡単です)。

重要な点は、メイン フォームを UNBOUND にすることと、サブフォームのフィルタリングをトリガーする基準を配置するコントロールが必要なことです。

于 2009-06-13T12:45:36.237 に答える
2

サブフォームが「連続フォーム」または「データシート」として設定されていると思います。

フォームが開いたときにフィルターにまだ何かが残っていますか? マスター フォームが開いたときに明示的にクリアしてから、データを更新することができます。

編集
これは私が以前にやったことです:

Private Sub cmdCannedFilter_Click()
On Error GoTo Err_Click    
Dim strFilter As String
    strFilter = "(1 = 1)"
    strFilter = strFilter & " " & _
            "and (((someTable.Active)=Yes) "   

    Me![List_SubForm].Form.FilterOn = False
    Me![List_SubForm].Form.Filter = strFilter
    Me![List_SubForm].Form.FilterOn = True

Exit_Click:
    Exit Sub

Err_Click:
    MsgBox Err.Description
    Resume Exit_Click
End Sub

この場合、これはマスター フォームのボタンから実行されており、List_SubForm(明らかに) サブフォームです。私にとって重要なことは、フィルターをオフにしてから再度オンにする必要があったと思います. 理由は覚えていません。

これ(1 = 1)は、私が別の場所で似たようなことをしたためです。どこかでクエリを作成していたのでand、そこにプラグインする必要があるかどうかを毎回決める必要がありませんでした。

あなたは似たようなことをしていますか?

于 2009-06-10T21:55:27.887 に答える
1

ここには 2 つの異なるレコードセットがあるようです。ユーザーを選択すると、ユーザーの詳細が表示されます。ユーザーが選択されていない場合は、すべてのユーザーを表示する必要があります。その場合は、2 つのサブフォームを使用してそれらを切り替えます。それらを fAllUsers と fUserDetails と呼びます。サブフォーム コントロール名を sfUser としましょう。ユーザー フォームの主キーと fUserDetails の外部キーは userID であると想定しています。サブフォームに、親にリンクされたフィールドがないことを確認してください。
親で:

Private Sub Form_Current()
    Dim sForm as string
    Dim sFilter as string
    Dim lUserID as long
    lUserID =nz(me!userID,0)
    sForm="fUserDetails"
    sFilter="userID=" & lUserID
    if lUserID<>0 then 
        sForm="fAllUsers"
        sFilter=""
    end if
    with sfUser
        .sourceobject=sForm
        .filter=sFilter
        .filteron=true
    end with
End Sub

それが役立つことを願っています。

于 2009-06-12T20:34:37.630 に答える
0

「TmprryQryFrLnkFldsCrtn0123456789」という名前のランダムな (Expletive) クエリを誤って削除したため、サブフォームに 1 つのレコードしか表示されないという問題が発生しました。たまたま、持っていたバックアップ DB と、問題を抱えていた DB を比較しただけです。

クエリを復元すると、すべての結果が再び表示されました。

于 2013-05-29T19:30:42.220 に答える