根据带参数的选择查询对表单进行个性化设置



我一直在开发Access 2013数据库,有点卡住了
我的数据库基于登录名。一旦你登录,你就可以看到你所有的游戏、物品等。
我已经制作了一个登录表格,当用户名&如果密码输入正确,您将进入主窗体。此外,它还会在主窗体上设置一个带有登录用户名的标签
对于关于用户的数据,我有构建查询,这些查询通过Username作为Parameter来检索信息
我的问题是如何使用这些查询(例如,所有用户的游戏),并在表单中显示信息?

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

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

有什么想法吗?此外,如果有更好的方法可以做到这一点,我愿意接受的建议

我已经能够回答我的问题
我找到的解决方案不是最漂亮的,但很管用。

如果我得到了一个表单,例如,基于用户的游戏,我使用带有参数的常规选择查询来获取信息,并使用以下代码使其工作:

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

我希望这能帮助任何反对它的人。

最新更新