前后添加空格,则第二个解决方案应该有效。
试图读取一个表,这是我的WHERE子句
"((DISPO EQ 'E10' OR DISPO EQ 'EAA') AND (GLTRP >= '20150701' AND GLTRP <= '20150730'))"
我也试过
"(DISPO EQ 'E10' OR DISPO EQ 'EAA') AND (GLTRP >= '20150701' AND GLTRP <= '20150730')"
和
"(DISPO EQ 'E10' OR DISPO EQ 'EAA') AND GLTRP >= '20150701' AND GLTRP <= '20150730'"
我已经使用=,EQ,>=, GL等,等等,我一直得到相同的错误
An exception of type 'SAP.Middleware.Connector.RfcAbapRuntimeException' occurred in sapnco.dll but was not handled in user code
Additional information: A comparison value is missing from the dynamic WHERE condition.
现在,如果我分开WHERE子句并分别尝试,那么一切都可以正常工作。
DISPO EQ 'E10' OR DISPO EQ 'EAA' // This works
和
GLTRP >= '20150701' AND GLTRP <= '20150730' // This also works.
也适用于
GLTRP BETWEEN '20150701' AND '20150730'
那么我原来的WHERE子句有什么问题呢?
UPDATE:代码是如何执行的
IRfcFunction BapiGetOrderStatus = SapRap.CreateFunction("BBP_RFC_READ_TABLE");
BapiGetOrder.SetValue("QUERY_TABLE", "AFKO")
BapiGetOrder.SetValue("DELIMITER", ";");
BapiGetOrder.SetValue("ROWCOUNT", "30");
// Parameter table FIELDS contains the columns
IRfcTable fields = BapiGetOrders.GetTable("FIELDS");
fields.Append();
fields.SetValue("FIELDNAME", "AUFNR");
fields.Append();
fields.SetValue("FIELDNAME", "GLTRP");
fields.Append();
fields.SetValue("FIELDNAME", "GSTRP");
fields.Append();
fields.SetValue("FIELDNAME", "GAMNG");
felds.Append();
fields.SetValue("FIELDNAME", "STLBEZ");
fields.Append();
fields.SetValue("FIELDNAME", "DISPO");
fields.Append();
fields.SetValue("FIELDNAME", "APRIO");
fields.Append();
fields.SetValue("FIELDNAME", "IGMNG");
fields.Append();
fields.SetValue("FIELDNAME", "IASMG");
IRfcTable optsTable = BapiGetOrder.GetTable("OPTIONS");
optsTable.Append();
optsTable.SetValue("TEXT", " ( ( DISPO EQ 'E10' OR DISPO EQ 'EAA' ) AND ( GLTRP >= '20150701' AND GLTRP <= '20150730' ) ) ");
BapiGetOrders.Invoke(SapRfcDestination); // <------- EXCEPTION HERE
IRfcTable ItemsTable = BapiGetOrders.GetTable("DATA");
您可能需要在圆括号内使用空格:
"( ( DISPO EQ 'E10' OR DISPO EQ 'EAA' ) AND ( GLTRP >= '20150701' AND GLTRP <= '20150730' ) )"
^ ^ ^ ^ ^ ^
您的最后一条评论表明该消息包含对动态条件的引用。动态WHERE条件的形式为
... WHERE (variable).
,变量是包含条件的字符串。
既然你没有这样的动态条件,我想,和我们一样,你的条件下空间有问题。如果您在(.
试着把一个换行到你的SQL,我认为你的SQL是修剪每次执行它。也许是因为它太长了
语句太长。任何超过70个字符的WHERE文本将无法正常执行。分割where子句并向表中追加两条记录