尝试编写与排序浏览器相关的查询

时间:2019-03-17 08:00:52

标签: openedge progress-4gl

我是Progress和程序设计的初学者,如果能获得一些帮助,将非常有用。

尝试编写连接到浏览器的查询。在我的窗口中还有一个收音机(用于按名称或年龄对浏览器进行排序) 和填入内容(如果在其中填入任何内容,然后按“确定”,则只有帖子 在浏览器中将显示姓氏以任何文字开头的地方。

收音机具有一个默认值,如果忽略该值,将再次打开浏览器。

我试图像下面这样编写查询,并且按无线电设置进行排序,但不能进行填充(显示错误消息,表明它不理解查询):

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.  

2 个答案:

答案 0 :(得分:2)

您需要在字符串位的前后放置空格,将姓氏括在引号中,并对rsSort位使用screen-value。只是为了帮助您理解第一部分,向查询字符串发送消息。您会看到以下内容: 对于member.surname开始的每个成员无锁,Ellenby member.chosenfield

什么时候应该 对于每个成员,member.surname由member.chosenfield以“ Ellen”开头的无锁

为了确保这一点,我要告知rsSort的值 因此,我建议您更改为

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

就像我说的,将整个内容发送消息,将其复制并尝试直接在“进度”窗口中编写,我发现它以这种方式调试这些动态查询对我有很大帮助。

答案 1 :(得分:1)

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