2014-12-15 1 views
2

У меня есть буфер, который содержит сочетание данных, чисел и полей символов. Я получаю отображение значений полей, но почему-то поля даты возвращают «?» когда я пытаюсь добавить их в строку.Как вы извлекаете значение даты из поля буфера в Progress Opengege?

Я все еще получаю? даже если я делаю

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

Я также попытался присвоить BUFFER-VALUE локальной переменной DATE и преобразовать ее в строку, но это тоже не работает.

Однако, если я использую атрибут STRING-VALUE, он отлично работает.

Как получить значение как поле даты, а не просто строку?

+0

Вам нужно показать более полный фрагмент кода. Это не дает достаточной информации, чтобы помочь. –

ответ

0

Существует два способа, которые вы можете использовать для достижения ваших потребностей. Один из них - использовать непосредственно буфер таблицы, а другой - использовать дескриптор 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 для преобразования данных.

Надеюсь, это поможет.

+0

Спасибо за это - их ключевая информация, которой я отсутствовала, заключается в том, что вы можете получить только тип данных символов. – Screwtape

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]. 

Вы можете также заменить поле # для «имя поля», чтобы получить дескриптор поля буфера.