0

SQL データベースには、テーブルがありますTable1。このテーブルは別のテーブルに関連付けられており、このテーブルは に関連付けられTable2ていTable3ます。Query1から特定のレコードを選択するクエリがありますTable1

このデータベースは Access データベース プロジェクトにリンクされています

フォームTable1Dataは に基づいており、関連データ (およびそれに続くデータ)Table1を含むデータシートがあります。このフォームは別のフォーム ( ) によって開かれています。問題は、フォームを開いたときに発生します。フォームをフィルター処理したいのですが、マクロを設定してフォームを開いてフィルターを に設定すると、フォーム内のデータがフィルター処理されません。なぜこれが起こるのですか、これはそれを行う方法ではありませんか? からすべての列を選択するため、列の不一致は問題になりません。Table2Table3SwitchboardQuery1Query1Table1

さらに、ロックダウンしたい-Query1他のクエリと同じように、特定の人のみが実行できます(Query2などQuery3)。そのため、編集が許可されているデータのみを編集できます。

4

1 に答える 1

0

私の推奨する解決策は、Form Open イベントでレコードソースを設定することです。これにより、何が起こっているかをほとんど制御できます。

これを行うための定型文は次のとおりです。また、フォームの呼び出し時に渡される OpenArgs の検索も含まれます。SQL の呼び出しフォームから何も指定しない場合は、If/Then ステートメントをコメント アウトするか削除するだけです。

Private Sub Form_Open(Cancel As Integer)
    ' Comments  :
    ' Parameters: Cancel -
    ' Modified  :
    ' --------------------------------------------------

    On Error GoTo Err_Form_Open

    Dim strSQL As String
    Dim strVariable As String
    Dim strDateVariable As String
    Dim dteDateVariable As String
    Dim i As Integer
    Dim n As Integer

    'Get variables from Left and right of | in OpenArgs
    If Not (IsNull(Me.OpenArgs)) Then

        i = InStr(1, Me.OpenArgs, "|")
        n = Len(Me.OpenArgs)

        strVariable = Left(Me.OpenArgs, n - (n - i + 1))

        strDateVariable = Right(Me.OpenArgs, (n - i))

        dteDateVariable = CDate(strDateVariable)

    Else

        GoTo Exit_Form_Open

    End If

    strSQL = "SELECT   ... " _
           & "FROM     ... " _
           & "WHERE (((Field1)='" & strVariable & "') " _
           & "  AND  ((Field2)=#" & dteDateVariable & "#));"

    Me.RecordSource = strSQL

    Me.Requery

Exit_Form_Open:

    Exit Sub

Err_Form_Open:

    Select Case Err.Number
        Case Else
            Call ErrorLog(Err.Number, Err.Description, "Form_Open", "frmName", Erl)
            GoTo Exit_Form_Open
    End Select

End Sub
于 2009-06-10T16:23:00.600 に答える