|
次のセクションでは、Pervasive OLE DB プロバイダーに関する注意事項を述べます。
adCmdTableDirect を使ってテーブルに行った更新は、コマンドベースのレコードセットから見ることができます。
たとえば、次のように連続したイベントがあるとします。
このような状況では、トランザクショナル方式で行った更新は SQL クエリに表示されます。
ここでは、接続文字列内で Pervasive OLE DB プロバイダーを使用し、マップされたドライブまたは UNC パスを Data Source 部分に指定したときに起こる状況について説明します。たとえば、次のようにします。
以前のバージョンのプロバイダーでは、この接続文字列が自動的に正しいデータベース名に解決されました。現在のプロバイダーを使用すると、この設定でアクセス権の問題が発生する可能性があります。接続文字列内で新しい Location パラメーターを使用する場合は、アクセス権の問題は発生しません。Location パラメーターの詳細については、リモート接続 (OLE DB プロバイダー)を参照してください。
クライアントがサーバーに接続しようとしたときに、そのクライアントのデータ ソースが UNC パスの場合、プロバイダーはそのパスをデータベース名とサーバー名に解決しなければなりません。OLE DB プロバイダーがこの情報を取得するには、クライアントのユーザー アカウントにそのサーバーの管理者または Power User の権限がなければいけません。
多くの構成において、クライアントのユーザー アカウントにはこれらの必要なアクセス権がない場合があります。クライアントが必要な権限を持っていない場合、OLE DB プロバイダーでは図 4 のようなダイアログを表示します。ユーザーはこのダイアログでデータベース名とサーバー名を入力することができます。
[上記の設定をレジストリに保存しますか?]のチェックをオンにすると、そのエントリは Windows レジストリに保存されるので、ここで参照した UNC またはマップされたドライブの場所を対象とするダイアログ(図 4)はそれ以降表示されません。その代わりに、データベース名はレジストリを使って解決され、これによりパフォーマンスが向上します。使用されるレジストリの場所は次のとおりです。
開発者がこのダイアログをエンド ユーザーに見せないようにする場合は、Windows のレジストリに必要な情報を入力することができます。上記のキーの下位に次の書式で入力します。
たとえば、次のようにします。
必要であれば、同じデータベース名を指す複数の UNC エントリを持つことができます。
以下に、パラメーター クエリとストアド プロシージャを使用した 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 を使用するには、結果セットを開く前にインデックスを設定しておく必要があります。たとえば、次のようにします。
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 を使用する必要があります。たとえば、次のようにします。
次の表は、OLE DB の初期化で Pervasive がサポートするプロパティと、それに対応する接続文字列識別子の一覧です。
以下のプロパティを設定することもできます。
|