问题定义Querydef参数,运行时错误13类型不匹配

时间:2015-09-25 14:43:27

标签: vba ms-access parameters

我想基于查询打开记录集。该查询有10个与表单匹配的参数。参数有点复杂,因为它们正在搜索部分字符串匹配。

我遇到了多个问题,似乎访问权限不允许我根据从表单中提取参数的查询打开记录集。相反,我现在尝试打开querydef并将其传递给记录集。当我尝试现在运行该函数时,我得到运行时错误13类型不匹配。有没有更好的方法来做我想做的事情?有没有人对修复此错误有任何见解?错误是突出显示第一个参数(导出国家/地区),但如果那个是一个问题,我相信它们都是。谢谢!

*已修改为尝试通过记录集传递条件参数

Function StatementUpdate()

Dim dbs As DAO.Database
Dim rstStatements As DAO.Recordset
Dim rstCBG As DAO.Recordset
Dim concStatement As String
Dim strSQL As Variant


Set dbs = CurrentDb()
strSQL = "SELECT [Statement] FROM [St_Gen_Qry] WHERE" _
     & " (([Statement Category]='General Information')" _
     & " And ([Export Country] Like '*" & Forms!New_Shipment_Home_frm.[Export Country] & "*'" _
     & " Or [Export Country]='All')" _
     & " And ([Export State] Like '*" & Forms!New_Shipment_Home_frm.[Export State] & "*'" _
     & " Or [Export State]='All')" _
     & " And ([Import Country] Like '*" & Forms!New_Shipment_Home_frm.[Import Country] & "*'" _
     & " Or [Import Country]='All')" _
     & " And ([Import State] Like '*" & Forms!New_Shipment_Home_frm.[Import State] & "*'" _
     & " Or [Import State]='All')" _
     & " And ([Shipment Type] Like '*" & Forms!New_Shipment_Home_frm.[Shipment Type] & "*'" _
     & " Or [Shipment Type]='All')" _
     & " And ([Material Category] Like '*" & Forms!New_Shipment_Home_frm.[Material Category] & "*'" _
     & " Or [Material Category]='All')" _
     & " And ([Sub Category] Like '*" & Forms!New_Shipment_Home_frm.[Sub Category] & "*'" _
     & " Or [Sub Category]='All')" _
     & " And ([Transgenic/ Conventional] Like '*" & Forms!New_Shipment_Home_frm.RegCode & "*'" _
     & " Or [Transgenic/ Conventional]='All')" _
     & " And ([Intended Use] Like '*" & Forms!New_Shipment_Home_frm.[Intended Use] & "*'" _
     & " Or [Intended Use]='All')" _
     & " And ([Permit] Like '*" & Forms!New_Shipment_Home_frm.[Permit Required] & "*'" _
     & " Or [Permit]='All')" _
     & " And ([Active]='Yes'));"

Set rstStatements = dbs.OpenRecordset(strSQL, dbOpenDynaset)
Set rstCBG = dbs.OpenRecordset("SELECT Cross_Border_Grid_Table.ID,    Cross_Border_Grid_Table.St_General FROM Cross_Border_Grid_Table WHERE   (Cross_Border_Grid_Table.ID)= " & [Forms]![New_Shipment_Home_frm]![Text105])


rstCBG.MoveFirst

'loop through each record in the CBG that matches select query
Do Until rstCBG.EOF
    concStatement = ""
    rstStatements.MoveFirst
    Do Until rstStatements.EOF
        concStatement = concStatement & vbCrLf & rstStatements(0) & vbCrLf
        rstStatements.MoveNext
    Loop
        rstCBG.Edit
        rstCBG![St_General] = concStatement
        rstCBG.Update
        rstCBG.MoveNext
        Loop

rstCBG.Close
rstStatements.Close

Set rstStatements = Nothing
Set rstCBG = Nothing
Set dbs = Nothing

Debug.Print "Done"

End Function

1 个答案:

答案 0 :(得分:0)

您的主要问题是您正在尝试在querydef参数中传递条件表达式。因此,每个参数语句中的第一个OR必须是字符串的一部分,您可以将其作为VBA运算符放在外部。其次,您需要LIKE *子句来按字符串模式进行搜索。然后,您可能需要将表单值包装在单引号中。也许这是可能的,但是querydef参数通常采用单个值而非条件表达式。

有了这个说你绝对可以在VBA记录集中传递带有动态条件表达式的表单值(顺便说一下类似于其他记录集):

strSQL = "SELECT [Statement] FROM [St_Gen_Qry] WHERE" _
         & " (([Statement Category]='General Information')" _
         & " And ([Export Country] Like '*" & Forms!New_Shipment_Home_frm.[Export Country] & "*'" _
         & " Or [Export Country]='All')" _
         & " And ([Export State] Like '*" & Forms!New_Shipment_Home_frm.[Export State] & "*'" _
         & " Or [Export State]='All')" _
         & " And ([Import Country] Like '*" & Forms!New_Shipment_Home_frm.[Import Country] & "*'" _
         & " Or [Import Country]='All')" _
         & " And ([Import State] Like '*" & Forms!New_Shipment_Home_frm.[Import State] & "*'" _
         & " Or [Import State]='All')" _
         & " And ([Shipment Type] Like '*" & Forms!New_Shipment_Home_frm.[Shipment Type] & "'*" _
         & " Or [Shipment Type]='All')" _
         & " And ([Material Category] Like '*" & Forms!New_Shipment_Home_frm.[Material Category] & "*'" _
         & " Or [Material Category]='All')" _
         & " And ([Sub Category] Like '*" & Forms!New_Shipment_Home_frm.[Sub Category] & "*'" _
         & " Or [Sub Category]='All')" _
         & " And ([Transgenic/ Conventional] Like '*" & Forms!New_Shipment_Home_frm.RegCode & "*'" _
         & " Or [Transgenic/ Conventional] ='All')" _
         & " And ([Intended Use] Like '*" & Forms!New_Shipment_Home_frm.[Intended Use] & "*'" _
         & " Or [Intended Use]='All')" _
         & " And ([Permit Like '*" & Forms!New_Shipment_Home_frm.[Permit Required] & "*'" _
         & " Or Permit='All') And (Active='Yes'))"

Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)