我试图将放置在文件夹中的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子句中的语法错误。
请指导我可能做错了什么。
谢谢。
答案 0 :(得分:2)
使用DoCmd.SetWarnings
是麻烦的秘诀。如果sql中出现错误,并且您的代码退出而未将警告设置回true,该怎么办?各种各样奇怪的事情发生。而是使用更简单,一样简单的
CurrentDb.Execute "DELETE * FROM [" & strTable & "] WHERE SPEC_ID = 'Specification ID'"
您仍然需要检查strTable的名称中没有[
和]
(否则,包围将无效),并且您需要删除它们或对其进行转义(取决于您的实际表的命名方式)。
答案 1 :(得分:0)
这样做
Docmd.SetWarnings False
DoCmd.RunSQL ("DELETE * FROM [" & strTable & "] WHERE SPEC_ID = 'Specification ID'")
Docmd.SetWarnings True