プロジェクトのデータ構造をfields.txtのフォーマットでテキストファイルに書き出す。書き出した「fields.txt」をエクセルやエディタで編集して、新たなデータベースプロジェクトを作るときに便利。
使い方
メソッド実行する。v13とv19で動作確認済み。v11では動かない。
引数
なし
//JCL_tbl_ExportDefs_toFields
//20231228 wat
//export_field_properties
//フィールドプロパティをタブ区切りのfieldsフォーマットで書き出し
C_TEXT($filePath)
C_TIME($doc)
C_LONGINT($i; $k)
C_TEXT($tblName; $fieldName)
C_LONGINT($type)
C_LONGINT($len)
C_BOOLEAN($index)
C_BOOLEAN($unique)
C_BOOLEAN($visible)
C_POINTER($tblPtr)
C_POINTER($field_ptr)
C_LONGINT($numOfTbls)
//4Dマニュアルサイトからゲット
ARRAY TEXT($aryTableNames; Get last table number)
ARRAY POINTER($aryTblPtrs; Get last table number)
If (Get last table number>0) //データベースにテーブルがある場合
For ($i; Size of array($aryTableNames); 1; -1)
If (Is table number valid($i))
$aryTblPtrs{$i}:=Table($i)
$aryTableNames{$i}:=Table name($i)
Else
DELETE FROM ARRAY($aryTableNames; $i)
End if
End for
End if
$numOfTbls:=Size of array($aryTableNames)
If ($numOfTbls>0)
//ファイル保存ダイアログ表示
//$doc:=Select document(""; "fields.txt"; "txt"; "出力ファイル名:"; File name entry)
$filePath:=Select document(System folder(Desktop)+"fields.txt"; "txt"; "出力ファイル名:"; File name entry)
If (OK=1)
//タブ区切りでテキストファイルに出力
$doc:=Create document(Document; "txt")
If ($doc#0)
//ヘッダ
SEND PACKET($doc; "フィールド一覧"+Char(Tab))
SEND PACKET($doc; "テーブル数:"+String($numOfTbls)+Char(Tab))
SEND PACKET($doc; String(Current date)+Char(Carriage return))
SEND PACKET($doc; "テーブル名"+Char(Tab)) //A
SEND PACKET($doc; Char(Tab)) //B
SEND PACKET($doc; "フォーム作成"+Char(Tab)) //C
SEND PACKET($doc; "レコード数"+Char(Tab)) //C
SEND PACKET($doc; "コメント"+Char(Carriage return)) //E
SEND PACKET($doc; "フィールド名"+Char(Tab)) //A
SEND PACKET($doc; "タイプ"+Char(Tab)) //B
SEND PACKET($doc; "長さ"+Char(Tab)) //C
SEND PACKET($doc; "インデックス"+Char(Tab)) //D
SEND PACKET($doc; "ユニーク"+Char(Tab)) //E
SEND PACKET($doc; "非表示"+Char(Tab)) //F
SEND PACKET($doc; "ラベル"+Char(Tab)) //G
SEND PACKET($doc; "説明"+Char(Tab)) //H fieldsフォーマットで必要な列はHまで
SEND PACKET($doc; "データが入っているレコードの数"+Char(Carriage return)) //I: fieldsフォーマットに不要な列
For ($i; 1; $numOfTbls)
//テーブル情報
$tblName:=$aryTableNames{$i}
SEND PACKET($doc; $tblName+Char(Tab)) //A
SEND PACKET($doc; Char(Tab)) //B
SEND PACKET($doc; "フォーム作る"+Char(Tab)) //C
$tblPtr:=$aryTblPtrs{$i}
ALL RECORDS($tblPtr->)
SEND PACKET($doc; String(Records in selection($tblPtr->))+Char(Carriage return)) //D
For ($k; 1; Get last field number($i))
//フィールド情報
$field_ptr:=Field($i; $k)
$fieldName:=Field name($i; $k)
GET FIELD PROPERTIES($i; $k; $type; $len; $index; $unique; $visible)
SEND PACKET($doc; $fieldName+Char(Tab)) //A
Case of //B
: ($type=Is alpha field)
QUERY($tblPtr->; $field_ptr->#"")
SEND PACKET($doc; "Is Alpha Field"+Char(Tab))
: ($type=Is text)
QUERY($tblPtr->; $field_ptr->#"")
SEND PACKET($doc; "Is Text"+Char(Tab))
: ($type=Is real)
QUERY($tblPtr->; $field_ptr->#0)
SEND PACKET($doc; "Is Real"+Char(Tab))
: ($type=Is integer)
QUERY($tblPtr->; $field_ptr->#0)
SEND PACKET($doc; "Is Integer"+Char(Tab))
: ($type=Is longint)
QUERY($tblPtr->; $field_ptr->#0)
SEND PACKET($doc; "Is LongInt"+Char(Tab))
: ($type=Is date)
QUERY($tblPtr->; $field_ptr->#!00-00-00!)
SEND PACKET($doc; "Is Date"+Char(Tab))
: ($type=Is time)
QUERY($tblPtr->; $field_ptr->#0)
SEND PACKET($doc; "Is Time"+Char(Tab))
: ($type=Is boolean)
QUERY($tblPtr->; $field_ptr->#False)
SEND PACKET($doc; "Is Boolean"+Char(Tab))
: ($type=Is picture)
SEND PACKET($doc; "Is Picture"+Char(Tab))
: ($type=Is subtable)
SEND PACKET($doc; "Is Subtable"+Char(Tab))
: ($type=Is BLOB)
SEND PACKET($doc; "Is BLOB"+Char(Tab))
End case
SEND PACKET($doc; String($len)+Char(Tab)) //C
If ($index=True)
SEND PACKET($doc; "1"+Char(Tab)) //D
Else
SEND PACKET($doc; "0"+Char(Tab)) //D
End if
If ($unique=True)
SEND PACKET($doc; "1"+Char(Tab)) //E
Else
SEND PACKET($doc; "0"+Char(Tab)) //E
End if
If ($visible=True)
SEND PACKET($doc; "1"+Char(Tab)) //F
Else
SEND PACKET($doc; "0"+Char(Tab)) //F
End if
SEND PACKET($doc; Char(Tab)) //G
SEND PACKET($doc; Char(Tab)) //H
SEND PACKET($doc; String(Records in selection($tblPtr->))+Char(Carriage return)) //I
End for
SEND PACKET($doc; "-"+Char(Carriage return)) //テーブル区切り文字
End for
//ファイルを閉じる
CLOSE DOCUMENT($doc)
//終了メッセージ
ALERT("出力が終わりました。")
End if
End if
End if
実行すると、次のようにファイル保存ダイアログが表示される。
[保存]をクリックすると、テキストファイルができる。「データが入っているレコードの数」によって、使っていなさそうなフィールドがわかる。
エクセルにペーストする。
フィールド属性はJCL_table_Generateに必要な「ユニーク」、「インデックス」、「非表示」の3項目。これでできたfields.txtは、JCL_table_Generateで読み込むことができる。(注意:テーブル名/フィールド名に全角文字が含まれていなければという条件付き。上記の例ではエラーになる。)