我有一个缓冲区,其中包含数据,数字和字符字段的混合。我正在显示字段的值,但由于某种原因,日期字段返回“?”当我尝试将它们添加到字符串中时。
我还能得到?即使我这样做
ASSIGN lvString = lvString + STRING(hField:BUFFER-VALUE)。
我也尝试将BUFFER-VALUE分配给本地DATE变量,并将其转换为字符串,但这也不起作用 - 仍然??
但是,如果我使用STRING-VALUE属性,它可以正常工作。
如何将值作为日期字段而不仅仅是字符串?
答案 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字段。请注意,使用FIELDS
或FOR 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”来获取缓冲区字段句柄。