简体   繁体   English

访问运行时错误2465。找不到表达式中引用的字段“ 1”

[英]Access Run-Time error 2465. Can't find the field '1' referred to in your expression

I need help with this code. 我需要有关此代码的帮助。

Option Compare Database
Option Explicit


Private Sub BTNSEARCHOnetoOne_Click()
    Dim SQL As String

    SQL = "SELECT [00_SheetList-Revit-UNION].PACKAGE, [00_SheetList-Revit-UNION].DRAWING, [00_SheetList-Revit-UNION].DISCIPLINE, Hillsboro_OR_xlsx.FileName_Hillsboro_OR, Hillsboro_OR_xlsx.FilePath_Hillsboro_OR FROM Hillsboro_OR_xlsx, WHERE(([00_SheetList-Revit-UNION].PACKAGE) Like '" & Me.TXTKeywordsPackage & "') AND ((Hillsboro_OR_xlsx.FileName_Hillsboro_OR) Like ('*" & ([00_SheetList-Revit-UNION].DRAWING) & "*')"

    Me.SubONEtoONEInsideJoin.Form.RecordSource = SQL
    Me.SubONEtoONEInsideJoin.Form.Requery
    Me.SubONEtoONENullJoin.Form.Requery

End Sub

Private Sub Detail_Click()

End Sub

I narrowed it down to this part of the code. 我将其范围缩小到了代码的这一部分。

"...((Hillsboro_OR_xlsx.FileName_Hillsboro_OR) Like ('*" & ([00_SheetList-Revit-UNION].DRAWING) & "*')"

As I can take this part out and it works. 因为我可以将这一部分讲出来,并且可以正常工作。 Is this just syntax? 这只是语法吗?

It looks like that you had something wrong here 看来您这里有问题

you have written 你写

Like '" & Me.TXTKeywordsPackage & "'

but it has to be like this 但必须像这样

Like '*" & Me.TXTKeywordsPackage & "*'

you had this part wrong 你这部分错了

check this below part 在下面检查一下

Like ('*" & ([00_SheetList-Revit-UNION].DRAWING) & "*')

Make sure that you are getting the value from textbox. 确保从文本框中获取值。 It looks like you are calling table column. 看起来您正在调用表列。

Carefully count your parenthesis. 仔细计算您的括号。

There should be an additional ) at the very end. 最后应该有一个额外的)

Currently, your SQL has a number of syntax issues: 当前,您的SQL存在许多语法问题:

  1. Comma before WHERE clause; WHERE子句前的逗号;
  2. Unclosed parentheses in last WHERE condition; 最后一个WHERE条件中的未括弧的括号;
  3. Unknown alias ( [00_SheetList-Revit-UNION] ) not referenced in FROM or JOIN clauses. FROMJOIN子句中未引用未知别名( [00_SheetList-Revit-UNION] )。 Possibly you meant to cross join this source with Hillsboro_OR_xlsx . 可能您想与Hillsboro_OR_xlsx交叉加入此源。

See issues with current code with line breaks for illustration: 请参见带有换行符的当前代码问题以进行说明:

SQL = "SELECT [00_SheetList-Revit-UNION].PACKAGE," _
       & "    [00_SheetList-Revit-UNION].DRAWING," _
       & "    [00_SheetList-Revit-UNION].DISCIPLINE," _
       & "    Hillsboro_OR_xlsx.FileName_Hillsboro_OR, " _
       & "    Hillsboro_OR_xlsx.FilePath_Hillsboro_OR " _
       & " FROM Hillsboro_OR_xlsx, " _
       & " WHERE(([00_SheetList-Revit-UNION].PACKAGE) " _
       & "        Like '" & Me.TXTKeywordsPackage & "') " _
       & "   AND " _
       & "      ((Hillsboro_OR_xlsx.FileName_Hillsboro_OR) " _
       & "        Like ('*" & ([00_SheetList-Revit-UNION].DRAWING) & "*')"

These issues can be mitigated with parameterized queries (an industry best practice when writing SQL in application code) which is supported in MS Access using QueryDef Parameters . 可以通过使用QueryDef Parameters的 MS Access支持的参数化查询(在应用程序代码中编写SQL时的行业最佳实践)来缓解这些问题。 Below are a few advantages and further below adjustment to your setup. 以下是一些优点,下面进一步调整您的设置。

  • Saving a stored query instead of a VBA string query allows it is to be optimized by engine and the Access GUI will not allow query to be saved with syntax issues; 保存存储的查询而不是VBA字符串查询允许通过引擎对其进行优化,并且Access GUI将不允许使用语法问题来保存查询。
  • Abstract data from code, specifically VBA variables from SQL statement; 代码中的抽象数据,特别是SQL语句中的VBA变量;
  • Readability and maintainability is enhanced. 可读性和可维护性得到增强。

SQL (with no VBA) SQL (无VBA)

Save below as a stored Access query, using parameters and table aliases. 使用参数和表别名将以下内容另存为存储的Access查询。 Also, [00_SheetList-Revit-UNION] is cross joined (comma-separated in FROM clause) as assumed above. 同样, [00_SheetList-Revit-UNION][00_SheetList-Revit-UNION]被交叉连接(在FROM子句中以逗号分隔)。

PARAMETERS [PackageParam] Text;
SELECT o.PACKAGE, o.DRAWING, o.DISCIPLINE, 
       h.FileName_Hillsboro_OR, h.FilePath_Hillsboro_OR 
FROM Hillsboro_OR_xlsx h, [00_SheetList-Revit-UNION] o    
WHERE ((o.PACKAGE) Like [PackageParam]) 
  AND ((h.FileName_Hillsboro_OR) Like '*' & o.DRAWING & '*');

VBA VBA

Private Sub BTNSEARCHOnetoOne_Click()
    Dim qDef As QueryDef
    Dim rst As Recordset

    ' OPEN SAVED QUERY
    Set qDef = CurrentDb.QueryDefs("mySavedQuery")
    ' BIND PARAMETERS
    qDef![PackageParam] = "*" & Me.TXTKeywordsPackage & "*"

    ' BUILD RECORDSET FROM QUERYDEF AND SET TO SUBFORM
    Set rst = qDef.OpenRecordset()        
    Me.SubONEtoONEInsideJoin.Form.Recordset = rst
    Me.SubONEtoONENullJoin.Form.Requery

    Set qDef = Nothing
End Sub

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM