1

AS400 でシステム日付を受け入れる日付フィールドがあります

表示ファイルには *DATE による日付フィールドが含まれています

日付列を持つ物理ファイルがあります。画面の他のフィールドをこの物理ファイルに保存しようとすると、このシステム日付も保存したいと思います。

しかし、この組み込みの Date 関数にフィールド名を追加できません。

システム日付を自動的に受け入れ、入力用に DD/mm/yy 形式の形式を持つ表示画面に日付フィールドを表示する方法はありますが、内部的にはデータベースに yy/mm/dd として保存する必要があります。

日付形式のデータベースでこの内部変換を行うために、長さ 6、パック 10 進数、小数点以下 0 桁の「日付」という名前の日付フィールドを初期化しました。

システム日付を画面からこの形式で物理ファイルに保存する方法を教えてください。

再編集: 成績受領日を次のように定義した PF があります (その DDS)。

   0004.00      A            GRCVDT         6P 0  

上記で説明したように、日付変換を実行したいので、日付に「L」データ型を使用することは控えます。

4

2 に答える 2

3

表示装置ファイルでは、*DATE は出力専用です。プログラムで読み取ることはできません。

データベース テーブルには DATE という 10 進数フィールドがあるようです。DATE という日付フィールドではありません。日付データ型を使用すると、日付操作が非常に簡単になります。これに関するアドバイスについては、Dennis の回答を参照してください。日付データ・タイプを使用できず、10 進データ・タイプを使用して日付値を保持する必要がある場合は、RPG TIME命令コードを調べてください。これにより、現在のシステム日付をプログラム変数に抽出できます。返される日付の正確な形式は、ジョブの日付形式の設定によって異なります。(それを確認するには WRKJOB)。必要に応じて、データ構造と一連の EVAL ステートメントを使用して、日付要素を並べ替えることができます。

EURをYYMMDDに変換するEDITコードサンプル

 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          
于 2012-08-02T14:24:04.027 に答える
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 add column mydate date not null default

(もちろん、そうすると、新しい列を失うことなく、DDS からファイルを再作成することはできなくなります)

次に、プログラムで、データへの WRITE の直前に、次のようにします: mydate = %date

ここには多くの仮定があります: ILE を使用している、プログラムを変更および再コンパイルする方法を知っている、自由形式を使用している、または上記の「変数 = 値」構文を変換できる、...)

プログラムが特別なことをしなくても、システム日付をファイルに入れる方法は他にもあります。この高レベルのアドバイスをはるかに超えて役立つようにするには、実際にはアプリケーションについてもっと知る必要があります。

于 2012-08-02T11:00:32.743 に答える