Direct Access Components リファレンス
 
このページをシェアする                  
Direct Access Components リファレンス
Pervasive Direct Access Components の実装情報の詳細
この章では、Delphi および C++ Builder で使用する Pervasive Direct Access Components について説明します。以下の項目が含まれます。
PDAC クラス、プロパティ、イベント、およびメソッド
Pervasive PSQL および Embarcadero のデータ型
PDAC クラス、プロパティ、イベント、およびメソッド
ここでは、Pervasive Direct Access Components のすべてのクラス、プロパティ、イベント、およびメソッドの一覧を示します。Pascal 表記法で記載し、対応する Embarcadero のコンポーネントとの相違点も示しています。
例外クラス
サポート クラス
VCL との全般的な違い
VCL と異なる特定のクラス
Pervasive PSQL および Embarcadero のデータ型のマッピング
Btrieve および Embarcadero のデータ型のマッピング
例外クラス
EpvDatabaseError クラス
このクラスは PDAC のすべての例外クラスの上位クラスです。これには例外を生成するクラスへの参照が含まれる Owner プロパティがあります。
EPvDBEngineError クラス
これは、クラスに関連するすべての DB エンジン エラーの抽象ベースのクラスです。Errors プロパティでは(TPvDBError クラスから派生するクラスの)エラーを一覧表示し、ErrorCount プロパティは Errors プロパティに含まれるエラーの総数を示します。
TPvDBError クラス
TPvDBError は、EPvDBEngineError 例外クラスのデータベース エンジン エラーを表すすべてのクラスに関する抽象ベースのクラスです。以下のプロパティがあります。
Message プロパティは、エラー メッセージのテキストを指定します。
NativeError プロパティは、エンジンから返されるステータス コード(Btrieve ステータス コード)を示します。
EpvDrmEngineError クラス
このクラスの例外は PDAC の Btrieve サブセットによって発生します。ErrorCode プロパティは DRM エラー コードです。EPvDrmEngineError の Errors プロパティの配列には TpvDrmError タイプのオブジェクトが含まれます。
TpvDrmError クラス
TPvDrmError クラスは DRM エラーを示します。ErrorCode には DRM エラー コードが含まれ、NativeError には Btrieve ステータス コードが含まれます。
EpvSqlEngineError クラス
このクラスの例外は PDAC の SQL(リレーショナル)サブセットによって発生します。ErrorCode プロパティは最後の ODBC 呼び出しの戻り値です。EPvSqlEngineError の Errors プロパティの配列には TPvSqlError タイプのオブジェクトが含まれます。
TpvSqlError クラス
TPvSqlError クラスは ODBC エラーを示します。
EpvDbAdminEngineError クラス
このクラスの例外は、ローカル サーバーおよびリモート サーバー上で、TPvSqlSession.AddAlias などのデータベース名や DSN 管理関数の実行中に発生します。追加のプロパティ ErrorType: TpvDbAdminEngineErrorTypes があります。ErrorType = dbmeDTI の場合、NativeError には DTI(Distributed Tuning Interface)エラー コードが含まれます。それ以外の場合、NativeError にはデータベース名および DSN 関連の関数のローカル エラー コードが含まれます(EPvSqlInstallerEngineError および EpvOwnSqlInstallerEngineError を参照)。
EpvSqlInstallerEngineError クラス
このクラスの例外は、ローカル サーバー上で、TPvSqlSession.AddAlias などの DSN 管理関数の実行中(TPvSqlSession.ServerName プロパティが空またはローカル サーバーの名前が設定されていた場合)に発生します。Errors には、SQLInstallerError() 関数で返される値が含まれます。
EpvOwnSqlInstallerEngineError クラス
DSN 管理関数では適切なエラーがない場合があるので、このクラスの例外を発生して新しいタイプのエラーを示すことができます。NativeError の可能な値は以下のとおりです。
cPvOwnSqlInstallerEngineErrorDsnAlreadyExist - ユーザーは既に存在する DSN を作成しようとしました。
cPvOwnSqlInstallerEngineErrorDsnNotFound - ユーザーは存在しない DSN を削除しようとしました。
cPvOwnSqlInstallerEngineErrorInvalidOpenMode - prmOPEN_MODE('OPEN_MODE')パラメーターの値が無効です。詳細については、後述の prmOPEN_MODE の説明を参照してください。
cPvOwnSqlInstallerEngineErrorClientDSNsAreNotSupported - クライアント DSN はリモート サーバー モード(TPvSqlSession.ServerName が空)でサポートされていません。
サポート クラス
サポート クラスは、高レベルのコンポーネントとカプセル化した BDE 固有の機能で必要となります。これらのクラスは、可能な限り少ない変更で PDAC に 複製されています。
TPvSessionList/TpvSqlSessionList クラス
TPvSessionList および TPvSqlSessionList クラスは、複数のセッションを提供するアプリケーション内のセッション コンポーネントを管理します。このクラスでは、含まれるオブジェクトのタイプのみ(TSession に対応する TPvSession または TPvSqlSession)が変更されています。
TPvBlobStream/TPvSQLBlobStream クラス
TPvBlobStream および TPvSQLBlobStream クラスは、BLOB(バイナリ ラージ オブジェクト)フィールドを示すフィールド オブジェクトをアプリケーションで読み書きできるようにするストリーム オブジェクトです。これらは TBlobStream VCL クラスと同様に機能します。
TParam/TParams クラス
TParam クラスはフィールド パラメータを表します。TParam のプロパティはフィールドの値を示すパラメーターの値を設定するのに使用します。TParams は TParam オブジェクトのリストです。PDAC の TParam と TParams ではそれぞれのインターフェイス セクションの変更はありません。これらは新しいファイルに移動するだけです。
TMasterDataLink クラス
メモ: Delphi/C++Builder 3 および 4 用のみです。
TMasterDataLink を使用すれば、データセットでマスター/詳細関係を設定することができます。このインターフェイス セクションでの変更はありません。新しいファイルに移動するだけです。
VCL との全般的な違い
PDAC コンポーネントで公開するインターフェイスは、BDE で動作する適切な VCL コンポーネントとほぼ一致しています。VCL コンポーネントに関する詳細情報は、Delphi/C++Builder ヘルプ システム(del?vcl.hlp または bcbvcl?.hlp ファイルで、「?」 は "3"、"4" または "5" を示します)を参照してください。ただし、BDE のいくつかの機能は Pervasive PSQL に存在せず、また Pervasive PSQL のいくつかの機能は BDE に存在しないので、Pervasive ではこれらのインターフェイス(削除または追加プロパティ/メソッド/イベント)を修正しました。これらの変更されたインターフェイスのみを以下に列挙します。その他すべてのインターフェイスは同一です。
グローバル変数
BDE の Session および Sessions グローバル変数の代わりに、PDAC では独自のグローバル変数があります。Btrieve サブセット用に BtvSession: TPvSession と BtvSessions: TPvSessionList があり、リレーショナル サブセット用に PvSqlSession: TPvSqlSession と PvSqlSessions: TPvSqlSessionList があります。これらは、Session や Sessions 変数と同様に動作し、アプリケーションの開始時に自動的に作成され、終了時に自動的に破棄されます。
Btrieve サブセット
トランザクショナル サブセットの場合、PDAC では Pervasive PSQL の「名前付きデータベース」をエイリアスとして使用します。
SQL サブセット
リレーショナル サブセットの場合、PDAC ではデータ ソース名(DSN)をエイリアスとして使用します。
VCL と異なる特定のクラス
以下のセクションでは、Embarcadero VCL とは異なるクラスを個別に説明します。
TPvSession と TPvSqlSession
TPvSession に関する注記
TPvSqlSession に関する注記
TPvDatabase と TPvSqlDatabase
TPvDatabase に関する注記
TPvSqlDatabase に関する注記
TPvTable、TPvQuery および TPvStoredProc
TPvQuery および TPvStoredProc に関する注記
TPvQuery に関する注記
TPvStoredProc に関する注記
TPvUpdateSQL
TPvBatchMove
TPvSession と TPvSqlSession
TraceFlags プロパティは削除されました。これは、Pervasive PSQL API 呼び出しのトレースは外部ユーティリティまたは DTI(Distributed Tuning Interface)を使って実行されるからです。
Pervasive PSQL は以下のプロパティを使用しません(これらは文字列の格納としてのみ存在します)。
NetFileDir
PrivateDir
Locale プロパティは削除されました。Pervasive PSQL にはこの BDE 固有の機能に類似する機能がないからです。
Pervasive PSQL には「ドライバー」がありません。ドライバーに関するすべてのインターフェイス項目(AddDriver、DeleteDriver、GetAliasDriverName、GetDriverNames、GetDriverParams および ModifyDriver メソッド)は削除されました。
パスワード関連のインターフェイスのみを保存し、文字列を取得します(AddPassword、RemovePassword および RemoveAllPasswords)。OnPassword イベントは、GetPassword メソッド以外では発生しません。
GetConfigParams メソッドでは何も行いません。
新たに公開される ServerName、ServerAdminUser、ServerAdminPassword および ServerAdminLoginPrompt プロパティが追加されました。これらは、リモート サーバーへの接続方法を提供します。ServerAdminUser と ServerAdminPassword は DTI(Distributed Tuning Interface)のユーザー名とパスワードです。
ヒント: 詳細については、DTI のマニュアルを参照してください。
ServerAdminLoginPrompt プロパティは TPv(Sql)Database.LoginPrompt の相似型ですが、設計時に ServerAdminLoginPrompt = False とし、サーバーからデータベース名のリストを取得する際に問題が発生した場合、ログイン試行が失敗した後にユーザー名とパスワードが要求される点が異なります。
ヒント: DTI は Pervasive.SQL 2000 以降でのみサポートされます。
LocalSystem パブリック プロパティ。このプロパティに、リモート サーバーの場合は False、ローカルの場合は True を設定します。
TPvSession に関する注記
すべてのエイリアス管理機能は PDAC の名前付きデータベース管理を実行します。TPvSession を使用して、ローカルおよびリモート データベース名の作成、またローカルおよびリモート データベース名用のパラメーターの取得を行うことができます。サーバー上のデータベースとの接続を確立する場合、ユーザーはサーバー上のデータベースへのパスを使ってデータベース名を作成する必要があります。開発者は最初に以下の値を使用することができます。
prmDDF_PATH ('DDF_PATH') - データ辞書ファイルへのパス。
prmPATH ('PATH') - データ ファイルへのパス。
prmBOUND ('BOUND') - データベースをバインドするかどうか。デフォルトは False です。
prmINTEGRITY ('INTEGRITY') - データベースに参照整合制約を設定するかどうか。デフォルトは True です。
prmCREATE_DDF ('CREATE_DDF') - このパラメーターが True の場合、空のデータベースが作成されます。
AddStandardAlias メソッドでは、INTEGRITY = True、BOUND = False という標準の設定でデータベース名を追加します。
Handle プロパティのタイプは DRM_SESID に変更されました。
例:データベース名の作成
var MyList:TStringList;
begin
MyList := TStringList.Create;
try
with MyList do
begin
Add('DDF_PATH=D:\MyDemoData');
Add('PATH=D:\MyDemodata');
Add('BOUND=False');
Add('INTEGRITY=False');
Add('Create_DDF=False');
end;
PvSession1.AddAlias('TestAlias', MyList);
finally
MyList.Free;
end;
TPvSqlSession に関する注記
すべてのエイリアス管理機能で DSN 管理を行います。ユーザーは最初に以下の値を使用することができます。
prmDB_NAME ('DB') - データベースのデータベース名エンジン DSN のみ。
prmDSN_DESCRIPTION ('DESCRIPTION') - DSN の説明。
prmIS_ENGINE_DSN ('IS_ENGINE_DSN') - 指定した DSN が、エンジン DSN(True)あるいはクライアント DSN(False)のどちらなのかを調べます。
prmIS_SYSTEM_DSN ('IS_SYSTEM_DSN') - 指定した DSN が、システム DSN(True)あるいはユーザー DSN(False)のどちらなのかを調べます。
prmOPEN_MODE ('OPEN_MODE') - DSN のオープン モードを調べます。可能な値は、prmOPEN_MODE_normal(ノーマル)、prmOPEN_MODE_accelerated(アクセラレイティド)、prmOPEN_MODE_readonly(リード オンリー)および prmOPEN_MODE_exclusive(エクスクルーシブ)です。エンジン DSN のみ。
prmSERVER_NAME ('SERVER_NAME') - データが存在するサーバーのアドレスまたはホスト名、およびデータポート番号。クライアント DSN のみ。
prmTCP_PORT ('TCP_PORT') - サーバーの TCP ポート。クライアント DSN のみ。
prmSERVER_DSN ('SERVER_DSN') - サーバーのエンジン DSN の名前。クライアント DSN のみ。
prmTRANSPORT_HINT ('TRANSPORT_HINT') - 転送プロトコルが含まれます。クライアント DSN のみ。可能な値は、"TCP"、"SPX"、"TCP:SPX" または "SPX:TCP" です。
prmARRAY_FETCH_ON ('ARRAY_FETCH_ON') - 配列のフェッチを有効/無効(True/False)にします。クライアント DSN のみ。
prmARRAY_BUFFER_SIZE ('ARRAY_BUFFER_SIZE') - 配列バッファーのサイズ。1 KB から 64KB までの値を受け付けることができます。クライアント DSN のみ。
Handle プロパティのタイプは SQLHENV に変更されました。
リモート DSN 管理は、Pervasive.SQL 2000 SP2a またはそれ以降でのみサポートされます。リモート クライアントとユーザー DSN はサポートされません。
AddStandardAlias メソッドではデフォルトの設定でエンジン DSN を追加します。2 番目のパラメーターはデータベース名です。
UpdateDsnType: TDsnTypes プロパティが追加されています。TDsnTypes =(dsnSystem、dsnUser)。UpdateDsnType の意味は次のとおりです。
DeleteAlias 関数の場合、DSN ユーザーがSystem または User DSN のどちらを削除するのかを示します。
AddAlias および GetAliasParameters 関数の場合、どの DSN タイプにするのかを示します。
以下はシステム クライアント DSN を作成するサンプル プログラムです。
var MyStringList:TStringList;
begin
MyStringList := TStringList.Create;
try
MyStringList.Clear();
MyStringList.Add('IS_ENGINE_DSN=False');
MyStringList.Add('IS_SYSTEM_DSN=True');
MyStringList.Add('SERVER_NAME=ServerName');
MyStringList.Add('SERVER_DSN=DEMO1');
// サーバーの DSN
PvSqlSession1.AddAlias('ATest', MyStringList);
finally
MyStringList.Free;
end;
TPvDatabase と TPvSqlDatabase
ODBCPacketSize プロパティは SQLUINTEGER 値で、ネットワーク パッケージのサイズをバイト単位で指定します。これは SQLSetConnectAttr() で、接続について管理する SQL_ATTR_PACKET_SIZE 属性を設定する際に使用します。
ヒント: SQLSetConnectAttr() の詳細については、『Microsoft ODBC Programmer's Reference』を参照してください。
以下のプロパティは削除されました。
DriverName
Locale
TraceFlags
TransIsolation プロパティは 1 つの値(tiReadCommitted)のみを持ちます。これは Pervasive PSQL ではその他の分離レベルをサポートしないからです。
Tables プロパティが追加されました。このプロパティにはデータベース内のテーブルのリストが含まれます。
StoredProcs プロパティが追加されました。このプロパティにはデータベース内のストアド プロシージャのリストが含まれます。
LoginPromptOnlyIfNecessary が追加されました。以下の状況が考えられます。
LoginPrompt=True で、LoginPromptIfNecessary=True。セキュリティで保護されたデータベースの場合にのみ、(ログイン試行の失敗後)ログイン ダイアログが表示されます。これはデフォルトの動作です。
LoginPrompt=True で、LoginPromptIfNecessary=False。ログインを試みる前に必ずログイン ダイアログが表示されます。これは VCL の TDatabase の動作です。セキュリティで保護されたデータベースに最も適しています。ログインする最も速い方法を提供します。
LoginPrompt=False で、LoginPromptIfNecessary=True/False(どちらでもかまいません)。ログイン ダイアログは表示されません。ユーザーが独自のログイン ダイアログを実装できます。
TPvDatabase に関する注記
Handle プロパティは DRM_DBID に変更されました。
IsSQLBased プロパティは常に False です。
ローカル サーバー(つまり、TPvSession.ServerName プロパティの値が空であるか、ローカル サーバーの名前が指定されている場合)の Directory プロパティには、データベースのデータ辞書ファイルへのパスが入ります。リモート サーバーの場合、このプロパティは常に空です。どちらの場合も、これを設定しようとすると例外が発生します。作業しているサーバーがローカルかリモートかを知るには、TPvSession.LocalSystem プロパティで調べることができます。
以下のプロパティには TDRMTableCollection のタイプがあります。
Tables
StoredProcs
IsSecured プロパティ(boolean)が追加されました。これは読み取り専用プロパティです。データベースにセキュリティが設定されている場合は、IsSecured = True です。この場合、TPvTable.Owner プロパティのトランザクショナル データベース エンジン オーナー ネームは無視されるので、ユーザーはデータベースにログインする権限を許可する必要があります。
OEMConversion プロパティが追加されました。
このプロパティは、データベースに格納されている文字は OEM(DOS)コード ページによってエンコードされているため、データベースを使用する前にこれらの文字を ANSI(Windows)コード ページに変換する必要があることを示します。データベースは OEM コード ページのままですが、文字データのすべての読み書きは PDAC で変換されます。
この変換では Windows の OemToCharBuff および CharToOemBuff 関数で提供されるマッピングを使用します。すべての文字が往復変換できるわけではないことに注意することが重要です。OEM と ANSI コード ページの両方に存在する文字のみが更新で保持されます。大まかに言うと、ほとんどのアルファベット文字は保持されますが、ボックス描画文字などその他の種類の文字は保持されません。正確に保持できない文字については、最も類似する文字が選択されます。たとえば、ボックス描画文字はプラス(+)、マイナス(-)、およびパイプ(|)文字に置き換えられます。
現在のところ、ユーザー テーブルに保存されている文字のみが変換されます。テーブル、列、およびファイルの名前などの(DDF ファイルに保存されている)メタデータは変換されません。
TPvSqlDatabase に関する注記
Handle プロパティのタイプは SQLHDBC に変更されました。
IsSQLBased プロパティは常に True です。
Directory プロパティは常に空です。これを設定しようとすると、例外が発生します。
以下のプロパティにはそれぞれ相当する TSqlTablesInfoCollection および TSqlStoredProcInfoCollection タイプがあります。
Tables
StoredProcs
Exclusive プロパティは何も行いません。VCL との互換性を保つためだけに提供されます。
AliasNameIsConnectionString プロパティが追加されました。このプロパティは DSN のない接続を行うために提供されます。AliasNameIsConnectionString=True の場合、AliasName(AliasName が空の場合は DatabaseName)が接続文字列になります。
TPvTable、TPvQuery および TPvStoredProc
TDBDataSet のすべてのプロパティ、メソッド、イベントのタイプは TPvDataSet に変更されたか、または派生しました。
TSession のすべてのプロパティ、メソッド、イベントのタイプは TPvAbsSession に変更されたか、または派生しました。
TDatabase のすべてのプロパティ、メソッド、イベントのタイプは TPvAbsDatabase に変更されたか、または派生しました。
ExpIndex プロパティは常に False です。
以下のプロパティは削除されました。
Locale
DBLocale
ObjectView
TPvDatabase または TPvSqlDatabase タイプで Database プロパティが追加されました。
ConstraintCallBack が削除されました。
CheckOpen メソッドのパラメーター タイプが DRM_ERR に変更されました。
TPvTable に関する注記
Handle プロパティのタイプは DRM_TABLEID に変更されました。
TDBHandle プロパティのタイプは DRM_DBID に変更されました。
Owner プロパティが追加されています。これはテーブルの Btrieve オーナー ネームを表します。
BtrHandle のプロパティ:TBtrieveInfo が追加されています。これは DirectBtrCall 関数のヘルパー プロパティです。TBtrieveInfo には以下のフィールドがあります。
pKeyBuf - キー バッファーへのポインター。
KeyLen - キーの長さ。
KeyNum - キーの番号。
CurFilter - Extended オペレーション用の入力データ バッファー構造体へのポインター(『Btrieve API Guide』の GetNextExtended を参照)。また、このバッファーには現在のフィルターも格納されます。
CurFilterLen - CurFilter バッファーの長さ。CurFilterLen は、開発者が CurFilter データをバッファーからメモリ内の別の場所にコピーするときに利用できます。
DirectBtrCall(Op: Smallint function; pDataBuf: Pointer; var DataLen: Word; pKeyBuf: Pointer; KeyLen: Byte; KeyNum: Shortint): integer が追加されました。開発者は TpvTable の ポジション ブロックを使用して直接 Btrieve を呼び出すことができます。以下のパラメーターがあります。
Op - Btrieve オペレーション。『Btrieve API Guide』を参照してください。
pDataBuf - BTRCALL のデータ バッファー パラメーターと同一
DataLen - BTRCALL のデータ バッファー長パラメーターと同一
pKeyBuf - BTRCALL のキー バッファー パラメーターと同一
KeyLen - キー バッファーの長さ
KeyNum - BTRCALL のキー番号パラメーターと同一
DirectBtrCall は Btrieve ステータス コードを返します。pKeyBuf、KeyLen、および KeyNum パラメーターは PvTable.BtrHandle プロパティから取得する必要があります。
以下に、Btrieve の直接呼び出しによって現在のレコードをロックおよびロック解除する方法を示す小さなサンプルを提供します。
procedure TForm1.Lock(Sender:TObject);
var b:TBookmark;
DataLen:word;
Res:integer;
begin
b := PvTable1.GetBookmark();
try
DataLen := 4;
Res := PvTable1.DirectBtrCall(
B_GET_DIRECT + 300, b, DataLen,
PvTable1.BtrHandle.pKeyBuf,
PvTable1.BtrHandle.KeyLen,
PvTable1.BtrHandle.KeyNum);
finally
PvTable1.FreeBookmark(b);
end;
end
 
procedure TForm1.Unlock(Sender:TObject);
var Res:integer;
vr:Word;
begin
vr := 0;
Res := PvTable1.DirectBtrCall(B_UNLOCK,
@vr, vr, @vr, vr, -2);
end
IndexFiles プロパティは削除されています。
TableType プロパティは削除されています。
TableLevel プロパティは無視されます。
UpdateObject プロパティは削除されています。
以下のメソッドが削除されました。
CloseIndexFile
OpenIndexFile
LockTable
UnlockTable
PvCreateTable(PvFieldDefs: TPvFieldDefs)メソッドが追加されています。このメソッドを使えば、開発者はテーブル作成処理をある程度調整することができます。詳細については、適切なセクションを参照してください。
SetOwnerOnTable(AOwner: string、AccessMode: integer)メソッドが追加されています。開発者はテーブルの Btrieve オーナー ネームを設定することができます。AccessMode には以下の設定が可能です。
B_ACCESS_RWOWNER - すべてのアクセス モードでオーナー ネームが必要(データ暗号化なし)。
B_ACCESS_WOWNER - 読み取り専用アクセスにはオーナー ネームは必要なし(データ暗号化なし)。
B_ACCESS_RWOWNERENCRYPT - すべてのアクセス モードでオーナー ネームが必要(データ暗号化あり)。
B_ACCESS_WOWNERENCRYPT - 読み取り専用アクセスにはオーナー ネームは必要なし(データ暗号化あり)。
TPvQuery および TPvStoredProc に関する注記
Handle プロパティのタイプは SQLHSTMT に変更されました。
DBHandle プロパティのタイプは SQLHDBC に変更されました。
StmtHandle は削除されました。
Text プロパティは常に SQL プロパティからのテキストを返します。
CheckOpen メソッドは削除されました。
インデックスとキーに関連するすべてのプロパティとメソッド(GetIndexInfo など)は削除されました。
TPvQuery に関する注記
以下のプロパティが追加されました。
LoadBlobOnOpen
LoadBlobOnOpen が True のときは、クエリを開く際にすべての BLOB がメモリにキャッシュされます。LoadBlobOnOpen が False のときは、BLOB は必要に応じて読み取られます。
PassThrough
このプロパティを True に設定すると、PDAC では SQL テキストを事前解析(通常、パラメーターをバインドするために行う)しないで直接エンジンに渡します。これは、パラメーターを使ってストアド プロシージャを作成する場合などで必要となります。このプロパティは次のように使用します。
procedure TForm1.Button1Click(Sender:TObject);
begin
PvQuery1.SQL.Clear;
 
PvQuery1.SQL.Add('CREATE PROCEDURE TestPr(IN :A INTEGER) AS');
PvQuery1.SQL.Add('BEGIN');
PvQuery1.SQL.Add('PRINT :A;');
PvQuery1.SQL.Add('END');
PvQuery1.PassThrough := True;
PvQuery1.ExecSQL;
PvQuery1.PassThrough := False;
end;
PassThrough プロパティは IDE 内で設計時にも使用できます。
TPvStoredProc に関する注記
Overload プロパティが削除されました。
TPvUpdateSQL
TQuery プロパティのタイプ(すべてのプロパティ)が TPvQuery で変更されています。
TPvBatchMove
Transliterate プロパティが削除されました。
Destination プロパティのタイプは TPvTable に変更されました。
Pervasive PSQL および Embarcadero のデータ型
このセクションでは、データ型のマッピングについて詳しく説明します。
Pervasive PSQL および Embarcadero のデータ型のマッピング
Btrieve および Embarcadero のデータ型のマッピング
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;
上記の要素は次のような意味があります。
FieldNum - 主 FieldDefs 内のフィールド番号。
BtrType - Btrieve タイプ。
DrmType - DRM タイプ。開発者はこのフィールドを使う必要はありません。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;