 |
Direct Access Components (PDAC) Guide (v11) |
 |
|
Pervasive PSQL および Embarcadero のデータ型 (PDAC)
このセクションでは、データ型のマッピングについて詳しく説明します。
Pervasive PSQL および Embarcadero のデータ型のマッピング
次の表は、Pervasive PSQL の列のデータ型から Delphi のデータ型へのマッピングを示しています。Pervasive PSQL データベースに格納されている左側のデータ型は、PDAC コンポーネントにより、右側に記載されているデータ型で表されます。
表 4 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 によって、右側に示されるデータ型で保存されます。
表 5 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 のフラグを指します。
表 6 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
|
次の表は、VCL から Btrieve へのデータ型のマッピングを示しています。
表 7 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;
上記の要素は次のような意味があります。
- FieldNum - 主 FieldDefs 内のフィールド番号。
- BtrType - Btrieve 型。
- DrmType - データ レコード マネージャー型。開発者はこのフィールドを使う必要はありません。TPvBatchMove で使用する場合のみ追加されます。
- ColumnSize - 列のサイズ(バイト単位)。
- DefaultValue - 列のデフォルト値(文字列)。
- IsColumnCaseInsensitive - フィールドのインデックスで大文字と小文字を区別する場合、True を設定します。
- ACS_FileName - 拡張子 .alt を付けない ACS データでファイル名を設定します。
- ACS_Name - ACS データの名前を設定します。
- ACS_ID - ACS データの ID を設定します。
特定のフィールドを設定しない場合は、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 クラス、プロパティ、イベント、およびメソッド |
 |
|