出现错误 - 短语或选项与之前的短语或选项冲突。 【277】- 进步 4GL
Getting Error - Phrase or option conflicts with previous phrase or option. (277) - Progress 4GL
我正在使用以下动态查询从 table 中获取数据。但我收到编译错误 “短语或选项与之前的短语或选项冲突。(277)”。不确定我在哪里犯了错误以及如何解决它。请帮助我修改以下示例查询。
define variable hbuffer as handle no-undo.
define variable hQuery as handle no-undo.
define variable cQuery as character no-undo.
define temp-table tt_table no-undo
field tt_week1 as character label "Week1"
.
create buffer hbuffer for table "<table>".
cQuery = "for each <table> no-lock ".
create query hQuery.
hQuery:set-buffers(hbuffer).
cQuery = cQuery + ":".
hQuery:query-prepare(cQuery).
hQuery:query-open().
if hQuery:query-open() then
do:
do while hQuery:get-next():
create tt_table.
assign tt_week1 = hbuffer::qty[1] /*field name qty data type is deci-10[52].*/
.
end.
end.
for each tt_table :
disp tt_week1.
end.
编译错误应该会告诉您错误来自哪一行。
在代码片段中,您没有在任何地方定义 tt_week
字段。
一般来说,如果要赋值一个(temp)table字段,应该使用table.field表示法; AVM 通常可以弄清楚你的意图,但不具体是 error-prone.
这里的 shorthand 语法有问题:
hbuffer::qty[1]
如果将其替换为:
hbuffer:buffer-field ("qty"):BUFFER-VALUE (1)
它会起作用(直到 Peter 使用未定义的字段 tt_week1 制作的那个点)。我没有找到任何参考说明 shorthand 语法是否应该与 EXTENT 字段一起使用. 可能值得检查 Progress tech-support.
所以这会让你更进一步:
assign tt_data = hbuffer:buffer-field ("qty"):BUFFER-VALUE (1) /*field name qty data type is deci-10[52].*/
正如 Mike 所指出的,您尝试引用范围会引发错误,动态范围引用使用圆括号(并且可以很好地与 shorthand 一起使用):
hbuffer::qty(1)
此外:
- 您不需要使用
:
来终止您的查询
get-next()
默认为 no-lock
- 您打开查询两次
// some demo data
define temp-table db no-undo
field qty as decimal extent 7
.
create db. db.qty[1] = 1.
create db. db.qty[1] = 2.
// the question
define variable hb as handle no-undo.
define variable hq as handle no-undo.
define variable cquery as character no-undo.
define temp-table tt no-undo
field week1 as character label 'Week1'
.
create buffer hb for table 'db'.
cquery = substitute( 'for each &1', hb:name ).
create query hq.
hq:set-buffers( hb ).
if hq:query-prepare( cquery ) and hq:query-open() then do:
do while hq:get-next():
create tt.
tt.week1 = hb::qty(1). // <-- round parentheses
end.
end.
for each tt:
display tt.week1.
end.
https://abldojo.services.progress.com/?shareId=626aff353fb02369b2545434
我正在使用以下动态查询从 table 中获取数据。但我收到编译错误 “短语或选项与之前的短语或选项冲突。(277)”。不确定我在哪里犯了错误以及如何解决它。请帮助我修改以下示例查询。
define variable hbuffer as handle no-undo.
define variable hQuery as handle no-undo.
define variable cQuery as character no-undo.
define temp-table tt_table no-undo
field tt_week1 as character label "Week1"
.
create buffer hbuffer for table "<table>".
cQuery = "for each <table> no-lock ".
create query hQuery.
hQuery:set-buffers(hbuffer).
cQuery = cQuery + ":".
hQuery:query-prepare(cQuery).
hQuery:query-open().
if hQuery:query-open() then
do:
do while hQuery:get-next():
create tt_table.
assign tt_week1 = hbuffer::qty[1] /*field name qty data type is deci-10[52].*/
.
end.
end.
for each tt_table :
disp tt_week1.
end.
编译错误应该会告诉您错误来自哪一行。
在代码片段中,您没有在任何地方定义 tt_week
字段。
一般来说,如果要赋值一个(temp)table字段,应该使用table.field表示法; AVM 通常可以弄清楚你的意图,但不具体是 error-prone.
这里的 shorthand 语法有问题:
hbuffer::qty[1]
如果将其替换为:
hbuffer:buffer-field ("qty"):BUFFER-VALUE (1)
它会起作用(直到 Peter 使用未定义的字段 tt_week1 制作的那个点)。我没有找到任何参考说明 shorthand 语法是否应该与 EXTENT 字段一起使用. 可能值得检查 Progress tech-support.
所以这会让你更进一步:
assign tt_data = hbuffer:buffer-field ("qty"):BUFFER-VALUE (1) /*field name qty data type is deci-10[52].*/
正如 Mike 所指出的,您尝试引用范围会引发错误,动态范围引用使用圆括号(并且可以很好地与 shorthand 一起使用):
hbuffer::qty(1)
此外:
- 您不需要使用
:
来终止您的查询
get-next()
默认为 no-lock- 您打开查询两次
// some demo data
define temp-table db no-undo
field qty as decimal extent 7
.
create db. db.qty[1] = 1.
create db. db.qty[1] = 2.
// the question
define variable hb as handle no-undo.
define variable hq as handle no-undo.
define variable cquery as character no-undo.
define temp-table tt no-undo
field week1 as character label 'Week1'
.
create buffer hb for table 'db'.
cquery = substitute( 'for each &1', hb:name ).
create query hq.
hq:set-buffers( hb ).
if hq:query-prepare( cquery ) and hq:query-open() then do:
do while hq:get-next():
create tt.
tt.week1 = hb::qty(1). // <-- round parentheses
end.
end.
for each tt:
display tt.week1.
end.
https://abldojo.services.progress.com/?shareId=626aff353fb02369b2545434