Direct Access Components (PDAC) Guide (v11)

Pervasive PSQL および Embarcadero のデータ型 (PDAC)

このセクションでは、データ型のマッピングについて詳しく説明します。

Pervasive PSQL および Embarcadero のデータ型のマッピング

次の表は、Pervasive PSQL の列のデータ型から Delphi のデータ型へのマッピングを示しています。Pervasive PSQL データベースに格納されている左側のデータ型は、PDAC コンポーネントにより、右側に記載されているデータ型で表されます。

表 2 Pervasive PSQL から Embarcadero Delphi へのデータ型のマッピング
Pervasive PSQLデータ型
Delphi データ型
BigInt
ftBCD
Binary
ftBytes
Bit
ftBoolean
Char
ftString
Currency
ftCurrency
Date
ftDate
Decimal
ftBCD
Double
ftFloat
Float
ftFloat
Identity
ftAutoInc
Integer
ftInteger
Longvarbinary
ftBlob
Longvarchar
ftMemo
Numeric
ftBCD
Real
ftFloat
Smallidentity
ftAutoInc
Smallint
ftSmallInteger
Time
ftTime
TimeStamp
ftDateTime
Tinyint
ftSmallInteger
Ubigint
ftBCD
Uint
ftInteger
Usmallint
ftWord
Utinyint
ftWord
Varbinary
ftVarBytes
Varchar
ftString

次の表は、Delphi データ型から Pervasive PSQL データ型へのマッピングを示しています。PDAC を使って新しいデータベース テーブルが作成されると、左側の列に示されるフィールドのデータ型として定義された列が、Pervasive PSQL によって、右側に示されるデータ型で保存されます。

表 3 Embarcadero Delphi から Pervasive PSQL へのデータ型のマッピング
Delphi データ型
Pervasive PSQLデータ型
ftAutoInc
Identity
ftBCD
Numeric
ftBlob,
Longvarbinary
ftBoolean
Bit
ftBytes
Binary
ftCurrency
Currency
ftDate
Date
ftDateTime
DateTime
ftFixedChar
Char
ftFloat
Double
ftFmtMemo
LongVarChar
ftGraphic
Blob
ftInteger
Integer
ftLargeInt
BigInt
ftMemo
Longvarchar
ftSmallInteger
Smallint
ftString
Varchar
ftTime
Time
ftTypedBinary
Binary
ftVarBytes
VarChar
ftWord
Smallint

Btrieve および Embarcadero のデータ型のマッピング

次の表は、Btrieve から VCLへのデータ型のマッピングを示しています。


メモ

バイナリ フラグは X$Fields.Xe$Flags のフラグを指します。


表 4 Btrieve から VCL へのデータ型のマッピング
Btrieve データ型
バイナリ フラグ
長さ(バイト単位)
VCL データ型
AUTOINCREMENT (15)
 
 
ftAutoInc
BFLOAT(9)
 
 
ftFloat
BIT (16)
 
 
ftBoolean
BLOB (21)
+
 
ftBlob
BLOB (21)
-
 
ftMemo
CURRENCY (19)
 
 
ftBCD
DATE (3)
 
 
ftDate
DECIMAL (5)
 
 
ftBCD
FLOAT (2)
 
 
ftFloat
INTEGER(1)
 
1
ftSmallint
INTEGER(1)
 
2
ftSmallint
INTEGER(1)
 
4
ftInteger
INTEGER(1)
 
8
ftBCD
LOGICAL(7)
 
1
ftBoolean
LOGICAL(7)
 
2
ftSmallint
LSTRING (10)
+
 
ftVarBytes
LSTRING (10)
-
 
ftString
LVAR (13)
+
 
ftBCD
LVAR (13)
-
 
ftMemo
MONEY (6)
 
 
ftBCD
NOTE (12)
+
 
ftBlob
NOTE (12)
-
 
ftMemo
NUMERIC (8)
 
 
ftBCD
NUMERICSA (18)
 
 
ftBCD
NUMERICSTS (17)
 
 
ftBCD
STRING (0)
+
 
ftBytes
STRING (0)
-
 
ftString
TIME (4)
 
 
ftTime
TIMESTAMP (20)
 
 
ftDateTime
UNSIGNED BINARY (14)
 
1
ftWord
UNSIGNED BINARY (14)
 
2
ftWord
UNSIGNED BINARY (14)
 
4
ftInteger
UNSIGNED BINARY (14)
 
8
ftBCD
ZSTRING (11)
 
 
ftString

TpvTable を使ったテーブルの作成に関する追加情報

実行時に CreateTable メソッドを呼び出し、このデータセットの現在の定義を使用してテーブルを作成します。

FieldDefs プロパティに値がある場合は、これらの値を使ってフィールド定義を作成します。値がない場合は、Fields プロパティを使用します。データセットを再作成するには、これらのプロパティの一方または両方に値がなければなりません。

Add メソッドを使用してフィールドのプロパティを割り当てます。

procedure Add(const Name:string; DataType:TFieldType; 
Size:Word; Required:Boolean); 

Add メソッドは以前のバージョンとの互換性を保つために提供されます。新しいフィールド定義を Item プロパティの配列に追加する場合は、AddFieldDef メソッドを使用することをお勧めします。また、これを使って ftBCD データ型の小数位と桁数も指定します。

Add メソッドは、Name、DataType、Size および Required パラメーターに渡された値を使用し、これらを新しいフィールド定義オブジェクトの個別のプロパティに割り当てます。


メモ

フィールドがヌル値を許可する場合、Required に False を設定します。

AutoInc フィールドで autoincrement プロパティをアクティブにするには、このフィールドに固有のインデックスを作成します。


Delphi のコード例

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; 

C++ Builder のコード例

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 へのデータ型のマッピングを示しています。

表 5 VCL から Btrieve へのデータ型のマッピング
VCL データ型
Btrieve 型
バイナリ フラグ
長さ(バイト単位)
ftAutoInc
AUTOINCREMENT (15)
 
4
ftBCD
NUMERIC (8)
 
 
ftBlob
BLOB (21)
+
FieldDefs[].Size
ftBoolean
LOGICAL(7)
 
1
ftBytes
STRING (0)
+
FieldDefs[].Size
ftCurrency
CURRENCY (19)
 
 
ftDate
DATE (3)
 
 
ftDateTime
TIMESTAMP (20)
 
 
ftFixedChar
STRING (0)
-
FieldDefs[].Size
ftFloat
FLOAT (2)
 
8
ftFmtMemo
BLOB (21)
-
FieldDefs[].Size
ftGraphic
BLOB (21)
+
FieldDefs[].Size
ftInteger
INTEGER(1)
 
4
ftLargeint
INTEGER(1)
 
8
ftMemo
BLOB (21)
-
FieldDefs[].Size
ftSmallint
INTEGER(1)
 
2
ftString
ZSTRING (11)
-
FieldDefs[].Size
ftTime
TIME (4)
 
 
ftTypedBynary
STRING (0)
+
FieldDefs[].Size
ftVarBytes
LSTRING (10)
+
FieldDefs[].Size
ftWord
UNSIGNED BINARY (14)
 
2


メモ

バイナリ フラグは X$Fields.Xe$Flags のフラグを指します。


フィールド タイプの追加情報

Pervasive 固有のテーブル作成メソッド(TPvTable.PvCreateTable)があります。これを使えば、フィールド タイプに関する追加パラメーターを調整することができます。以下の定義があります。

Procedure PvCreateTable(PvFieldDefs:TPvFieldDefs) 

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; 

PDAC クラス、プロパティ、イベント、およびメソッド