我是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.
答案 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()