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);
と記述しなければならない。