从Access表导入数据到Excel,FROM子句中的语法错误

时间:2014-09-26 12:43:55

标签: sql excel vba ms-access

我正在运行此代码以将数据从Access导入Excel并获得运行时错误:

 "syntax error in FROM clause." 

Access中的表格有四列:DateTimeTankComments,我想导入Time和{{1} },基于电子表格中的日期。 我想按照TankTank的顺序订购这些列。

错误在于:

Time

代码段:

.Open "Select [Time], [Tank]  FROM [UnitOneRouting] WHERE [Date] = " & RpDate & " ORDER BY Tank, Time", cn, adOpenStatic, adLockOptimistic, adCmdTable

3 个答案:

答案 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”上,它会告诉你存储在变量中的内容