我可以根据变量的值命名一个 temp-table 字段吗?
Can I name a temp-table field from the value of a variable?
Progress4GL 开发人员您好,
是否可以根据参数的值来命名 temp-table 中的字段。
例如,假设我有一个变量集,值为 "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.
非常感谢!
更接近你写的是用变量值定义一个预处理器并在temp-table定义中重用它,如:
&global-define myvar fieldname
define variable randomvariable as character initial "{&myvar}" NO-UNDO.
define temp-table tt_table
field {&myvar} AS CHARACTER.
只要您的意图不是能够在运行时定义字段名称,这就有效。
如果您的临时 table 是动态的,这可以工作。查看这些链接,第一个用于动态 temp-table 语法,第二个用于创建您自己的字段。
动态温度-tables:
https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvref/create-temp-table-statement.html
正如布佩雷拉所指出的,这需要一个动态温度table。要 define/create 动态温度 table,请在此处执行此操作:
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 .
Progress4GL 开发人员您好,
是否可以根据参数的值来命名 temp-table 中的字段。
例如,假设我有一个变量集,值为 "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.
非常感谢!
更接近你写的是用变量值定义一个预处理器并在temp-table定义中重用它,如:
&global-define myvar fieldname
define variable randomvariable as character initial "{&myvar}" NO-UNDO.
define temp-table tt_table
field {&myvar} AS CHARACTER.
只要您的意图不是能够在运行时定义字段名称,这就有效。
如果您的临时 table 是动态的,这可以工作。查看这些链接,第一个用于动态 temp-table 语法,第二个用于创建您自己的字段。
动态温度-tables: https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvref/create-temp-table-statement.html
正如布佩雷拉所指出的,这需要一个动态温度table。要 define/create 动态温度 table,请在此处执行此操作:
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 .