2017-02-14 76 views
0

我想读取表格的默认值。我目前使用的语法如下:如何读取表格的默认值?

DEF VAR iDefaultValue AS INT NO-UNDO. 

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

然而,当这个领域被重命名或有一个错字,它会通编译过程顺利,并可能出现的错误是在运行后抛出。

是否有任何其他方式来读取此值,而不写入并将其作为字符串传递?我想通过简单的语法检查来发现任何拼写错误或错误。

回答

2

您也可以使用缓冲区中的字段编号。如果添加新字段或重新排序字段,这可能会中断。不管你是怎么做到的

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

您可以只定义变量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. 

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