Direct Access Components (PDAC) Guide (v11)

Btrieve (トランザクショナル)インターフェイス コンポーネント

Btrieve コンポーネントのセットには以下のものが含まれています。

これらのコンポーネントでは、リレーショナル機能を使用しておらず、実行時に Pervasive PSQL リレーショナル インターフェイスまたは ODBC を必要としません。

コンポーネントは、次の表に示すように Embarcadero のコンポーネントに置き換わります。

Pervasive Direct Access Components
置き換える Embarcadero コンポーネント
TPvBatchMove
TBatchMove
TPvDatabase
TDatabase
TPvSession
TSession
TPvTable、TwwPvTable
TTable

これらのコンポーネントはスタンドアロン(つまり、Borland Database Engine(BDE)なし)で使用することができます。また、単一アプリケーション内で BDE と同時に使用することもできます。コンポーネントの使用法は対応する BDE コンポーネントと同じです。例外については、適用可能な特定のコンポーネント下、および PDAC クラス、プロパティ、イベント、およびメソッドに記載されています。

TPvSession

スレッドに対する安全性とクライアント ID のサポートを提供します。この機能は、TSession VCL コンポーネントと類似しています。

関連情報

TPvSession については、本章の以下のセクションを参照してください。

TPvDatabase

ログイン コントロール、トランザクション サポート、データベース接続持続性などの、非 SQL データベースのための接続に特化した機能を提供します。この機能は、TDatabase VCL コンポーネントと類似しています。

TPvDatabase と Embarcadero のコンポーネントの機能の相違点

セキュリティで保護されたテーブル、およびユーザー名とパスワードの入力要求

セキュリティで保護されたテーブルに接続しようとすると、PDAC にユーザー名とパスワードの入力を求められます。このようなプロンプトが表示されないようにしたい場合は、次のコードを例として用いて、TPvDatabase で接続パラメーターを設定します。(TPvTableテーブル セキュリティも参照してください。)

   PvSession.ServerName:='ServerName'; 
   PvSession.SessionName:='session1'; 
   PvSession.Active:=True; 
 
   PvDatabase.AliasName:= 'DatabaseName'; 
   PvDatabase.DatabaseName:='DB'; 
   PvDatabase.SessionName:='session1'; 
   PvDatabase.Params.Clear(); 
 
// ここでユーザー名とパスワードを指定して  
// データベースに接続する 
 
   PvDatabase.Params.Add('User Name=UserName'); 
   PvDatabase.Params.Add('password=Password'); 
   PvDatabase.Connected:=True; 
   PvTable.DatabaseName:='DB'; 
   PvTable.SessionName:='session1'; 
   PvTable.TableName:='person'; 
   PvTable.Active:=True; 

関連情報

TPvDatabase については、本章の以下のセクションを参照してください。

TPvTable

シングル テーブル アクセスと操作を提供します。この機能は、TTable VCL コンポーネントと類似しています。

TPvTable と Embarcadero のコンポーネントの機能の相違点

テーブル セキュリティ

Btrieve インターフェイス用の PDAC セキュリティは、個々のテーブルのオーナー ネームを使用します。このセキュリティ モデルを使用する場合は、テーブルのオーナー ネームを提供します。詳細については、『Btrieve API Guide』の Btrieve オペレーション 29 の 「Set Owner(29)」を参照してください。

TPvTable には Owner: string プロパティと次のメソッドがあります。

SetOwnerOnTable(AOwner: string; AccessMode: integer)  

Owner プロパティを使用すれば、オーナー ネームを設定することができます。SetOwnerOnTable メソッドを使用すれば、テーブルのオーナー ネームを設定したりクリアしたりすることができます。

表 3 PDAC アクセス モード
コード
説明
0
すべてのアクセス モードでオーナー ネームが必要(データ暗号化なし)
1
読み取り専用アクセスにはオーナー ネームは必要なし(データ暗号化なし)
2
すべてのアクセス モードでオーナー ネームが必要(データ暗号化あり)
3
読み取り専用アクセスにはオーナー ネームは必要なし(データ暗号化あり)

Btrieve テーブルにアクセスするには、有効なオーナー ネームを提供します。

テーブルの作成

実行時に 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();  

関連情報

TPvTable については、本章の以下のセクションを参照してください。

TPvBatchMove

アプリケーションの、レコードのグループあるいはテーブル全体へのデータベース オペレーションを可能にします。この機能は、TBatchMove VCL コンポーネントと類似しています。

関連情報

TPvTable については、本章の以下のセクションを参照してください。

TwwPvTable

InfoPower 互換性のために PDAC に含まれています。TPvTable から直接派生され、ControlType という追加のプロパティを持ちます。


Direct Access Components リファレンス

リレーショナル インターフェイス コンポーネント