0

试图读取一个表,这是我的 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 子句有什么问题?

更新:代码是如何执行的。

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");
4

4 回答 4

1

您可能需要括号内的空格:

"( ( DISPO EQ 'E10' OR DISPO EQ 'EAA' ) AND ( GLTRP >= '20150701' AND GLTRP <= '20150730' ) )"
  ^ ^                                ^       ^                                           ^ ^
于 2015-07-15T12:05:35.057 回答
1

您的最后一条评论表明该消息继续引用动态条件。动态 WHERE 条件的形式为

... WHERE (variable).

变量是包含条件的字符串。

由于您没有这样的动态条件,我认为,作为 vwegert,您的条件存在空间问题。如果您在每个 ) 和 (.

于 2015-07-15T20:56:38.703 回答
0

声明太长了。任何超过 70 个字符的 WHERE 文本都不会正确执行。分解您的 where 子句并将两条记录附加到表中。

于 2020-09-21T11:47:42.527 回答
0

尝试在您的 SQL 中添加换行符,我认为您的 SQL 每次执行都会被修剪。可能是因为太长了。

于 2019-04-07T17:48:55.113 回答