2012-08-02 59 views
0

我有接受在AS400系統日期保存日期字段值插入物理文件

顯示文件包含由* DATE

日期字段我有有一個日期欄的物理文件日期字段。當我嘗試將我的屏幕的其他字段保存到此物理文件上時,我還想保存此係統日期。

但我無法爲此內置Date函數添加字段名稱。

我還有什麼可以在我的顯示屏中有一個日期字段,它將自動接受系統日期並具有DD/mm/yy格式的輸入格式,但在內部數據庫中必須將其保存爲yy/mm/dd。

爲了在日期格式的數據庫中進行此內部轉換,我初始化了一個名爲「date」的長度爲6的小數字段,小數點後十位,小數點位置爲0。

請指導如何將屏幕上的系統日期以這種格式保存到物理文件中。

重新編輯: 我有級接收日期的PF定義如下(其DDS)

0004.00  A   GRCVDT   6P 0 

我避免使用日期「L」數據類型作爲我想執行日期轉換,因爲我有上面的解釋。

+0

恐怕是這裏的混亂。使用L數據類型frees_you_from必須將_convert_從一種格式轉換爲另一種格式!作爲日期存儲的日期可以以任何格式(輸出)表示,並可以從任何格式(輸入)填充。例如即使mydate默認定義爲* ISO(或任何其他)格式,mydate =%date('31 .07.2012',* EUR)或DUMMY =%Char(mydate,* USA)。系統知道這是什麼,因爲這是一個日期字段。 – Dennis 2012-08-02 18:56:43

+0

@ Dennis我實際上想對日期字段執行一些計算,就像給定TO和FROM值一樣,它必須返回那個Period的記錄。 – techie 2012-08-04 06:34:17

+0

你可以用日期字段或數字字段來做到這一點。你想繼續轉換/從YYYYMMDD,這取決於你。我只是說18年來沒有必要這樣做。日期字段已經存在很長時間((!!!))。唯一的問題是缺乏採用(或者可能缺乏教育)。 Scott Klement說(解釋)從頭開始培養新程序員要比現有人更容易使用「更新」(即過去15年左右)功能。猜猜他是對的。 – Dennis 2012-08-04 19:49:22

回答

1

該文件是通過DDS或SQL創建的?如果DDS,那麼請你選擇的字段添加到DDS規範,並指定L的數據類型:

 A   MYDATE   L 

然後用CHGPF,指定源文件和成員姓名;系統將添加新列。

CHGPF FILE(MYLIB/MYFILE)   
     SRCFILE(MYSRCLIB/MYSOURCE)  
     SRCMBR(MY_MBR)    

即使您的文件DDS描述,您可以通過使用像SQL語句添加日期列: ALTER TABLE MYTABLE添加列指明MyDate日期不爲空默認

(當然,如果你做到這一點,你不能重新從DDS文件不再不失新列)

然後在你的程序,只是在寫數據之前,這樣做: 指明MyDate =%日期

有AR這裏有很多假設:你正在使用ILE,你知道如何修改和重新編譯程序,你使用的是自由格式還是可以翻譯上面的「variable = value」語法,...)

還有其他的方法將系統日期放入一個文件中,而程序不必做任何特殊的事情;我們實際上需要了解更多有關該應用程序的內容,以幫助您遠遠超出此高層建議。

+0

謝謝你的迴應。問題不在於我如何去做更改或編譯,而是與執行日期類型轉換的邏輯有關。我已經在PF中定義了我的日期字段,如Reedits所示,我有d顯示文件我通過* DATE將日期定義爲系統日期,因此我無法獲取該值。是否有任何使用該變量執行計算的方法? – techie 2012-08-02 17:11:54

+0

那麼,如果你想獲取系統日期,爲什麼你必須從顯示屏上「獲取」它?現在的系統日期並不是偶然出現在顯示屏上,這在技術上可能是幾個月前的事。 %DATE(對於真實的日期值)或UDATE(或UMONTH,UDAY,UYEAR,不管你喜歡)可以幫助你。或者@操作代碼,正如@buckcalabro在他的回答中所指出的那樣。 – Dennis 2012-08-02 18:58:40

3

在顯示文件上,* DATE僅爲輸出。它不能被程序讀取。

聽起來像數據庫表有一個名爲DATE的小數字段;不是稱爲DATE的日期字段。使用日期數據類型會使日期操作變得更加簡單 - 請參閱Dennis的回答以獲取相關建議。如果不可能使用日期數據類型,並且您必須使用十進制數據類型來保存日期值,請查看RPG TIME操作碼。這將允許您將當前系統日期提取到程序變量中。日期將返回的確切格式取決於您的工作日期格式設置。 (WRKJOB看到這一點)。如果需要,可以使用數據結構和一系列EVAL語句重新排列日期元素。

編輯代碼樣本轉換EUR到YYMMDD

d eur    ds     qualified 
d ddmmyy       6s 0 
d dd       2s 0 overlay(ddmmyy: 1) 
d mm       2s 0 overlay(ddmmyy: 3) 
d yy       2s 0 overlay(ddmmyy: 5) 

d ymd    ds     qualified 
d yymmdd       6s 0 
d yy       2s 0 overlay(yymmdd: 1) 
d mm       2s 0 overlay(yymmdd: 3) 
d dd       2s 0 overlay(yymmdd: 5) 

c/free 
    eur.ddmmyy = 020812; 
    ymd.yy = eur.yy; 
    ymd.mm = eur.mm; 
    ymd.dd = eur.dd; 
    dsply ymd.yymmdd; 
    *inlr = *on; 
    /end-free   
+0

非常感謝那些信息。但是你是否仍然可以分享一些想法,我如何能夠實際執行日期的類型轉換。我說我通過十進制數據類型聲明接受日期格式爲* EUR格式的顯示文件。現在我想將其轉換爲yyyy-mm-dd格式,因爲我想通過減去此值的天數部分(因此轉換類型)來獲取數據。讚賞您的幫助 – techie 2012-08-02 17:19:02

+0

@techie - 請參閱我添加到原始文章中的評論。 – Dennis 2012-08-02 19:07:14

+0

如果你想得到「花哨」,你可以說'EVAL-CORR ymd = eur;'這將根據匹配的名稱移動3個小字段。 – WarrenT 2012-08-03 14:06:46

相關問題