我一直试图弄清楚这几天,没有运气。我正在尝试在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
答案 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'"