【问题标题】:Run-time error '3075' VBA: Check if file already exists in table运行时错误“3075”VBA:检查表中是否已存在文件
【发布时间】: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 NextIf Err.Number = ... Then
  • 由于报告名称肯定是一个字符串,您应该检查如何查询字符串。将 sql 语句存储在变量中并使用Debug.Print 将其输出,然后将代码粘贴到新查询(sql-view)。这揭示了许多错误的 sql 语句。
  • 不要忘记,在声明工作之后尝试存储一个包含您的文字分隔符的名称,然后阅读Bobby Tables

标签: vba ms-access


【解决方案1】:

文本类型字段的参数需要撇号分隔符。

If CurrentDb.OpenRecordset("SELECT count(Name_of_Report) FROM Table1 WHERE Name_of_Report ='" & TableName & "';").Fields(0) > 0 Then

但是,域聚合函数可以完成而不是打开记录集。

If DCount("*", "Table1", "Name_of_Report='" & TableName & "'") > 0 Then

【讨论】:

    猜你喜欢
    • 2012-12-13
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多