OLE DB Provider Guide (v11)

プログラミング上の注意 (OLE DB プロバイダー)

次のセクションでは、Pervasive OLE DB プロバイダーに関する注意事項を述べます。

更新の表示

adCmdTableDirect を使ってテーブルに行った更新は、コマンドベースのレコードセットから見ることができます。

たとえば、次のように連続したイベントがあるとします。

このような状況では、トランザクショナル方式で行った更新は SQL クエリに表示されます。

UNC パスまたはマップされたドライブを使う OLE DB プロバイダーの使用

ここでは、接続文字列内で Pervasive OLE DB プロバイダーを使用し、マップされたドライブまたは UNC パスを Data Source 部分に指定したときに起こる状況について説明します。たとえば、次のようにします。

Provider=PervasiveOLEDB;Data Source=¥¥servername¥path 

以前のバージョンのプロバイダーでは、この接続文字列が自動的に正しいデータベース名に解決されました。現在のプロバイダーを使用すると、この設定でアクセス権の問題が発生する可能性があります。接続文字列内で新しい Location パラメーターを使用する場合は、アクセス権の問題は発生しません。Location パラメーターの詳細については、リモート接続 (OLE DB プロバイダー)を参照してください。

クライアントがサーバーに接続しようとしたときに、そのクライアントのデータ ソースが UNC パスの場合、プロバイダーはそのパスをデータベース名とサーバー名に解決しなければなりません。OLE DB プロバイダーがこの情報を取得するには、クライアントのユーザー アカウントにそのサーバーの管理者または Power User の権限がなければいけません。

多くの構成において、クライアントのユーザー アカウントにはこれらの必要なアクセス権がない場合があります。クライアントが必要な権限を持っていない場合、OLE DB プロバイダーでは図 4 のようなダイアログを表示します。ユーザーはこのダイアログでデータベース名とサーバー名を入力することができます。

図 4 データベース名とサーバー名を解決するダイアログ

上記の設定をレジストリに保存しますか?]のチェックをオンにすると、そのエントリは Windows レジストリに保存されるので、ここで参照した UNC またはマップされたドライブの場所を対象とするダイアログ(図 4)はそれ以降表示されません。その代わりに、データベース名はレジストリを使って解決され、これによりパフォーマンスが向上します。使用されるレジストリの場所は次のとおりです。

SOFTWARE¥Pervasive Software¥OLEDB¥Connections 

開発者がこのダイアログをエンド ユーザーに見せないようにする場合は、Windows のレジストリに必要な情報を入力することができます。上記のキーの下位に次の書式で入力します。

名前
データへの UNC パス
サーバー名;データベース名

たとえば、次のようにします。

名前
¥¥myserver¥c¥pvsw¥demodata
myserver;demodata

必要であれば、同じデータベース名を指す複数の UNC エントリを持つことができます。

ADO Refresh メソッドのサポート例

以下に、パラメーター クエリとストアド プロシージャを使用した ADO Refresh メソッドの例を示します。

パラメーター クエリを使用した例

connstr = "Provider=PervasiveOLEDB;Data Source=Demodata" 
cn.Open connstr 
cmd.ActiveConnection = cn 
cmd.CommandType = adCmdText 
cmd.CommandText = "Select  * From Room where 
Building_Name = ?" 
'パラメーターを最新の情報に更新 
cmd.Parameters.Refresh 
cmd.Parameters(0).Value = "Bartold Building" 
cmd.Execute 

ストアド プロシージャを使用した例

connstr = "Provider=PervasiveOLEDB;Data Source=Demodata" 
cn.Open connstr 
 
'ストアド プロシージャの呼び出し 
cmd.ActiveConnection = cn 
cmd.CommandText = "PROCOUT" 
cmd.CommandType = adCmdStoredProc 
cmd.Parameters.Refresh 
cmd.Execute 
Debug.Print cmd.Parameters(0).Value 

静的カーソルでの Seek

静的カーソルで Seek を使用するには、結果セットを開く前にインデックスを設定しておく必要があります。たとえば、次のようにします。

Dim rs AsNew ADODB.Recordset 
rs.Index = "segment" 
rs.Open "Simple",  
  "Provider=PervasiveOLEDB;Data Source=MyData", 
  adOpenStatic, adLockOptimistic, adCmdTableDirect 
rs.Seek Array(2, 9) 
rs.Close 

リモート接続

Pervasive の OLE DB プロバイダーは、リモート接続を作成することはできません。つまり、接続文字列内でリモート サーバーを設定することができません。ただし、同じ機能を実行する代わりの方法があります。

テーブル定義

ITableDefinition は以下の列の作成をサポートしませんが、これはその基盤となる Pervasive PSQL エンジンがサポートしていないためです。

デフォルトのロック タイプ

LockType を指定しないと、カーソルは即時更新モードに設定されます。これにより、いくつかの影響があります。

GetOriginalValue が使用可能かどうかをプログラムで調べるには、"Supports" メソッドの引数として adUpdateBatch を使用する必要があります。たとえば、次のようにします。

if rs.Supports(adUpdateBatch) then 
    someValue = rs.fields(iCol).OriginalValue 
end if 

初期化プロパティ

次の表は、OLE DB の初期化で Pervasive がサポートするプロパティと、それに対応する接続文字列識別子の一覧です。

表 3 接続文字列識別子
接続文字列識別子
プロパティ
Cache Authentication
DBPROP_AUTH_CACHE_AUTHINFO
Connect Timeout
DBPROP_INIT_TIMEOUT
Data Source
DBPROP_INIT_DATASOURCE
Encrypt Password
DBPROP_AUTH_ENCRYPT_PASSWORD
Locale Identifier
DBPROP_INIT_LCID
Location
DBPROP_INIT_LOCATION
Password
DBPROP_AUTH_PASSWORD
Persist Encrypted
DBPROP_AUTH_PERSIST_ENCRYPTED
Persist Security Info
DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO
User ID
DBPROP_AUTH_USERID

以下のプロパティを設定することもできます。


排他的カーソル (OLE DB プロバイダー)

COM+ サービスのサポート (OLE DB プロバイダー)