首页 > 解决方案 > 我不能在访问中使用查询定义对象作为变量

问题描述

注意:UPDATED:::: 我想创建一个名为 comp_val 的查询并将其与一个名为 FILTERS TABLE 的表连接起来。但是我不能使用左连接,除非我将 comp_val SQL 字符串保存为查询或表。comp_val 是在运行时生成的变量。我正在尝试创建一个名为 que_def 的查询定义,并为其分配一个名为“comp_val”的有效 sql 字符串。然后使用 que_def 创建一个带有名为“FILTERS”表的表的左连接查询。但是访问给了我一个类型不匹配错误,说我不能使用 que_def 作为变量来形成新的 sql 字符串这里是代码

Dim que_def  As QueryDef
Dim all_info As String

Set que_def = db.CreateQueryDef(comp_val) 'new_query is a new sql query whose sql string can be set to comp_val
    que_def.SQL = comp_val 'comp_val is a valid sql string
    
    'after setting the que_def sql value to comp_val, it is supposed to form a new sql string
    p1 = "SELECT " & que_def & ".Company_Name, " & que_def & ".Site_Name, " & que_def & ".Site_Location, " & que_def & ".Site_Contact, Filters_Table.Gen_Combination, " & que_def & ".Capacity(KVA), " & que_def & ".Alt_S/No, " & que_def & ".Engine_S/No, " & que_def & ".Filter_Type, " & que_def & ".Generator_Type,"
    p2 = " Filters_Table.Generator_Name, Filters_Table.Capacity, Filters_Table.Fuel_Filter1_ID, Filters_Table.Fuel_Filter1_Qty, Filters_Table.Fuel_Filter2_ID, Filters_Table.Fuel_Filter2_Qty, Filters_Table.Oil_Filter1_ID, Filters_Table.Oil_Filter1_Qty, Filters_Table.Oil_Filter2_ID, Filters_Table.Oil_Filter2_Qty, Filters_Table.Water_Sep_ID, Filters_Table.Water_Sep_Qty, Filters_Table.Air_Filter_ID, Filters_Table.Air_Filter_Qty, Filters_Table.Engine_Oil1_ID, Filters_Table.Engine_Oil1_Qty, Filters_Table.CF_ID, Filters_Table.CF_Qty"
    p3 = " FROM " & que_def & " LEFT JOIN Filters_Table ON " & que_def & ".Filter_Type = Filters_Table.Gen_Combination;"
    all_info = p1 + p2 + p3
    MsgBox ("IT IS DONE GOING THROUGH IT ALL")

但我不能使用“que_def”变量。我得到错误,类型不匹配。

注意:comp_Val 是一个选择查询,我试图将它加入到一个名为 filter's table 的表中,并且它应该带来一个名为 all_info 的新 sql 字符串。

在此处输入图像描述

标签: sqlvbams-accessms-access-2010ms-access-2016

解决方案


querydef 是一个对象,而不是字符串。您需要为其命名以在另一个查询中使用它。

Const qdName = "MyQuery"
Dim que_def  As QueryDef

Set que_def = db.CreateQueryDef(Name:=qdName, SQLText:=comp_val) 

' You did this already when creating the querydef, no need to do it again
' que_def.SQL = comp_val 

'after setting the que_def sql value to comp_val, it is supposed to form a new sql string
p1 = "SELECT " & qdName & ".Company_Name, "
' etc.

推荐阅读