如何从Progress Openedge中的缓冲区字段中检索日期值?

时间:2014-12-15 09:29:18

标签: progress-4gl openedge

我有一个缓冲区,其中包含数据,数字和字符字段的混合。我正在显示字段的值,但由于某种原因,日期字段返回“?”当我尝试将它们添加到字符串中时。

我还能得到?即使我这样做

ASSIGN lvString = lvString + STRING(hField:BUFFER-VALUE)。

我也尝试将BUFFER-VALUE分配给本地DATE变量,并将其转换为字符串,但这也不起作用 - 仍然??

但是,如果我使用STRING-VALUE属性,它可以正常工作。

如何将值作为日期字段而不仅仅是字符串?

2 个答案:

答案 0 :(得分:1)

您可以通过两种方式来满足您的需求。一种是直接使用表缓冲区,另一种是使用QUERY句柄。

直接从表中使用缓冲区的第一个示例(或TEMP-TABLE,并不重要):

DEF VAR dateVar     AS DATE NO-UNDO.

FIND FIRST job NO-LOCK.

dateVar = DATE(BUFFER job:BUFFER-FIELD('dt-job'):BUFFER-VALUE).

MESSAGE dateVar
    VIEW-AS ALERT-BOX INFO BUTTONS OK.

使用查询句柄的第二个示例:

DEF VAR dateVar     AS DATE NO-UNDO.

DEF QUERY qrJob FOR job.

OPEN QUERY qrJob FOR EACH job.

QUERY qrJob:GET-FIRST().

dateVar = DATE(QUERY qrJob:GET-BUFFER-HANDLE(1):BUFFER-FIELD('dt-job'):BUFFER-VALUE).

MESSAGE dateVar
    VIEW-AS ALERT-BOX INFO BUTTONS OK.

正如Tim Kuehn所说,如果你知道它在查询中的位置,你可以用查询中的字段替换'dt-job'。我可以使用BUFFER-FIELD(2)代替BUFFER-FIELD('dt-job'),因为dt-job是我查询中的#2字段。请注意,使用FIELDSFOR EACH语句中的OPEN QUERY子句会更改查询中字段的顺序。通常,对于浏览器,只能按顺序使用FIELDS部分中指定的列字段。

这些可能对你有用。说BUFFER-VALUE始终返回CHARACTER数据类型非常重要,因此您需要使用DATE语句进行数据转换。

希望它有所帮助。

答案 1 :(得分:0)

获取字段数据类型数据的标准格式为

buffer table-name:buffer-handle:buffer-field("field-name"):buffer-value.

对于数组:

buffer table-name:buffer-handle:buffer-field("field-name"):buffer-value[array-element]. 

您也可以用字段#替换“field-name”来获取缓冲区字段句柄。