【问题标题】:Too Few Parameters... Form Search Causing the Issue参数太少...导致问题的表单搜索
【发布时间】:2015-07-19 01:39:28
【问题描述】:

我有一个从 Access 中的查询导出表到 Excel 的子程序。在 Access 中,我有一个运行查询并允许用户根据需要更新查询的表单。如果我使用设置的参数(不使用表单)运行子程序,例如,“奥地利”子程序工作正常。但是当我使用表格并在“Austria”中写入时,我会收到区域消息:

3601 参数太少。预计 1。

问题似乎与 HAVING ((([Game Categories].Lottery)=[Forms]![TransferToExcel]![listLotteryName]) (如果替换为奥地利,子工程很好)

Sub Mysub()
Dim objexcel As Excel.Application
Dim wbexcel As Excel.Workbook
Dim wbExists As Boolean
Dim qdfQUERY2014sales As QueryDef
Dim rsQUERY2014sales As Recordset

Set qdfQUERY2014sales = CurrentDb.QueryDefs("QUERY2014sales")
Set rsQUERY2014sales = qdfQUERY2014sales.OpenRecordset()

Set objexcel = CreateObject("excel.Application")
objexcel.Visible = True


On Error GoTo Openwb
wbExists = False
Set wbexcel =  objexcel.Workbooks.Open("C:\Users\MORTBANKER\Documents\test.xlsm")
wbExists = True

Openwb:
On Error GoTo 0
If Not wbExists Then
    Set wbexcel = objexcel.Workbooks.Add()
End If

CopyToWorkbook wbexcel, rsQUERY2014sales

'need to save the workbook, make it visible or something.
End Sub

Private Sub CopyToWorkbook(objWorkbook As Excel.Workbook, rsQRY As Recordset)
Dim newWorksheet As Excel.Worksheet
Set newWorksheet = objWorkbook.Worksheets.Add()

 With newWorksheet
    .Range("A1").CopyFromRecordset rsQRY   '<-magic happens here!
End With
'Copy stuff to the worksheet here'
End Sub

任何人有什么想法我可以解决这个问题吗?

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

    当您有一个引用表单控件的查询并将该查询用作OpenRecordset 的数据源时,Access 不会解析表单控件并检索它们的值。相反,它将控件引用视为常规查询参数......这意味着它希望您单独提供参数值。

    幸运的是,这很容易做到。由于您打开了QueryDef,因此只需遍历其Pararmeters 集合并为每个集合提供值。

    Set qdfQUERY2014sales = CurrentDb.QueryDefs("QUERY2014sales")
    Dim prm As DAO.Parameter
    For Each prm In qdfQUERY2014sales.Parameters
        prm.Value = Eval(prm.Name)
    Next
    Set rsQUERY2014sales = qdfQUERY2014sales.OpenRecordset()
    

    这种方法有效,因为根据您的示例,Access 会告诉您 prm.Name"[Forms]![TransferToExcel]![listLotteryName]"。然后Eval("[Forms]![TransferToExcel]![listLotteryName]") 会给你那个控件的值。

    实际上,如果您确定查询中只会有一个这样的参数,则无需遍历其Parameters 集合。你可以这样做:

    With qdfQUERY2014sales
        .Parameters(0).Value = Eval(.Parameters(0).Name)
    End With
    

    【讨论】:

    • 非常感谢。你花时间解释为什么让我大吃一惊的事实。真的,它的工作很棒。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 2017-06-22
    • 2018-04-11
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多