0

私はMS Accessで働いています。ログイン情報 (vba コードによって決定される) に基づいて、特定のレコードセットをユーザーに表示しないフォームを開こうとしています。

次の DoCmd.OpenForm を使用すると、フォームが開かれますが、ユーザーから非表示にしたいレコードセット (G_Var = YES) のみが除外されます。したがって、ユーザーはフィルター処理されたデータシート フォームを削除して、行を表示することができます (フィルターを無効にしたくありません)。私は何を間違っていますか?

DoCmd.OpenForm "Metrics", acFormDS, , "G_Var = 'NO'"  

また、この情報を取得するために何らかのクエリを作成できるのではないかと考えていました。おそらく次のようなものです:

rs.Open "Select * FROM Metrics WHERE G_Var = 'NO';", CurrentProject.Connection

この照会された情報を取得してフォームに出力する方法がわかりません。レコードソースを定義することで、次のようにタスクを達成できました。

Private Sub btnMetrics_From_Click()

  DoCmd.OpenForm "Metrics", acFormDS
  Forms.Item("Start Form").Visible = False

End Sub

Private Sub Form_Activate()
  Dim rs As New ADODB.Recordset
  Dim sql As String
  Dim Boo As Boolean

    g_User = UserInfo(ap_GetUserName())
    Boo = False

rs.Open "SELECT * FROM tbl_User_Info WHERE G_Var_Access = TRUE;", CurrentProject.Connection

Do Until rs.EOF = False
    If rs.Fields("User_Name").Value = g_User Then
        Boo = True

        Exit Do
    End If
Loop

rs.Close

If Boo = True Then

Else
    Me.RecordSource = "SELECT * FROM Metrics WHERE G_Var = 'NO';"
End If

    Me.Requery

End Sub

ありがとう

4

1 に答える 1

1

メインの RecordSource SQL として、このようなものを試すことができます...

SELECT M.*
FROM Metrics AS M,tbl_User_Info AS U
WHERE U.User_Name=CurrentUser()
AND M.G_Var LIKE IIF(U.G_Var_Access=TRUE,'*','NO')
于 2013-08-05T19:38:29.700 に答える