Sql 名称的括号无效

Sql 名称的括号无效,sql,ms-access,Sql,Ms Access,我收到一个错误,名称[qryTemp.IEnduseID]的括号无效 strSQL=选择tbl_Item_Enduse.IEnduseID,tbl_Item_Enduse.IEnduseDesc,IIf[qryTemp.IEnduseID]>0,-1,0作为选择和_ 从tbl_Item_Enduse LEFT JOIN选择tbl_ItemsEU.EUid FROM tbl_ItemsEU&_ 其中tbl_ItemsEU.ItemID=&NzMe.ItemID,0&AS qryTemp&_ 在tb

我收到一个错误,名称[qryTemp.IEnduseID]的括号无效

strSQL=选择tbl_Item_Enduse.IEnduseID,tbl_Item_Enduse.IEnduseDesc,IIf[qryTemp.IEnduseID]>0,-1,0作为选择和_ 从tbl_Item_Enduse LEFT JOIN选择tbl_ItemsEU.EUid FROM tbl_ItemsEU&_ 其中tbl_ItemsEU.ItemID=&NzMe.ItemID,0&AS qryTemp&_ 在tbl_项上_Enduse.IEnduseID=qryTemp.EUid&_ 按tbl_Item_Enduse.IEnduseDesc订购; 如果我去掉括号-我得到的参数太少


请帮助。

您混淆了字段名称

试着猜测一下:

strSQL=选择tbl_Item_Enduse.IEnduseID,tbl_Item_Enduse.IEnduseDesc,IIfqryTemp.IEnduseID>0,-1,0作为选择和_ 从tbl_Item_Enduse LEFT JOIN选择tbl_ItemsEU.EUid作为IEnduseID从tbl_ItemsEU&_ 其中tbl_ItemsEU.ItemID=&NzMe.ItemID,0&AS qryTemp&_ 在tbl_项上_Enduse.IEnduseID=qryTemp.IEnduseID&_ 按tbl_Item_Enduse.IEnduseDesc订购;

从您的联接表达式中,考虑使用EUID而不是IdUnSueID,因为在子查询中前者被引用为QDyTyp。否则,引用后一列将导致未知参数。同时考虑更短的表别名用于紧凑可读性。

strSQL = "SELECT t.IEnduseID, t.IEnduseDesc, " & _
         "       IIf([q.EUid]>0,-1,0) AS Sel " & _ 
         "FROM tbl_Item_Enduse AS t" & _
         "LEFT JOIN " & _
         " (SELECT sub.EUid " & _
         "  FROM tbl_ItemsEU sub " & _ 
         "  WHERE sub.ItemID=" & Nz(Me.ItemID, 0) & ") AS q " & _ 
         "ON t.IEnduseID = q.EUid " & _ 
         "ORDER BY t.IEnduseDesc;"

顺便说一下,不确定您是如何从SQL字符串中使用上述动态查询的,但请考虑一个保存的查询,它将更有效地使用Access作为引擎,以保存最佳执行计划。此外,保存的查询可以直接使用打开的表单控件。这样做还可以避免混乱的VBA连接

选择t.IEnduseID、t.IEnduseDesc、, IIF[q.EUid]>0,-1,0作为选择 来自tbl\u项目\u最终用途为t 左连接 选择sub.EUid 来自tbl_ItemsEU sub 其中sub.ItemID=NzForms!肌节型!ItemID,0作为q 关于t.IEnduseID=q.EUid t.IEnduseDesc的命令; 在VBA中,带有GUI参数的存储查询可以以多种方式使用,包括GUI操作,即表单、报告

DoCmd.OpenQuery "mySavedQuery"

Me.Form.RecordSource = "mySavedQuery"
Me.Form.Requery

Me.myComboOrListBox.RowSource = "" 
Me.myComboOrListBox.RowSource = "mySavedQuery"
Me.myComboOrListBox.Requery

你有两个I在你的If声明中。这就是问题所在吗?如果[qryTemp.IEnduseID]>0,-1,0请从[qryTemp.IEnduseID]中删除方括号。@Hoppo:is访问语法。请尝试[qryTemp].[IEnduseID]。每个对象都有自己的一组引号。表和列。否则它将查找名为qryTemp的列。IEnduseID@forpas:事实上,当使用方括号[qryTemp].[IEnduseID]或不使用方括号时,应该读取:qryTemp.IEnduseID。