我正在尝试匹配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子句中的语法错误。
请指导我可能做错了什么。
提前致谢。
使用DoCmd.SetWarnings
是一个麻烦的方法。如果sql中存在错误并且您的代码退出而未将警告设置为true,该怎么办?发生了各种各样奇怪的事情。相反,使用更简单,更简单
CurrentDb.Execute "DELETE * FROM [" & strTable & "] WHERE SPEC_ID = 'Specification ID'"
您仍然需要检查strTable名称中没有[
或]
(否则包围将无效)您需要删除它们或将其转义(取决于实际表的命名方式) )。
这样做
Docmd.SetWarnings False
DoCmd.RunSQL ("DELETE * FROM [" & strTable & "] WHERE SPEC_ID = 'Specification ID'")
Docmd.SetWarnings True