将日期字段值保存到物理文件中

时间:2012-08-02 05:20:52

标签: database ibm-midrange rpgle rpg

我有一个日期字段,接受AS400中的系统日期

显示文件包含* DATE

的日期字段

我有一个具有日期列的物理文件。当我尝试将屏幕的其他字段保存到此物理文件时,我还想保存此系统日期。

但我无法在此内置日期功能中添加字段名称。

如何在我的显示屏幕中有一个日期字段,它将自动接受系统日期并具有DD / mm / yy格式的输入格式,但在数据库内部必须将其保存为yy / mm / dd。

为了在我的日期格式数据库中进行内部转换,我初始化了一个名为“date”的日期字段,长度为6,包装小数,0位小数。

请指导如何将此格式的系统日期从屏幕保存到物理文件中。

重新编辑: 我有一个等级的PF收到日期定义如下。(其DDS)

   0004.00      A            GRCVDT         6P 0  

我没有使用'L'数据类型作为日期,因为我想执行日期转换,如上所述。

2 个答案:

答案 0 :(得分: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          

答案 1 :(得分: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重新创建文件而不会丢失新列)

然后在你的程序中,在写入数据之前,执行:     mydate =%date

这里有很多假设:你使用的是ILE,你知道如何修改和重新编译程序,你使用自由格式或者可以翻译上面的“variable = value”语法,...)

还有其他方法可以将系统日期转换为文件,而您的程序不必执行任何特殊操作;我们实际上需要了解有关应用程序的更多信息,以便提供超出此高级别建议的帮助。