|
このセクションでは、データ型のマッピングについて詳しく説明します。
次の表は、Pervasive PSQL の列のデータ型から Delphi のデータ型へのマッピングを示しています。Pervasive PSQL データベースに格納されている左側のデータ型は、PDAC コンポーネントにより、右側に記載されているデータ型で表されます。
次の表は、Delphi データ型から Pervasive PSQL データ型へのマッピングを示しています。PDAC を使って新しいデータベース テーブルが作成されると、左側の列に示されるフィールドのデータ型として定義された列が、Pervasive PSQL によって、右側に示されるデータ型で保存されます。
次の表は、Btrieve から VCLへのデータ型のマッピングを示しています。
メモ
バイナリ フラグは X$Fields.Xe$Flags のフラグを指します。
実行時に CreateTable メソッドを呼び出し、このデータセットの現在の定義を使用してテーブルを作成します。
FieldDefs プロパティに値がある場合は、これらの値を使ってフィールド定義を作成します。値がない場合は、Fields プロパティを使用します。データセットを再作成するには、これらのプロパティの一方または両方に値がなければなりません。
Add メソッドを使用してフィールドのプロパティを割り当てます。
Add メソッドは以前のバージョンとの互換性を保つために提供されます。新しいフィールド定義を Item プロパティの配列に追加する場合は、AddFieldDef メソッドを使用することをお勧めします。また、これを使って ftBCD データ型の小数位と桁数も指定します。
Add メソッドは、Name、DataType、Size および Required パラメーターに渡された値を使用し、これらを新しいフィールド定義オブジェクトの個別のプロパティに割り当てます。
メモ
フィールドがヌル値を許可する場合、Required に False を設定します。
AutoInc フィールドで autoincrement プロパティをアクティブにするには、このフィールドに固有のインデックスを作成します。
PvTable1.DatabaseName := 'TestData'; PvTable1.TableName := 'TestData1'; with PvTable1.FieldDefs do begin Clear; Add('F_autoinc', ftAutoInc, 0, True); Add('F_currency', ftCurrency, 0, False); Add('F_integer', ftInteger, 0, False); Add('F_word', ftWord, 0, False); Add('F_fixchar', ftFixedchar, 30, False); Add('F_varbin', ftString, 25, False); Add('F_blob', ftBlob, 60, False); end; with PvTable1.FieldDefs.AddFieldDef do begin Name := 'F_BCD'; DataType := ftBCD; Size :=2; //桁数 Precision := 10; //小数位 Required := false; end; with PvTable1.IndexDefs do begin Clear; Add('Index1', 'F_autoinc', [ixPrimary, ixUnique]); Add('Index2', 'F_integer', [ixCaseInsensitive]); end; PvTable1.CreateTable;
PvTable1->DatabaseName="TestData"; PvTable1->TableName="Test1"; PvTable1->FieldDefs->Clear(); PvTable1->FieldDefs->Add("F_autoinc", ftAutoInc, 0, True); PvTable1->FieldDefs->Add("F_integer", ftInteger, 0, False); PvTable1->FieldDefs->Add("F_Curr", ftCurrency, 0, False); PvTable1->FieldDefs->Add("F_Word", ftWord, 0, False); PvTable1->FieldDefs->Add("F_fixchar", ftFixedChar, 0, False); PvTable1->FieldDefs->Add("F_String", ftString, 20, False); PvTable1->FieldDefs->Add("F_blob", ftBlob, 60, False); TFieldDef *FieldDef = PvTable1->FieldDefs- >AddFieldDef(); FieldDef->Name="F_BCD"; FieldDef->DataType=ftBCD; FieldDef->Size=2; FieldDef->Precision=10; FieldDef->Required=False; PvTable1->IndexDefs->Clear(); PvTable1->IndexDefs-> Add("Index1","F_autoinc",TIndexOptions() <<ixPrimary << ixUnique); PvTable1->CreateTable();
次の表は、VCL から Btrieve へのデータ型のマッピングを示しています。
メモ
バイナリ フラグは X$Fields.Xe$Flags のフラグを指します。
Pervasive 固有のテーブル作成メソッド(TPvTable.PvCreateTable)があります。これを使えば、フィールド タイプに関する追加パラメーターを調整することができます。以下の定義があります。
PvFieldDefs でいくつかのパラメーターを調整することができます。
TPvFieldDef = class(TCollectionItem) public FieldNum:integer; BtrType:integer; DrmType:word; ColumnSize:integer; DefaultValue:string; IsColumnCaseInsensitive:boolean; ACS_FileName:string; ACS_Name:string; ACS_ID:string; end;
上記の要素は次のような意味があります。
特定のフィールドを設定しない場合は、0(DrmType、ColumnSize の場合)、-1(BtrType の場合)、False(IsColumnCaseInsensitive の場合)または ''(すべての文字列フィールド)を設定することができます。この場合、デフォルト値を使用します。FieldNum フィールドは必須です。
IsColumnCaseInsensitive、ACS_FileName、ACS_Name および ACS_ID フィールドは互いに排他的になっています。つまり、これらのうち 1 つのみ設定することができます。
Btrieve 動作と一致させるために、インデックス オプションの ixCaseInsensitive は無視されます。
次に PvCreateTable メソッドの使用例を示します。
with PvTable1.FieldDefs do begin Clear; Add('F_AutoInc', ftAutoInc, 0, true); Add('F_Bytes', ftBytes, 10, False); end; PvFieldDefs := TPvFieldDefs.Create(TPvFieldDef); try PvFieldDef := PvFieldDefs.Add(); PvFieldDef.FieldNum := 1; // F_Bytes PvFieldDef.BtrType := 10; PvFieldDef.DrmType := DRM_coltypVarText; PvFieldDef.ColumnSize := 20; PvFieldDef.IsColumnCaseInsensitive := true; PvTable1.PvCreateTable(PvFieldDefs); finally PvFieldDefs.Free(); end;
|