【问题标题】:Personalize forms based on select queries with parameters根据带有参数的选择查询个性化表单
【发布时间】:2016-05-27 16:54:54
【问题描述】:

我一直在使用 Access 2013 数据库,但有点卡住了。
我的数据库基于登录。登录后,您可以查看所有游戏、物品等。
我已经制作了一个登录表单,当正确输入用户名和密码时,您会转到主表单。它还会在主表单上设置一个带有登录用户名的标签。
对于有关用户的数据,我构建了查询,这些查询按用户名作为参数检索信息。
我的问题是如何使用此查询(例如 - 所有用户的游戏),并以表格形式显示信息?

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

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

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

【问题讨论】:

    标签: sql forms ms-access


    【解决方案1】:

    我已经能够回答我的问题了。
    我找到的解决方案不是最漂亮的,但它有效。

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

    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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      相关资源
      最近更新 更多