【问题标题】:Create a query from a button on a form从表单上的按钮创建查询
【发布时间】:2018-07-16 04:28:50
【问题描述】:

我有一个带有按钮的表单。 我希望按钮从表(表单填充)中创建查询

我做了按钮,进入代码生成器

Private sub button123_on click()

End sub

我在 DOA 中查找了查询,但我无法弄清楚,甚至不知道这是否是我应该使用的。我只需要知道私有子之后会发生什么

如果语句? 昏暗的东西? doCmd? ??????????‍♂️

我只是在寻找基本布局

我是否在其他地方构建查询,然后放置命令为按钮运行它?它必须在 VBA 中,因为我需要选择记录的 TOP 变量。 TOP 发生了变化,所以我无法在 sql 中执行此操作。

经过一番研究,这是我的代码

Private Sub Command487_Click()

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSQL As String
Set db = CurrentDb
Dim varX    As Variant
Set qdef = db.CreateQueryDef("MyQuery")
Application.RefreshDatabaseWindow
varX = DLookup("[Quantity1]", "tblFilledRequests", "[OrderID] = [Forms]![frmFilledRequests]![OrderID]")

strSQL = "SELECT TOP varX tblFilledRequests.OrderID, tblFilledRequests.RequestFillDate, tblFilledRequests.Issuer, tblFilledRequests.Unit, tblFilledRequests.ContactNumber, tblFilledRequests.CommonName1, tblFilledRequests.Quantity1, tblFilledRequests.CommonName2, tblFilledRequests.Quantity2, tblWeapons.IssueCount, tblWeapons.StockNumber, tblWeapons.SerialNumber, tblWeapons.Status " _
& "FROM tblWeapons INNER JOIN tblFilledRequests ON tblWeapons.WeaponID = tblFilledRequests.CommonName1 " _
& "WHERE (((tblFilledRequests.OrderID)=Forms!frmFilledRequests!OrderID) And ((tblWeapons.Status)=""AVAILABLE"")) " _
& "ORDER BY tblWeapons.IssueCount, tblWeapons.StockNumber;"

qdf.SQL = strSQL
DoCmd.OpenQuery "MyQuery"
qdf.Close
Set qdef = Nothing
Set db = Nothing

End Sub

我得到一个空白查询,并且我得到一条错误消息 qdf.SQL 对象变量或未设置块变量

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    我将假设您要执行该查询并将结果显示在表单上的元素中,例如列表框。

    我已经制作了一个表格:

    • 名为 txtTopX 的文本框允许用户输入他们想要检索的记录数量。
    • 执行查询并显示结果的按钮 (btnQuery)
    • 将显示结果的列表框。我将其命名为 lstResults 并将 Column Count 属性设置为我的查询将返回的列数。 (在本例中为 3)

    表格上的代码是这样的:

    Private Sub btnQuery_Click()
    Dim limit As Integer
    
    'Determine the TOP X limit
    If IsNumeric(Me.txtTopX.Value) Then
        limit = Me.txtTopX.Value
    Else
        limit = 5 'Some default value incase the input from the textbox is not a number
    End If
    
    'Set the rowsource of the listbox to the query's results
    lstResults.RowSource = "SELECT TOP " & limit & " col1, col2, col3 FROM Table1 ORDER BY ID DESC"
    End Sub
    

    本例中的表是 Table1,有 4 列:ID、col1、col2 和 col3。在我的查询中,我只显示 3 列并使用 ID 列对我的记录进行排序。 (因为你打算使用TOP X,我想你想显示TOP X最近的记录)

    【讨论】:

    • 好消息! :)
    【解决方案2】:

    谢谢你的建议,Grimlor。

    不,我不想在当前表单上显示查询结果。我实际上需要在另一个表单上以数组的形式显示它们,但这有点过时了。

    我需要用 VBA 编写查询

    对于我的 TOP,我使用了 DLookup 函数。并将 varX 定义为变量

    varX = DLookup("[Quantity1]", "tblFilledRequests", "[OrderID] = [Forms]!
    [frmFilledRequests]![OrderID]")
    

    我会从你的回答中尽我所能

    【讨论】:

      【解决方案3】:
      Private Sub Command490_Click()
         Dim db As DAO.Database
         Set db = CurrentDb
         Dim qdf As DAO.QueryDef
         Dim strSQL As String
         Dim limit As Integer
         limit = Me.Quantity1.Value
      
         On Error Resume Next
         DoCmd.DeleteObject acQuery, "testQry"
         On Error GoTo 0
      
         strSQL = "SELECT TOP " & limit & " tblFilledRequests.OrderID, 
         tblFilledRequests.RequestFillDate, tblFilledRequests.Issuer, 
         tblFilledRequests.Unit, tblFilledRequests.ContactNumber, 
         tblFilledRequests.CommonName1, tblFilledRequests.Quantity1, 
         tblFilledRequests.CommonName2, tblFilledRequests.Quantity2, tblWeapons.IssueCount, 
         tblWeapons.StockNumber, tblWeapons.SerialNumber, tblWeapons.Status " & vbCrLf & _
         "FROM tblWeapons INNER JOIN tblFilledRequests ON tblWeapons.WeaponID = 
         tblFilledRequests.CommonName1 " & vbCrLf & _
         "WHERE (((tblFilledRequests.OrderID)=[Forms]![frmFilledRequests]![OrderID]) AND 
         ((tblWeapons.Status)=""AVAILABLE"")) " & vbCrLf & _
         "ORDER BY tblWeapons.IssueCount, tblWeapons.StockNumber;"
      
         Set qdf = db.CreateQueryDef("testQry", strSQL)
      
         DoCmd.OpenQuery ("testQry")
      End Sub
      

      这一切都很好。谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多