使用IFF语句将SQL查询写入VBA,获取缺少的表达式错误

时间:2017-04-28 18:04:04

标签: excel vba excel-vba ms-access

我一直试图弄清楚这几天,没有运气。我正在尝试在VBA中编写SQL行命令。

我得到" ORA-00936:误导表达错误"

strSql4 = "SELECT FWLOTID, ENDDATETIME, ENDCODE, DRAW, IIF([ENDCODE]=""6"", ""MSNAG"",""0"") "    ' Or ENDCODE='10' Or ENDCODE='11' Or ENDCODE='12' Or ENDCODE='14'"

strSql3 = "FROM EVENTS.ODSWIND WHERE ENDDATETIME > to_date('" & Format(dtEndDate, "MM/dd/yyyy") & "','MM/DD/YYYY') "

        On Error Resume Next
        rsPRC.Close
        On Error GoTo ErrorHandler
        rsPRC.CursorLocation = adUseClient
        rsPRC.CursorType = adOpenStatic
        rsPRC.LockType = adLockOptimistic
        rsPRC.Open strSql4 & strSql3, cnPRC

2 个答案:

答案 0 :(得分:1)

检查[ENDCODE]的数据类型。如果是文本字段,请尝试:

strSql4 = "SELECT FWLOTID, ENDDATETIME, ENDCODE, DRAW, IIF([EVENTS].[ODSWIND].[ENDCODE]=""6"", ""MSNAG"",""0"") as IsItSix "  

如果[ENDCODE]是数字,请尝试:

strSql4 = "SELECT FWLOTID, ENDDATETIME, ENDCODE, DRAW, IIF([EVENTS].[ODSWIND].[ENDCODE]=6, ""MSNAG"",""0"") as IsItSix "  

另外,请告诉我们您要将此代码发送到哪个数据库。它是Access Jet数据库吗? Access Ace数据库?一个SQL Server数据库?您提供的所有额外信息可以让我们更好地为您提供帮助。

<强> 修改

另外...... IIF只能用于Access Sql查询。

您的错误看起来像是Oracle错误。

假设您要发送给Oracle,请尝试以下方法:

strSql4 = "SELECT FWLOTID, ENDDATETIME, ENDCODE, DRAW, CASE WHEN [ENDCODE]= '6' THEN 'MSNAG' ELSE '0' END as IsItSix "  

再次编辑

试试这个:(如果它不起作用,请告诉我确切的错误信息。)

strSql4 = "SELECT FWLOTID, ENDDATETIME, ENDCODE, DRAW, CASE ENDCODE WHEN '6' THEN 'MSNAG' ELSE '0' END AS ISITSIX "  

答案 1 :(得分:0)

尝试这样,看看是否有效:

strSql4 = "SELECT FWLOTID, ENDDATETIME, ENDCODE, DRAW, IIF(""ENDCODE""='6', 'MSNAG','0') "    ' Or ENDCODE='10' Or ENDCODE='11' Or ENDCODE='12' Or ENDCODE='14'"