我在Oracle中编写了一些基本的SQL,它按预期运行。它选择客户,他们的ID以及他们可以提供的“服务”。
但是,当我添加从VBA代码传递的变量时,会出现错误消息ORA-00907: Missing Right Parenthesis
。这是由于代码中的OR
。
AND C.CURRENCY LIKE :cmbSelectAccountCcy
AND (S.SERVICEID LIKE :cmbSelectServiceType OR S.SERVICEID LIKE :cmbSelectServiceType2)
AND .... etc
如果我删除它,它按预期运行。 OR是支票的一部分,包括(最后)
HAVING COUNT(S.SERVICEID) > 2
允许检查2个值,并且仅当存在2个(或更多个)时才显示客户端。
Excel中的组合框将服务ID作为下拉框中的设置值或%
字符传递。我假设在某些情况下永远不会达到右括号。
我可以使用硬编码值运行SQL查询,但不通过VBA传递相同的变量的原因是什么?我在VBA中有一个Debug.Print()
语句,它显示了我希望看到的所有值。
更新
将名称cmbSelectServiceType2
更改为cmbServiceTypeTwo
似乎已解决了问题,但截至目前为止,我无法弄清楚原因。任何答案仍然赞赏!我能看到的唯一因素是第一个是21个字符,第二个是< 20个字符。列数据类型是表中的VARCHAR2。
Tangent:OR语句现在返回Service1或Service1和Service2或Service2,即完全OR语句。上面的HAVING子句试图强制只允许BOTH。
更新2
将cmbSelectServiceType2中的“2”更改为字母“2”不起作用。似乎20个字符是一些任意限制。
答案 0 :(得分:0)
根据:
Getting around the Max String size in a vba function?
vba函数无法处理超过255个字符的字符串,这可能会导致问题,特别是当你剪切它的字符串长度时。