【问题标题】:Trying to write query connected to sort browser尝试编写连接到排序浏览器的查询
【发布时间】:2019-03-17 08:00:52
【问题描述】:

我是 Progress 和编程的初学者,希望能得到一些帮助。

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

radiset 有一个默认值,在更改值时,浏览器会再次打开。

我尝试编写如下查询,并且通过无线电集进行排序有效,但不是填充(显示它不理解查询的错误消息):

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.  

【问题讨论】:

  • 显示错误消息的实际文本可能会有所帮助。我最好的猜测是 rsSort 没有价值,因此,cQuery 会导致无效的 QUERY-PREPARE()。可能是因为“ASSIGN rsSort”。应该是“分配输入 rsSort”。如果此代码是用户界面触发器的主体。但很难说,因为这只是真实代码的一小部分,实际错误未知。

标签: openedge progress-4gl


【解决方案1】:

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

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

为了确保,我会发送消息 rsSort 的值 所以我建议你改成

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

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

【讨论】:

  • 就是这样,引号和空格。在消息中显示查询的好技巧!谢谢!
  • 如果答案解决了您的问题,您应该将其标记为“正确”。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-05
    • 2010-11-13
    • 2023-04-07
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    相关资源
    最近更新 更多