循环中的按钮

Button within a loop

我是一个进步新手,下面是我目前的代码,表名和字段名更改以保护无辜者。我想遍历数据库中的记录,并在该循环中包含一个按钮,以便在有人想要更改某些内容时一条一条地遍历每条记录。我有下面的代码循环遍历记录(下面没有包含按钮元素)并且按钮元素在单独的缓冲区中工作正常但是当我将按钮带入循环时循环运行正常,但在第一个按钮后停止.当我尝试继续时,按钮代码运行。我想包含一个按钮,但它仅在单击时运行该过程。如果我删除行 'WAIT-FOR WINDOW-CLOSE OF CURRENT-WINDOW.' ,循环将继续我想要的并且按钮出现,但是按钮呈现为不可点击。任何帮助表示赞赏。

define variable cInsertCompany as character format "x(50)" label "Enter the company name:" no-undo.
define variable cCompanyName as character format "x(50)".
prompt-for cInsertCompany.
assign cCompanyName = input cInsertCompany.

for each tableName where client = 'tgl',
each otherTableName where tableName.ref = otherTableName.ref and TableName.name matches  '*' + cCompanyName + '*':
display 
tablename.nrname
tablename.otherfield.

DEFINE BUTTON bUpdate LABEL "Update".
DEFINE FRAME btn-frame WITH SIZE 10 BY 2.
ENABLE bUpdate WITH FRAME btn-frame.

ON CHOOSE OF bUpdate DO:
 RUN btn-mess.
END.

VIEW FRAME btn-frame.

WAIT-FOR WINDOW-CLOSE OF CURRENT-WINDOW.


PROCEDURE btn-mess.
 MESSAGE "Hello" SKIP "You have selected the new button"
 VIEW-AS ALERT-BOX INFO BUTTONS OK.
END PROCEDURE.

end.

好的,首先我赞成Tim上面说的。我相信浏览是执行此操作的更好方法,因此您可以查看记录,select 它,然后填充第二个屏幕或下面的字段,然后让用户发疯。但是如果你想实现你在这里尝试的东西,我制作了这个模拟程序来展示。它首先切断了你的 where 子句和提示,但这不是你的问题,所以我专注于让按钮工作:

DEFINE TEMP-TABLE tt
    FIELD a AS INT
    FIELD b AS CHAR.

DEFINE BUTTON bt LABEL "Modify".

DEFINE FRAME f
    tt.a SKIP tt.b bt.

ON 'choose':U OF bt IN FRAME f DO:
    MESSAGE 'you pressed a button'
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.

/* Create some test records */
CREATE tt. ASSIGN a = 1 b = 'first'.
CREATE tt. ASSIGN a = 2 b = 'second'.
CREATE tt. ASSIGN a = 3 b = 'third'.

FOR EACH tt:
    DISPLAY tt WITH FRAME f.
    ENABLE bt WITH FRAME f.
END.

WAIT-FOR CLOSE OF CURRENT-WINDOW.

再说一遍:这不是最好的方法,我真的认为两个 GUI windows 可以使它更加专业和美观。但是为了学习,我就是这样做的。

如果您有任何问题,请告诉我,但我希望代码非常简单。

只是为了演示,这也是一种非常原始的方法,但是使用浏览器:

DEFINE TEMP-TABLE tt
    FIELD a AS INT
    FIELD b AS CHAR.

DEFINE BUTTON bt  LABEL "Modify".
DEFINE BUTTON btS LABEL "Save".


DEFINE QUERY qr FOR tt.
DEFINE BROWSE br QUERY qr DISPLAY tt.a tt.b WITH SIZE 60 BY 4 .


DEFINE FRAME f
    br bt
    tt.a SKIP tt.b btS WITH THREE-D SIDE-LABELS.

ON 'choose':U OF bt IN FRAME f
DO:
    RUN updateRecord.
END.

ON 'choose':U OF btS IN FRAME f DO:
    FIND FIRST tt WHERE tt.a = INPUT FRAME f tt.a NO-ERROR.
    ASSIGN tt.a = INPUT FRAME f tt.a
           tt.b = INPUT FRAME f tt.b.
    BROWSE br:REFRESH().
    CLEAR FRAME f.
END.

/* Create some test records */
CREATE tt. ASSIGN a = 1 b = 'first'.
CREATE tt. ASSIGN a = 2 b = 'second'.
CREATE tt. ASSIGN a = 3 b = 'third'.

OPEN QUERY qr FOR EACH tt.
ENABLE ALL EXCEPT tt.a tt.b WITH FRAME f.

WAIT-FOR CLOSE OF CURRENT-WINDOW.

PROCEDURE updateRecord:
    DISPLAY tt.a tt.b WITH FRAME f.
    ENABLE  tt.a tt.b WITH FRAME f.
END PROCEDURE.