使用.net Connector for SAP的WHERE子句的问题



试图读取一个表,这是我的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子句并向表中追加两条记录

相关内容

  • 没有找到相关文章

最新更新