【问题标题】:How to read table field's default value?如何读取表格字段的默认值?
【发布时间】:2017-07-02 07:52:25
【问题描述】:

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

DEF VAR iDefaultValue AS INT NO-UNDO.

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

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

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

【问题讨论】:

    标签: database syntax progress-4gl openedge


    【解决方案1】:

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

    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.
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 2012-01-06
        • 2015-04-14
        • 2021-01-06
        • 2010-11-21
        • 1970-01-01
        相关资源
        最近更新 更多