2017-02-14 70 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. 

我想你必須決定哪種行爲更適合你。 所有示例都假定表和字段名稱在編譯時已知。