【发布时间】:2020-05-05 10:43:10
【问题描述】:
我给出了一段代码,我试图检查文件是否已经上传到表中。上传文件时,上传文件的名称将放入名为“Name_of_report”的列中。我正在尝试运行以下代码并检查文件是否已存在于包含所有数据的“Table1”中。
但是,当我运行以下代码时,出现错误:运行时错误“3075”:查询表达式“Name_of_report”= File1 中的语法错误(缺少运算符)。 xlsx(这是分配给 TableName 变量的值)
我知道这是一个简单的修复,但我对 VBA 很陌生,并且尝试了各种更改,但看不到它可以正常工作。
我们将不胜感激。
Sub Check_TableExists(TableName As Variant)
If CurrentDb.OpenRecordset("SELECT count(Name_of_Report) FROM Table1 WHERE Name_of_Report =" & TableName & ";").Fields(0) > 0 Then
MsgBox ("Data already exists in table")
End If
【问题讨论】:
-
不要做这些检查。它们是非原子的,换句话说,它们由多个步骤组成,并且当您尝试稍后插入记录步骤。相反... 信任数据库以防止重复。 在
Name_of_Report列上创建唯一键。尝试使用常规INSERT语句插入新记录。如果此操作因“重复键”错误而失败,则数据已经存在。捕获错误并向用户显示消息。 (使用On Error Resume Next和If Err.Number = ... Then) -
由于报告名称肯定是一个字符串,您应该检查如何查询字符串。将 sql 语句存储在变量中并使用
Debug.Print将其输出,然后将代码粘贴到新查询(sql-view)。这揭示了许多错误的 sql 语句。 -
不要忘记,在声明工作之后尝试存储一个包含您的文字分隔符的名称,然后阅读Bobby Tables!