【发布时间】:2018-09-05 23:36:28
【问题描述】:
我正在尝试将放置在文件夹中的 excel 文件与 access 数据库中存在的表(与我的 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 子句中的语法错误。
请指导我可能做错了什么。
提前致谢。
【问题讨论】:
-
strTable 的值是多少?
-
您的数据库表名中是否包含空格?如果是,则在 [ strTable ](方括号)中添加您的数据库名称。从哪里获得规范 ID?我在这里找不到任何整数变量..
-
@VincentG : strTable 与 strFile 相同,但扩展名为 .xlsx。
-
不带括号的表名可能由于空格而无效的原因有很多。只需将它括起来,就像 Tarun P 说的那样,应该避免大多数(但不是全部)可能的无效表名。
-
试试这个
DoCmd.RunSQL ("DELETE * FROM [" & strTable & "] WHERE SPEC_ID = 'Specification ID'")