从access vba中的for循环中的每个表中动态删除一行

问题描述 投票:0回答:2

我正在尝试匹配excel文件,这些文件放在一个文件夹中,该文件夹中存在访问数据库中的表(与我的excel文件同名)并尝试导入excel中的数据以进行访问。

Sub import()

Dim blnHasFieldNames As Boolean
Dim strWorksheet As String, strTable As String
Dim strPath As String, strPathFile As String

blnHasFieldNames = True


strPath = "D:\PersonalData\working_table\"

strWorksheet = "Sheet1"

' Import the data from each workbook file in the folder
strFile = Dir(strPath & "*.xlsx")
Do While Len(strFile) > 0
      strPathFile = strPath & strFile
      strTable = Left(strFile, InStrRev(strFile, ".xlsx") - 1)

      DoCmd.TransferSpreadsheet acImport, _
            acSpreadsheetTypeExcel9, strTable, strPathFile, _
            blnHasFieldNames, strWorksheet & "$"

      DoCmd.RunSQL ("DELETE * FROM " & strTable & " WHERE SPEC_ID = 'Specification ID'")



      strFile = Dir()
Loop



End Sub

我成功地将数据存入我的访问数据库表,但我的要求是删除所有这些表中SPEC_ID = 'Specification ID'的行。我收到错误:

DoCmd.RunSQL ("DELETE * FROM " & strTable & " WHERE SPEC_ID = 'Specification ID'")

其中说明:

运行时错误:'3131'FROM子句中的语法错误。

请指导我可能做错了什么。

提前致谢。

vba ms-access access-vba
2个回答
2
投票

使用DoCmd.SetWarnings是一个麻烦的方法。如果sql中存在错误并且您的代码退出而未将警告设置为true,该怎么办?发生了各种各样奇怪的事情。相反,使用更简单,更简单

CurrentDb.Execute "DELETE * FROM [" & strTable & "] WHERE SPEC_ID = 'Specification ID'"

您仍然需要检查strTable名称中没有[](否则包围将无效)您需要删除它们或将其转义(取决于实际表的命名方式) )。


0
投票

这样做

Docmd.SetWarnings False

DoCmd.RunSQL ("DELETE * FROM [" & strTable & "] WHERE SPEC_ID = 'Specification ID'")

Docmd.SetWarnings True
© www.soinside.com 2019 - 2024. All rights reserved.