Database 如何读取表格字段';默认值是多少?

Database 如何读取表格字段';默认值是多少?,database,syntax,progress-4gl,openedge,Database,Syntax,Progress 4gl,Openedge,我想读取表字段的默认值。我目前正在使用以下语法: DEF VAR iDefaultValue AS INT NO-UNDO. iDefaultValue = BUFFER MyTable:BUFFER-FIELD("MyField"):DEFAULT-VALUE. 但是,当该字段被重命名或出现键入错误时,它将成功地完成编译过程,并且可能的错误将在稍后的运行时抛出 有没有其他方法可以读取此值而不将其写入并作为字符串传递?我想通过简单的语法检查来发现任何输入错误或错误。您也可以使用缓冲区中的字段

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

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.
将变量iDefaultValue定义为整数NO-UNDO。
将变量iErrors定义为整数NO-UNDO。
iDefaultValue=BUFFER myTable:BUFFER-FIELD(“MyField”):默认值无错误。
如果错误状态:错误,则执行以下操作:
DO iErrors=1至错误状态:NUM-MESSAGES:
/* 7351 
在缓冲区中找不到缓冲区字段。(7351)
您提供了一个字符表达式作为缓冲区对象的BUFFER-FIELD方法的参数,但字符串没有标识该缓冲区中的任何字段。检查进度字典中表的字段名,不要缩写字段名。
*/
如果ERROR-STATUS:GET-NUMBER(iErrors)=7351,则执行以下操作:
消息“缓冲区字段名称错误”查看为警报框。
结束。
结束。
结束。

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

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.
将变量iDefaultValue定义为整数NO-UNDO。
将变量iErrors定义为整数NO-UNDO。
iDefaultValue=BUFFER myTable:BUFFER-FIELD(“MyField”):默认值无错误。
如果错误状态:错误,则执行以下操作:
DO iErrors=1至错误状态:NUM-MESSAGES:
/* 7351 
在缓冲区中找不到缓冲区字段。(7351)
您提供了一个字符表达式作为缓冲区对象的BUFFER-FIELD方法的参数,但字符串没有标识该缓冲区中的任何字段。检查进度字典中表的字段名,不要缩写字段名。
*/
如果ERROR-STATUS:GET-NUMBER(iErrors)=7351,则执行以下操作:
消息“缓冲区字段名称错误”查看为警报框。
结束。
结束。
结束。

您可以像定义字段一样定义变量
,并使用其值

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.
我想你必须决定哪种行为更适合你。
所有示例都假定表名和字段名在编译时是已知的。

您可以像定义字段一样定义变量
,并使用其值

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.
我想你必须决定哪种行为更适合你。 所有示例都假定表名和字段名在编译时已知