基于带参数的选择查询个性化表单

时间:2016-05-27 16:54:54

标签: sql forms access

我一直在使用Access 2013数据库,有点卡住了 我的数据库基于登录。登录后,您可以看到所有游戏,物品等 我已经创建了一个登录表单,当用户名和正确输入密码会将您移动到主窗体。它还会在主窗体上使用登录的用户名设置标签 对于有关用户的数据,我有构建查询,通过Username检索信息作为参数 我的问题是如何使用此查询(例如 - 所有用户的游戏),并在表单中显示信息?

我所想到的是使用代码中的参数运行查询:

Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset

Set dbs = CurrentDb

'Get the parameter query
Set qdf = dbs.QueryDefs("Get User's Games")

'Supply the parameter value
qdf.Parameters(0) = Me.txt_UserName <- This is the user name from the main form

'Open a Recordset based on the parameter query
Set rst = qdf.OpenRecordset()

此代码可以检索所需的数据,但我不知道如何将其注入表单中?我已经建立了相应的表格
我尝试过使用以下内容:

Forms![My Games].RecordSource = qdf.SQL
DoCmd.OpenForm "My Games"

但是sql没有参数,所以它不起作用。也许可以用它的值来替换参数吗?
我试过这个,但无法编译:

Dim q As String
q = Replace(qdf.SQL, "[Enter User Name]", Me.txt_UserName)
Forms![My Games].RecordSource = q

有什么想法吗?此外,如果有更好的方法,我可以接受建议

1 个答案:

答案 0 :(得分:0)

我能回答我的问题。
我找到的解决方案并不是最漂亮的,但它确实有效。

如果我已经根据用户的游戏获得了一个表单,我会使用带参数的常规选择查询来获取信息,并使用这段代码使其工作:

Public Function ChangeQuery(qdf As DAO.QueryDef, userName As String) As String
    Dim q As String
    q = qdf.sql

    Dim UserNameAsString As String
    UserNameAsString = "'" & userName & "'"

    q = Replace(q, "[Enter User Name]", UserNameAsString )
    ChangeQuery = q
End Function

此函数将参数[Enter User Name]替换为我在userName函数中给出的任何内容并替换sql,因此它没有任何参数。
以下是如何使用该功能:

Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef

Set dbs = CurrentDb

'Get the parameter query
Set qdf = dbs.QueryDefs("Get User's Games") // Get The needed Query

Me.RecordSource = ChangeQuery(qdf, Me.OpenArgs) //Sets the recordsource of the form to the non parameter sql.

如果我需要非选择查询,我会像这样使用它

Dim qry As DAO.QueryDef
Set qry = dbs.QueryDefs("Query Name")
qry .Parameters(0) = // some parameter 
qry .Parameters(1) = // some parameter 

qry .Execute

我希望这有助于任何反击它的人。