JCL_table_generate

テーブル定義書「fields」を読み込んでテーブルを作成する。

使い方
メソッドエディタを開いて実行する。実行するとファイル選択ダイアログが表示される。ここでfieldsフォーマットのテキストファイル(UTF-8)を選択する。フォーマットが正しければ「N個のテーブルを作成しました。」のメッセージが表示される。

fieldsフォーマット

fieldsと呼ばれるテキストファイルのフォーマットは次のとおり。

1行目:テーブル名 接頭辞 オプション フィールド数(参考) 空白 テーブル日本語名 テーブル説明
2行目からN行:フィールド名 データ型 データ長(文字列のみ) インデックス ユニーク フィールド日本語名 フィールド説明
最後の行:-(ハイフンのみ)

たとえば「LETTER」というテーブルと「LExBL」というテーブルのサンプルを以下に示す。

通常のテーブル

LETTERLEフォーム作る25フィールド レター送り状
IDIs LongInt0100
KO_IDIs LongInt010顧客ID
KO_NAMEIs Alpha Field8000顧客名送り状発行時の顧客名
KO_ADDRESSIs Text000顧客住所同住所
TITLEIs Alpha Field8000タイトル
BODYIs Text000本文
REMARKIs Text000備考
DEL_FLAGIs LongInt000削除フラグ
CREATE_DATEMARKIs Alpha Field2000作成日
UPDATE_DATEMARKIs Alpha Field2000更新日
_

マッチングテーブル

LE_x_BLLEXBLフォーム作る6フィールド送り状x請求書マッチング
IDIs LongInt010
LE_IDIs LongInt010
BL_IDIs LongInt010
CREATE_DATEMARKIs Alpha Field2000
DEL_FLAGIs LongInt000
DEL_DATEMARKIs Alpha Field2000
_

【解説】
テキストファイルを読み込んでSQL文に変換、それをExecute SQLコマンドで実行している。インデックス属性とユニーク属性だけサポート。あとは4Dのテーブル設定でマニュアル操作する。

  //JCL_tbl_import
  //JCL_import_tables
  //20111005 wat
  //20121001 wat rename, 20130429 wat mod
  //外部テキストファイルのフィールド定義を読み込んでテーブル作成
  //20150826 yabe フォーム作成フラグ追加

C_LONGINT($dlg_ok)
C_BLOB($fileBlob)  //読み込んだファイルの内容
C_TEXT($fileText)  //読み込んだファイル
ARRAY TEXT($aryTableName;0)  //テーブル名の配列
ARRAY LONGINT($aryStartLineNr;0)  //テーブル定義始まりの行番号の配列
ARRAY TEXT($aryPrefix;0)  //フィールド名のプリフィックスの配列
ARRAY TEXT($aryFormsFlag;0)  //20150826 フォームを作るかどうかのフラグの配列「フォーム作る」なら作成
C_LONGINT($i;$numOfTables)

  //定義ファイルを選択
$dlg_ok:=JCL_file_SelectFileDlg (->$fileBlob)
If ($dlg_ok=1)
	
	  //読み込んだファイルの内容を4Dの文字セットにエンコード
	$fileText:=Convert to text($fileBlob;"UTF-8")
	
	  //テーブル名の配列を得る
	$numOfTables:=JCL_tbl_Names_fromFile ($fileText;->$aryTableName;->$aryStartLineNr;->$aryPrefix;->$aryFormsFlag)
	For ($i;1;$numOfTables)
		
		  //テーブルを作成
		JCL_tbl_Create_bySQL ($fileText;$aryTableName{$i};$aryStartLineNr{$i};$aryPrefix{$i})
		
		  //インデックスを作成
		JCL_tbl_Index_create ($fileText;$aryTableName{$i};$aryStartLineNr{$i};$aryPrefix{$i})
		
	End for 
	
	C_TEXT($msg)
	$msg:="完了"+Char(Carriage return)
	$msg:=$msg+String($numOfTables)+"個のテーブルを作成しました。"
	ALERT($msg)
	
End if 

【文字列長の考え方】
短い文字列は20文字、名前のようなちょっと長い文字列は80文字、もっと長い文字列で1行にしたい場合は255文字、改行付きの長い文字列はTextにしている。プログラミングする際に長さを気にしていると非効率。通常はプログラムの方で制約をかければよく、本当に気にしなければならない時だけテーブル構造を最適化することにしている。