尝试编写连接到排序浏览器的查询

问题描述 投票:1回答:2

我是进步和编程的初学者,非常感谢一些帮助。

尝试编写连接到浏览器的查询。在我的窗口中还有一个无线电台(对浏览器进行排序,例如按名称或年龄排序)和填充(如果有任何内容写在那里并且“ok”被推送,那么只有姓氏以所写的内容开头的帖子是显示在浏览器中。

无线电设备具有默认值,在值更改时,浏览器再次打开。

我试图编写我的查询,如下所示,无线电网的排序工作,但不是fillin(显示它不理解查询的错误消息):

DEFINE INPUT PARAMETER pfiSurname AS CHARACTER NO-UNDO.
DEFINE VARIABLE cQuery AS CHARACTER NO-UNDO.
DEFINE VARIABLE hQueryHandle AS HANDLE    NO-UNDO.
&SCOPED-DEFINE BROWSER brMembers

DO WITH FRAME  {&FRAME-NAME}:
    ASSIGN rsSort.

  IF fiSurname = '' THEN 
    ASSIGN cQuery = 'FOR EACH Member NO-LOCK by member.' + rsSort.
  ELSE 
    ASSIGN cQuery = 'FOR EACH member NO-LOCK WHERE member.surname BEGINS' 
     + fiSurname + 'BY member.' + rsSort. 

  hQueryHandle = {&BROWSER}:QUERY.
  hQueryHandle:QUERY-PREPARE(cQuery).
  hQueryHandle:QUERY-OPEN().

END.
END PROCEDURE.  
openedge progress-4gl
2个回答
2
投票

您需要在字符串位之前和之后留出空格,将姓氏括在引号中,并将屏幕值用于rsSort位。只是为了帮助您理解第一部分,请向查询字符串发送消息。你会看到类似这样的事情:对于每个成员no-lock,member.surname开始于Ellenby member.chosenfield

当它应该是每个成员no-lock其中member.surname由member.chosenfield开始“Ellen”

只是为了确保,我会告诉rsSort的价值所以我建议你改为

 ASSIGN cQuery = 'FOR EACH member NO-LOCK WHERE member.surname BEGINS ' 
 + Quoter(fiSurname) + ' BY member.' + rsSort:screen-value.

就像我说的那样,给整个事情发消息,复制它并尝试直接在Progress窗口中编写它,我觉得以这种方式调试这些动态查询对我有很大的帮助。


1
投票

在BEGINS之后和引号内的BY之前,在fiSurname和额外的SPACE周围添加QUOTER()

© www.soinside.com 2019 - 2024. All rights reserved.