我不能使用查询 def 对象作为访问中的变量

问题描述

NB: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 字符串。

enter image description here

解决方法

一个 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.