我是一个进步新手,下面是我当前的代码,tableNames和fieldnames改变以保护无辜者。我想循环遍历数据库中的记录,并在该循环中包含一个按钮,以便在有人想要更改某些内容时逐个循环遍历每个记录。我有下面的代码循环通过记录很好(没有下面的按钮元素)和我有一个单独的缓冲区中的按钮元素工作正常,但当我把按钮带入循环循环运行正常,但在第一个按钮后停止。当我尝试继续按钮代码运行时。我想要包含一个按钮但它只在单击时运行该过程。如果我删除“当前窗口等待窗口关闭”这一行。'循环继续我想要的按钮出现,但按钮呈现为不可点击。有任何帮助。
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.
答案 0 :(得分:2)
只是为了证明,这是一种非常原始的方式,但使用浏览:
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.
答案 1 :(得分:1)
好的,首先,我赞同蒂姆上面所说的话。我相信浏览是一种更好的方法,因此您可以查看记录,选择它,然后填充下面的第二个屏幕或字段,然后让用户发疯。但如果你想实现你在这里尝试的东西,我就会制作这个模拟程序。它会切断你的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窗口可以使这个更专业和更好。但是为了学习,我就是这样做的。
如果您有任何问题,请告诉我,但我希望代码非常简单。