C400

69. 可変長フィールドを C/400 で使用するには ?

C/400 で外部記述としてデータ・ベースを処理しているときに、可変長フィールドを

使用するためには少しばかりの修正を必要とする。

例えば 商品マスター QTRFIL/SHOHIN を扱うときには

    #include <recio.h>
      :
    #pragma mapinc("SHOHIN", "QTRFIL/SHOHIN(SHOHINR)", "both", "d",,""         ) 
    #include "SHOHIN"                                                         
      :
    _RFILE *SHOREC;
    SHOREC_both_t  SHO_REC;
      :
      :
    memcpy(SHOREC.SHNAME, "蛍光灯スタンド", 16); ・・・

のような記述を行うはずである。

ところが商品マスター SHOHIN の商品名 : SHNAME を次のように可変長フィールドとして

定義していると、この演算はコンパイル・エラーとなってしまう。

    A            SHNAME      1024O         COLHDG(' 商品名 ')
    A                                      VARLEN(24)

この記述はフィールド SHNAME は最初は 24バイトとして確保されているが

1024 バイトまで拡張可能な可変長フィールドであることを意味している。

SHNAME が固定長フィールドであれば の演算は問題ないが SHNAME が可変長フィールドである場合は

コンパイル・エラーとなっしまう。

なぜならば可変長フィールド SHANEM は

        struct { short len;
                 char data[1024]
                } SHNAME;

として定義されているからである。ここで shirt len はデータの長さである。

データ部分はつねに data という名前で定義されている。

従って の演算命令は

     memcpy(SHOREC.data.SHNAME, "蛍光灯スタンド", 16);

と記述しなければならない。