首页 > 解决方案 > 我可以根据变量的值命名临时表字段吗?

问题描述

您好 Progress4GL 开发人员,

是否可以根据参数的值命名临时表中的字段。

例如,假设我有一个值为“fieldname”的变量集:

define variable randomvariable as character initial "fieldname" NO-UNDO.

现在,我想做这样的事情(下面的代码不起作用):

define variable randomvariable as character initial "fieldname" NO-UNDO.

define temp-table tt_table
field VALUE(randomvariable) AS CHARACTER.

提前谢谢了!

标签: openedgeprogress-4gl

解决方案


正如 bupereira 指出的那样,这需要一个动态临时表。要定义/创建动态临时表,请在此处执行此操作:

DEFINE VARIABLE randomvariable AS CHARACTER INITIAL "fieldname" NO-UNDO.

DEFINE VARIABLE hTempTable AS HANDLE NO-UNDO.
DEFINE VARIABLE hBuffer    AS HANDLE NO-UNDO.

CREATE TEMP-TABLE hTempTable .

hTempTable:ADD-NEW-FIELD (randomvariable, "CHARACTER") .

// Optional, but good practive when temp-table becomes large
hTempTable:ADD-NEW-INDEX("myPrimaryIndex",
                         TRUE, // unique
                         TRUE, // primary
                         FALSE // no word-index
                         ) .
hTempTable:ADD-INDEX-FIELD ("myPrimaryIndex", randomvariable) .

hTempTable:TEMP-TABLE-PREPARE ("tt_table") .

hBuffer = hTempTable:DEFAULT-BUFFER-HANDLE .

然后使用默认缓冲区创建一些记录:

hBuffer:BUFFER-CREATE () .
hBuffer:BUFFER-FIELD (randomvariable):BUFFER-VALUE = "Hello" .

hBuffer:BUFFER-CREATE () .
hBuffer:BUFFER-FIELD (randomvariable):BUFFER-VALUE = "World" .
hBuffer:BUFFER-RELEASE .

然后使用默认缓冲区的 FIND... 方法之一或动态查询来访问记录:

hBuffer:FIND-FIRST (SUBSTITUTE ("where &1 = &2",
                                randomvariable,
                                QUOTER ("World"))) .
MESSAGE hBuffer:BUFFER-FIELD (randomvariable):BUFFER-VALUE .

推荐阅读