如何读取 table 字段的默认值?

How to read table field's default value?

我想读取 table 字段的默认值。我目前正在使用以下语法:

DEF VAR iDefaultValue AS INT NO-UNDO.

iDefaultValue = BUFFER MyTable:BUFFER-FIELD("MyField"):DEFAULT-VALUE.

但是,当此字段被重命名或出现拼写错误时,它将成功通过编译过程,并在稍后的运行时抛出可能的错误。

有没有其他方法可以读取这个值而无需将其作为字符串写入和传递?我想通过简单的语法检查来发现任何错别字或错误。

您也可以使用缓冲区中的字段编号。如果添加新字段或重新排序字段,这可能会中断。

iDefaultValue = BUFFER u-ort:BUFFER-FIELD(1):DEFAULT-VALUE.

无论您如何操作,您都可以在运行时检查此错误并记录它或记录适合您的应用程序的任何内容。

DEFINE VARIABLE iDefaultValue   AS INTEGER     NO-UNDO.
DEFINE VARIABLE iErrors         AS INTEGER     NO-UNDO.

iDefaultValue = BUFFER myTable:BUFFER-FIELD("MyField"):DEFAULT-VALUE NO-ERROR.
IF ERROR-STATUS:ERROR THEN DO:

    DO iErrors = 1 TO ERROR-STATUS:NUM-MESSAGES:

        /* 7351 
        BUFFER-FIELD <field-name> was not found in buffer <buffer-name>. (7351)
        You gave a character expression as the argument to the BUFFER-FIELD method of a buffer object, but the character string did not identify any field in that buffer.  Check your PROGRESS dictionary for the field names for the table, and do not abbreviate the field name.
        */

        IF ERROR-STATUS:GET-NUMBER(iErrors) = 7351 THEN DO:
            MESSAGE "Buffer field name was wrong" VIEW-AS ALERT-BOX.
        END.

    END.
END.

您可以只定义变量 like 字段并使用它的值。

DEF VAR iDefaultValue like myTable.MyField NO-UNDO.
/* Don't change the variable! */

当然如果数据库字段的初始值改变了你需要重新编译,否则你会得到旧的初始值。 如果您想确保始终获得当前值并在编译时捕获错误,您可以编写

DEF VAR iDefaultValue like myTable.MyField NO-UNDO.
iDefaultValue = BUFFER MyTable:BUFFER-FIELD("MyField"):DEFAULT-VALUE.

在这种情况下,当字段被重命名但代码没有重新编译时,您仍然会遇到运行时错误。 使用以下代码,在后一种情况下启动程序时应该会出错。

DEF VAR iDefaultValue like myTable.MyField NO-UNDO.
define frame f_dummy
  myTable.MyField view-as fill-in skip
with side-labels width 255 stream-io.
iDefaultValue = BUFFER MyTable:BUFFER-FIELD("MyField"):DEFAULT-VALUE.

我想您必须决定哪种行为更适合您。 所有示例均假定 table 和字段名称在编译时已知。