我正在运行此代码以将数据从Access导入Excel并获得运行时错误:
"syntax error in FROM clause."
Access中的表格有四列:Date
,Time
,Tank
,Comments
,我想导入Time
和{{1} },基于电子表格中的日期。
我想按照Tank
,Tank
的顺序订购这些列。
错误在于:
Time
代码段:
.Open "Select [Time], [Tank] FROM [UnitOneRouting] WHERE [Date] = " & RpDate & " ORDER BY Tank, Time", cn, adOpenStatic, adLockOptimistic, adCmdTable
答案 0 :(得分:1)
从Access接受的SELECT
语句开始。使用字符串变量来保存语句。然后,您可以Debug.Print
变量并检查立即窗口中的语句文本。对于疑难解答,您还可以从那里复制语句文本并将其粘贴到新Access查询的SQL视图中。
这是一个代码示例,我在其中对RpDate
的值进行了硬编码...只是为了保持简单。
Dim RpDate
Dim strSelect As String
RpDate = #9/26/2014#
strSelect = "SELECT u.Time, u.Tank" & vbCrLf & _
"FROM UnitOneRouting AS u" & vbCrLf & _
"WHERE u.Date = " & Format(RpDate, "\#yyyy-m-d\#") & vbCrLf & _
"ORDER BY u.Tank, u.Time;"
Debug.Print strSelect
这是该代码生成的SELECT
语句......
SELECT u.Time, u.Tank
FROM UnitOneRouting AS u
WHERE u.Date = #2014-9-26#
ORDER BY u.Tank, u.Time;
获得有效的Access SQL SELECT
语句后,您需要修复记录集.Open
调用,以便为其提供可接受的选项值。 adCmdTable
导致错误,因为您的记录集的数据源是SELECT
语句,而不是表。
' next line throws error -2147217900, "Syntax error in FROM clause."
.Open strSelect, cn, adOpenStatic, adLockOptimistic, adCmdTable
'either of the next 2 lines works ...
'.Open strSelect, cn, adOpenStatic, adLockOptimistic
.Open strSelect, cn, adOpenStatic, adLockOptimistic, adCmdText
因此,我认为您正在处理错误消息具有误导性的情况。 “FROM子句中的语法错误”表明问题出在SELECT
语句中。但是,一旦您拥有有效的SELECT
,由于adCmdTable
,您仍会获得相同的错误文本。不要将adCmdTable
用于SELECT
。
答案 1 :(得分:0)
您有SQL请求的示例吗?
我认为日期格式存在问题......
你应该尝试用这个字符RpDate
包装你的日期(#
),如下所示:
.Open "Select [Time], [Tank] FROM [UnitOneRouting] WHERE [Date] = #" & RpDate & "# ORDER BY Tank, Time", cn, adOpenStatic, adLockOptimistic, adCmdTable
答案 2 :(得分:0)
正如我的评论所提到的,我对你的代码感到有些困惑。您正在尝试根据日期选择记录,但是当您调暗RbDate变量时,您将其设置为范围?这不仅不是Access表的有效属性,即使您无法将日期与范围进行比较。如果你在Excel中,你可以
Dim RbDate as Date
RbDate = ActiveWorksheet.Range(“B2”)。值
但是,由于你不在excel,这不适用。如果它会不断变化,我建议使用日期参数,否则只需按照以下方式将日期硬编码到代码中
Dim RbDate as Date
RbDate =#2017/11/23#
然后,您可以将其用作SQL查询字符串中的值,因为当前RbDate可能为空或者与[Date]无法比较。您可以尝试这一点来确保,通过“Stepping”运行您的代码,按F8,每次执行它将执行一行代码,在您通过之后(至少一行代码)
设置RpDate =范围(“B2”)。单元格
将你的光标悬停在“RpDate”上,它会告诉你存储在变量中的内容