OLE DB Provider Guide

Pervasive PSQL v9
OLE DB Provider Guide
An Overview of New Features and Changed Behavior
免責事項
Pervasive Software Inc. は、 本 ソ フ ト ウ ェ アお よ び ド キ ュ メ ン ト の使用を、 利用
者 ま たはその会社に対 し て 「現状の ま ま」 で、 かつ同梱の使用許諾契約書に記
載の契約条件に よ っ てのみ許諾す る も のです。 Pervasive Software Inc. は、 いかな
る 場合に も 本 ソ フ ト ウ ェ アお よ び本マニ ュ アルに記載 さ れた内容に関す る その
他の一切の保証 を、 明示的に も 黙示的に も 行い ま せん。 Pervasive Software Inc.
は、 市場性、 権利、 特定の目的に対す る 適合性、 あ る いは一連の取引業務や職
業的な使用に関す る 問題な ど に対 し 、 一切の保証を行わない こ と を明示す る と
と も に、 利用者お よ びその会社が こ れに同意 し た も の と し ます。
商標
Btrieve、 Client/Server in a Box、 Pervasive、 Pervasive Software お よ び Pervasive
Software の ロ ゴは、 Pervasive Software Inc. の登録商標です。
Built on Pervasive Software、 DataExchange、 MicroKernel Database Engine、 MicroKernel
Database Architecture、 Pervasive.SQL、 Pervasive PSQL、 Solution Network、 Ultralight、 ZDBA
は Pervasive Software Inc. の商標です。
Microsoft、 MS-DOS、 Windows、 Windows 95、 Windows 98、 Windows NT、 Windows Me、
Windows 2000、 Windows XP、 Windows Server 2003、 Win32、 Win32s、 および Visual Basic
は、 Microsoft Corporation の登録商標です。
NetWare および Novell は Novell, Inc. の登録商標です。
NetWare Loadable Module、NLM、Novell DOS、Transaction Tracking System、TTS は、Novell,
Inc. の商標です。
Sun、 Sun Microsystems、 Java、 および Sun、 Solaris、 Java を含むすべての商標やロゴは、
Sun Microsystems の商標または登録商標です。
すべての会社名および製品名は各社の商標または登録商標です。
© Copyright 2005 Pervasive Software Inc. All rights reserved. このマニュアルの全文、 一部に関
わりなく複製、 複写、 配布をすることは、 前もって発行者の書面による同意がない限り禁止しま
す。
本製品には、 Powerdog Industries により開発されたソフトウェアが含まれています。
© Copyright 1994 Powerdog Industries.All rights reserved.
本製品には、 KeyWorks Software により開発されたソフトウェアが含まれています。
© Copyright 2002 KeyWorks Software.All rights reserved.
本製品には、 DUNDAS SOFTWARE により開発されたソフトウェアが含まれています。
© Copyright 1997-2000 DUNDAS SOFTWARE LTD. All rights reserved
本製品には、 Apache Software Foundation Foundation (http://www.apache.org/) により開発され
たソフトウェアが含まれています。
本製品ではフリー ソフトウェアの unixODBC Driver Manager を使用しています。 これは Peter
Harvey ([email protected]) によって作成され、 Nick Gorham ([email protected])
により変更および拡張されたものに Pervasive Software が一部修正を加えたものです。Pervasive
Software は、 unixODBC Driver Manager プロジェクトの LGPL 使用許諾契約書に従って、 この
プロジェクトの現在の保守管理者にそのコード変更を提供します。 unixODBC Driver Manager の
Web ページは www.unixodbc.org にあります。 このプロジェクトに関する詳細については、 現在
の保守管理者である Nick Gorham ([email protected]) にお問い合せください。
GNU Lesser General Public License (LGPL) は本製品の配布メディアに含まれています。 LGPL
は www.fsf.org/licensing/licenses/lgpl.html でも見ることができます。
OLE DB Provider Guide
2006 年 1 月
目次
このマニ ュ アルについて . . . . . . . . . . . . . . . . . . . . . . . . . ix
こ のマニ ュ アルの読者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x
こ のマニ ュ アルの構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
表記上の規則. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii
1
Pervasive PSQL OLE DB プ ロバイ ダの概要 . . . . . . . . . . . . . . . 1-1
Pervasive OLE DB プ ロ バ イ ダの概要
Pervasive ADO お よ び OLE DB サポー ト の概要 . . . . . . . . . . . . . . . . . . . . . . . . 1-2
OLE DB プ ロ バ イ ダの新機能の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-3
リ レーシ ョ ナル パフ ォーマ ン ス の向上 . . . . . . . . . . . . . . . . . . . . . . . . . 1-3
リ モー ト 接続 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-3
排他的カー ソ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4
ADO Refresh メ ソ ッ ド のサポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4
Pervasive OLE DB のアーキ テ ク チ ャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-5
以前の OLE DB プ ロ バ イ ダの確認 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-6
Pervasive PSQL v9 におけ る Visual Studio.NET のサポー ト . . . . . . . . . . . . . . . . . . 1-10
Visual Studio.NET の ウ ィ ザー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-10
ASP.NET に よ る セキ ュ リ テ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-10
サポー ト さ れ る オブジ ェ ク ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-10
OLE DB のパフ ォーマ ン ス に関す る 考慮点 . . . . . . . . . . . . . . . . . . . . . . . . . . 1-11
最高パフ ォーマ ン ス のナビ ゲーシ ョ ナル . . . . . . . . . . . . . . . . . . . . . . . . 1-11
静的カー ソ ル と 動的カー ソ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-11
未使用のサービ ス を使用不可にす る . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-12
OLE DB プ ロ バ イ ダの制限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-13
2
Pervasive OLE DB プ ロバイ ダに よ る プ ログ ラ ミ ング . . . . . . . . . . 2-1
Pervasive PSQL OLE DB プ ロ バ イ ダ を使用 し た一般的な操作の リ ソ ース
OLE DB プ ロ バ イ ダ を使用 し たデー タ ベースへの接続 . . . . . . . . . . . . . . . . . . . . 2-2
OLE DB プ ロ バ イ ダへの接続 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2
その他の作業 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2
リ モー ト 接続. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3
サポー ト さ れ る 新 し い構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3
以前のバージ ョ ン と の互換性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3
排他的カー ソ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-5
OLE DB 仕様 と 排他的カー ソ ル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-5
iii
目次
排他的カー ソ ルの構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-6
排他的カー ソ ルの動作の ま と め . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-7
排他的カー ソ ルを使っ た Visual Basic サンプル コ ー ド . . . . . . . . . . . . . . . . 2-7
Pervasive OLE DB プ ロ バ イ ダ を使用 し たプ ロ グ ラ ミ ン グ上の注意. . . . . . . . . . . . . 2-8
更新の表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-8
UNC パ ス ま たはマ ッ プ さ れた ド ラ イ ブ を使 う OLE DB プ ロ バ イ ダの使用 . . . . 2-8
ADO Refresh メ ソ ッ ド のサポー ト 例 . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10
Pervasive OLE DB プ ロ バ イ ダ を使用 し たプ ロ グ ラ ミ ン グ上の注意. . . . . . . . . . . . . 2-11
静的カー ソ ルを使用 し た Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-11
リ モー ト 接続 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-11
テーブル定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-11
デフ ォ ル ト の ロ ッ ク タ イ プ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-12
初期化プ ロ パテ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-12
COM+ サービ ス のサポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-14
COM+ サービ ス と は. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-14
Visual Basic プ ロ グ ラ マのための COM+ サービ ス の例 . . . . . . . . . . . . . . . . 2-14
Execute メ ソ ッ ド (ADO コ マ ン ド ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-17
SELECT オペレーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-17
Batch Insert、 Update お よ び Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-17
3
ADO/OLE DB リ フ ァ レ ン ス情報 . . . . . . . . . . . . . . . . . . . . . 3-1
OLE DB プ ロ バ イ ダの使用を始め る
Pervasive PSQL OLE DB プ ロ グ ラ ミ ン グ用の Visual Basic のセ ッ ト ア ッ プ . . . . . . . . 3-2
非ビ ジ ュ アル プ ロ グ ラ ミ ン グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-2
ビ ジ ュ アル プ ロ グ ラ ミ ン グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-4
接続の作成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-5
名前付 き デー タ ベース を使っ た レ コ ー ド セ ッ ト の作成 . . . . . . . . . . . . . . . . . . . 3-6
パス を使っ た レ コ ー ド セ ッ ト の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-7
Location パ ラ メ ー タ を使っ た レ コ ー ド セ ッ ト の作成 . . . . . . . . . . . . . . . . . . . . . 3-8
既存の接続を使用 し た レ コ ー ド セ ッ ト の作成. . . . . . . . . . . . . . . . . . . . . . . . . 3-9
デー タ 間の移動お よ びデー タ 操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-10
レ コ ー ド の追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-10
レ コ ー ド の削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-11
レ コ ー ド の更新 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-11
レ コ ー ド の検索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-12
バ ッ チ更新ま たは即時更新の選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13
即時更新モー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13
バ ッ チ更新モー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13
ADO オブジ ェ ク ト の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-15
iv
目次
ブ ッ ク マー ク の使用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-16
イ ベン ト の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-17
Field オブジ ェ ク ト の使用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-18
ト ラ ンザ ク シ ョ ンの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-19
4
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン . . . . 4-1
Pervasive の ADO イ ン タ ーフ ェ イ ス の説明
Pervasive PSQL OLE DB プ ロ バ イ ダの イ ンプ リ メ ン テーシ ョ ン リ フ ァ レ ン ス . . . . . . 4-2
コ マ ン ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-2
Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-2
Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-4
Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-5
Parameter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-5
Record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-6
Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-6
Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-8
ADOX イ ンプ リ メ ン テーシ ョ ン リ フ ァ レ ン ス . . . . . . . . . . . . . . . . . . . . . . . . 4-9
Catalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-9
列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-9
Column . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-10
Group. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-10
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-10
イ ンデ ッ ク ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11
Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11
Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11
Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11
Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-12
Visual Studio.NET イ ンプ リ メ ン テーシ ョ ン リ フ ァ レ ン ス . . . . . . . . . . . . . . . . . . 4-13
v
図
1-1
1-2
1-3
2-1
vi
Pervasive PSQL v9 OLE DB プ ロ バ イ ダのアーキ テ ク チ ャ
最初の OLE DB プ ロ バ イ ダのアーキ テ ク チ ャ . . . . . . .
2 番目の OLE DB プ ロ バ イ ダのアーキ テ ク チ ャ . . . . . .
デー タ ベース名 と サーバー名を解決す る ダ イ ア ロ グ . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1-5
1-6
1-7
2-9
表
2-1
2-2
2-3
読み取 り ロ ッ ク と 更新 ロ ッ ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-6
排他的 ロ ッ ク のオプシ ョ ン と その動作のマ ト リ ッ ク ス . . . . . . . . . . . . . . . . 2-7
接続文字列識別子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-12
vii
viii
こ のマニ ュ アルについて
こ の マニ ュ アルには、本 リ リ ース の Pervasive PSQL におけ る 新機能や拡張
機能に関す る 情報が記載 さ れてい ま す。 本 リ リ ー ス と は、 Pervasive PSQL
v9 を指 し ます。 内部バージ ョ ン番号は 9.00 です。
こ の マ ニ ュ ア ル で は、 本 リ リ ー ス の 新 機 能 や 従 来 の 最 新 リ リ ー ス
Pervasive.SQL V8 SP3 (8.70) か ら の変更点について説明 し ます。
ix
こ のマニ ュ アルについて
こ のマニ ュ アルの読者
こ のマニ ュ アルは、 Pervasive.SQL に精通 し 、 こ の ソ フ ト ウ ェ アの本 リ リ ー
ス におけ る 変更点をお知 り にな り たいユーザー向けにデザ イ ン さ れてい ま
す。
本 ソ フ ト ウ ェ アの全般的な使用手順は説明 し てい ません。 こ の製品の本 リ
リ ース におけ る 新機能や変更点のみを説明す る こ と を目的 と し てい ます。
x
こ のマニ ュ アルの構成
こ のマニ ュ アルの構成
こ の 『OLE DB Provider Guide』 では、 最初に新機能の概要を述べ、 次にそ
の詳細の章への リ ン ク を示 し ます。 章の構成は以下の と お り です。
„
第 1 章 「Pervasive PSQL OLE DB プ ロ バ イ ダの概要」
こ の章では、 Pervasive OLE DB プ ロ バ イ ダについて照会 し ます。
„
第 2 章 「Pervasive OLE DB プ ロ バ イ ダに よ る プ ロ グ ラ ミ ン グ」
こ の章では、 ActiveX Data Objects (ADO) お よ び Pervasive OLE DB プ
ロ バ イ ダ を使用す る プ ロ グ ラ ミ ン グについて概説 し ます。
„
第 3 章 「ADO/OLE DB リ フ ァ レ ン ス情報」
こ の章では、ADO お よ び OLE DB プ ロ グ ラ ミ ン グの概要について説明
し ます。
„
第 4 章 「Pervasive PSQL OLE DB プロバイダのインプリメンテーション」
こ の章では、ADO お よ び OLE DB プ ロ グ ラ ミ ン グの概要について説明
し ます。
こ のマニ ュ アルの巻末には索引が用意 さ れてい ます。
xi
こ のマニ ュ アルについて
表記上の規則
特段の記述がない限 り 、 コ マ ン ド 構文、 コ ー ド 、 お よ び コ ー ド 例では、 以
下の表記が使用 さ れます。
xii
大文字小文字の
区別
通常、 コ マ ン ド と 予約語は、 大文字で表記 さ れます。 本書で
別途記述がない限 り 、 こ れ ら の項目は大文字、 小文字、 あ る
いはその両方を使っ て入力で き ます。 た と えば、 MYPROG、
myprog、 ま たは MYprog と 入力す る こ と がで き ます。
太字
太字で表示 さ れ る 単語には次の よ う な も のが あ り ま す。 メ
ニ ュ ー名、 ダ イ ア ロ グ ボ ッ ク ス名、 コ マ ン ド 、 オプシ ョ ン、
ボ タ ン、 ス テー ト メ ン ト な ど。
固定幅フ ォ ン ト
固定幅フ ォ ン ト は、 コ マ ン ド 構文な ど、 ユーザーが入力す る
テ キ ス ト に使われます。
[ ]
省略可能な情報には、 [log_name] の よ う に、 角か っ こ が使
用 さ れます。角か っ こ で囲ま れていない情報は必ず指定す る
必要があ り ます。
|
縦棒は、 [file name | @file name] の よ う に、 入力す る 情報の選
択肢を表 し ます。
< >
<> は、 /D=<5|6|7> の よ う に、 必須項目に対す る 選択
肢を表 し ます。
変数
file name の よ う に斜体で表 さ れてい る 語は、 適切な値に置 き
換え る 必要のあ る 変数です。
...
[parameter...] の よ う に、 情報の後に省略記号が続 く 場合は、
その情報を繰 り 返 し 使用で き ます。
::=
記号 ::= は、 あ る 項目が別の項目用語で定義 さ れてい る こ と
を意味 し ます。 た と えば、 a::=b は、 項目 a が b で定義 さ れ
てい る こ と を意味 し ます。
Pervasive PSQL OLE DB プ ロ
バイ ダの概要
1
Pervasive OLE DB プ ロ バ イ ダの概要
こ の章では、 以下の項目について説明 し ます。
„
「Pervasive ADO お よ び OLE DB サポー ト の概要」 (1-2 ページ)
„
「OLE DB プ ロ バ イ ダの新機能の概要」 (1-3 ページ)
„
「Pervasive OLE DB のアーキ テ ク チ ャ 」 (1-5 ページ)
„
「Pervasive PSQL v9 におけ る Visual Studio.NET のサポー ト 」
„
「OLE DB のパフ ォーマ ン ス に関す る 考慮点」 (1-11 ページ)
„
「OLE DB プ ロ バ イ ダの制限」 (1-13 ページ)
1-1
Pervasive PSQL OLE DB プ ロバイ ダの概要
Pervasive ADO および OLE DB サポー ト の概要
Pervasive OLE DB プ ロ バ イ ダは、ADO な ど の OLE DB ユーザー と 共に利用
し ます。
こ のマニ ュ アルでは、OLE DB と ADO について説明 し てい ません。 こ れ ら
については、 Microsoft の仕様書で詳 し く 説明 し てい ます。 その代わ り 、 こ
のマニ ュ アルでは Pervasive プ ロ バ イ ダに関す る 具体的な事項について説
明 し てお り 、 新規ユーザー と し て初めて作業す る 際に役立ち ます。
1-2
OLE DB プ ロバイ ダの新機能の概要
OLE DB プ ロバイ ダの新機能の概要
こ のセ ク シ ョ ンでは、Pervasive PSQL v9 リ リ ース の Pervasive OLE DB ド ラ
イ バに加え ら れた変更の概要について説明 し ます。 こ の新 し いプ ロ バ イ ダ
がサポー ト す る のは Pervasive PSQL v9 エン ジ ンのみです。 Pervasive PSQL
v9 の OLE DB プ ロ バ イ ダ を使用 し て、 以前のバージ ョ ンの Pervasive.SQL
が動作 し てい る マシ ンに接続す る こ と はで き ません。
こ のプ ロ バ イ ダに追加 さ れた主な機能は次の と お り です。
„
プ ロ バ イ ダ を使用 し た リ レーシ ョ ナル
マ ン ス の向上
„
Location パ ラ メ ー タ
„
排他的カー ソ ル
„
ADO Refresh メ ソ ッ ド のサポー ト
デー タ ベース操作のパフ ォー
リ レーシ ョ ナル パフ ォ ーマ ン スの向上
Pervasive OLE DB プ ロ バ イ ダでは、 ODBC お よ び JDBC ド ラ イ バが リ モー
ト サーバー と 通信す る 方法 と 同様のアーキ テ ク チ ャ を使用す る よ う にな
り ま し た。 サーバー側の リ レ ーシ ョ ナル エ ン ジ ン を使用す る こ と に よ っ
て、 ス ト ア ド プ ロ シージ ャ や複雑な ク エ リ を含め、 こ のプ ロ バ イ ダの使用
に よ る ほ と ん ど の SQL ベース のパフ ォーマ ン ス が向上 し ます。
パフ ォーマ ン ス の向上を可能にす る プ ロ バ イ ダへの変更点の詳細情報につ
いては、 「Pervasive OLE DB のアーキ テ ク チ ャ 」 (1-5 ページ) を参照 し て
く だ さ い。
リ モー ト 接続
Pervasive PSQL v9 よ り 前の Pervasive.SQL と 共に出荷 さ れた OLE DB プ ロ
バ イ ダには、 リ モー ト 接続のサポー ト が含まれてい ませんで し た。つま り 、
リ モー ト サーバーにマ ッ プ さ れた ド ラ イ ブを作成 し 、リ モー ト デー タ ベー
ス を指定す る ために DDF への完全なパ ス を使用す る 必要があ り ま し た。本
リ リ ー ス で は接続文字列内で Location パ ラ メ ー タ を 使用 し て リ モ ー ト
サーバーを指定で き る よ う にな り ま し た。 こ の新 し いパ ラ メ ー タ の使用は
従来の リ モー ト 接続の作成に比べ、 よ り 効率的で適切な方法です。
Provider=PervasiveOLEDB;Data
Source=MyDBname;Location=MyServer
詳細については、 「 リ モー ト 接続」 (2-3 ページ) を参照 し て く だ さ い。
1-3
Pervasive PSQL OLE DB プ ロバイ ダの概要
排他的カ ー ソ ル
デー タ ベース プ ロ グ ラ ミ ン グにおいて、 その他の ク ラ イ ア ン ト が レ コ ー ド
の ロ ッ ク に遭遇す る 可能性が高 く な る リ ス ク を負っ て も 、 確実に更新を行
う こ と を優先す る 必要があ る 場合があ り ます。
レ コ ー ド セ ッ ト を取得 し てバ ッ チ更新を指定 し た場合、 更新 し よ う と し た
行が別の ク ラ イ ア ン ト に よ っ て更新 さ れていたために、 並行性違反が発生
す る 場合があ り ます。 排他的カー ソ ルを設定す る こ と に よ っ て こ れ ら の状
況を回避す る こ と がで き ます。
詳細については、 「排他的カー ソ ル」 (2-5 ページ) を参照 し て く だ さ い。
ADO Refresh メ ソ ッ ド のサポー ト
Pervasive PSQL v9 OLE DB プ ロ バ イ ダ で は、 Command オ ブ ジ ェ ク ト の
Parameters コ レ ク シ ョ ンの Refresh メ ソ ッ ド をサポー ト する ので、 ス ト ア ド
プ ロ シージ ャ ま たはパ ラ メ ー タ ク エ リ か ら パ ラ メ ー タ 情報を取得で き ま
す。
詳細については、 「ADO Refresh メ ソ ッ ド のサポー ト 例」 (2-10 ページ) を
参照 し て く だ さ い。
1-4
Pervasive OLE DB のアーキテ ク チ ャ
Pervasive OLE DB のアーキテ ク チ ャ
Pervasive OLE DB は、 Microsoft が 作成 し た OLE DB プ ロ バ イ ダ 仕 様 の
Pervasive Software の イ ンプ リ メ ン テーシ ョ ンの名前です。
リ レーシ ョ ナル ア ク セ ス の場合、プ ロ バ イ ダはネ ッ ト ーワ ー ク プ ロ ト コ ル
を介 し てエン ジ ンに接続で き る よ う にな り ま し た。 サーバー エン ジ ンが リ
ク エ ス ト を処理 し 、 そのデー タ をプ ロ バ イ ダに戻 し ます。 プ ロ バ イ ダは必
要な処理を行っ て ク ラ イ ア ン ト にデー タ を渡 し ます。 プ ロ バ イ ダは ODBC
ク ラ イ ア ン ト イ ン タ ーフ ェ イ ス と 同 じ プ ロ ト コ ルを使用 し ます。
こ の新 し いアーキ テ ク チ ャ が も た ら し たのは、 ADO プ ロ グ ラ マが ODBC
を必要 と し な く な っ た こ と です。 こ れは OLE DB プ ロ バ イ ダ と のパフ ォー
マ ン ス の差に よ る も のです。 こ の新 し いプ ロ バ イ ダ を使用すれば、 リ レー
シ ョ ナル ア ク セ ス の速度で OLE DB が ODBC に劣 る こ と はあ り ません。
ト ラ ンザ ク シ ョ ナル ア ク セ ス は本 リ リ ース では変更 さ れてい ません。 ト ラ
ン ザ ク シ ョ ナル エ ン ジ ン への ク ラ イ ア ン ト / サーバー ア ク セ ス ではパ
フ ォーマ ン ス が低下す る ため、 ト ラ ンザ ク シ ョ ナル エン ジ ンは現在 も ク ラ
イ ア ン ト 側にあ り ます。
次の図は、 新 し いプ ロ バ イ ダのアーキテ ク チ ャ を示 し てい ます。
図 1-1 Pervasive PSQL v9 OLE DB プ ロバイ ダのアーキテ ク チ ャ
1-5
Pervasive PSQL OLE DB プ ロバイ ダの概要
以前の OLE DB プ ロバイ ダの確認
現在のバージ ョ ン と の比較のために、 こ のセ ク シ ョ ン では以前のプ ロ バ イ
ダの概要について簡単に説明 し ます。 Pervasive では Pervasive.SQL 2000 リ
リ ー ス Service Pack 2 で 初 め て OLE DB プ ロ バ イ ダ を 出荷 し ま し た。
Pervasive PSQL v9 で Pervasive は第三世代のプ ロ バ イ ダ を出荷 し てい ます。
最初のバージ ョ ン : Pervasive.SQL 2000 (SP2)
Pervasive の最初のプ ロ バ イ ダは ト ラ ンザ ク シ ョ ナル (Btrieve) のみで し た。
リ レーシ ョ ナル ア ク セ ス の場合は、 Microsoft の ODBC to OLE DB ブ リ ッ
ジ プ ロ バ イ ダ を使用す る 必要が あ り ま し た。 次の図は、 最初の Pervasive
OLE DB プ ロ バ イ ダのアーキ テ ク チ ャ を示 し てい ます。
図 1-2 最初の OLE DB プ ロバイ ダのアーキテ ク チ ャ
1-6
Pervasive OLE DB のアーキテ ク チ ャ
2 番目のバージ ョ ン : Pervasive.SQL 2000i (SP3、 SP4)
Prvasive では、 Pervasive.SQL 2000i で リ レーシ ョ ナル ア ク セ ス を可能にす
る 最新のプ ロ バ イ ダ を リ リ ース し ま し た。 こ れを使用すれば、 開発者は同
じ API を使っ て リ レーシ ョ ナル ア ク セ スお よ び ト ラ ンザ ク シ ョ ナル ア ク
セ ス を行 う こ と がで き ます。 デー タ への更新は、 ト ラ ンザ ク シ ョ ン内でカ
プセル化す る こ と も 、リ レーシ ョ ナル ア ク セ ス と ト ラ ンザ ク シ ョ ナル ア ク
セ ス 間で カ プ セル化す る こ と も 可能です。 さ ら に、 こ のプ ロ バ イ ダ には
ADOX 機能がい く つか組み込まれてお り 、SQL 機能に加えてデー タ ベース
作成 も 行 う こ と がで き ま し た。
図 1-3 2 番目の OLE DB プ ロバイ ダのアーキテ ク チ ャ
こ の 2 番目のバージ ョ ン のプ ロ バ イ ダには、 欠点がい く つか あ り ま し た。
リ レーシ ョ ナル エン ジ ンが こ のプ ロ バ イ ダにカプセル化 さ れ る ために、 ク
ラ イ ア ン ト ベース と 見な さ れてい ま し た。 こ のため、 プ ロ バ イ ダは行ご と
に ク ラ イ ア ン ト プ ロ セ ス と サーバー プ ロ セ ス の境界を越え る 必要があ り 、
ク ラ イ ア ン ト / サーバー 設定のアプ リ ケーシ ョ ン ではパフ ォーマ ン ス の問
題を引 き 起 こ し てい ま し た。
Pervasive PSQL v9 バージ ョ ンのプ ロ バ イ ダは、 こ のパフ ォーマ ン ス の問題
を克服す る よ う 設計 さ れてい ます。
Pervasive.SQL 2000 OLE DB プ ロバイ ダの機能
こ のセ ク シ ョ ンでは、Pervasive.SQL 2000 SP3 リ リ ース の Pervasive OLE DB
ド ラ イ バに加え ら れた変更の概要について説明 し ます。
1-7
Pervasive PSQL OLE DB プ ロバイ ダの概要
コ マ ン ド ベースのレ コ ー ド セ ッ ト のサポー ト
SP3 よ り 前の Pervasive.SQL 2000 と 共に出荷 さ れた OLE DB プ ロ バ イ ダに
は、 SQL ス テー ト メ ン ト のサポー ト が含ま れてい ま せんで し た。 つま り 、
Commnad オブジ ェ ク ト がサポー ト さ れてお ら ず、結果セ ッ ト を正常に開 く
にはテーブル名が必要で し た。こ のバージ ョ ンには SQL コ マ ン ド のサポー
ト が含ま れてお り 、 2.5 仕様に適合 し てい ま す。 SQL Server プ ロ バ イ ダや
ODBC ブ リ ッ ジ と は異な り 、 こ のプ ロ バ イ ダは コ マ ン ド ベース ま たは完全
にナビ ゲーシ ョ ナルのいずれの結果セ ッ ト も 開 く こ と がで き ます。さ ら に、
いずれの場合 も サーバー側のカー ソ ルは、 前方のみ、 静的ま たは動的 と す
る こ と が で き ま す。 コ マ ン ド ベー ス の結果 セ ッ ト と ナ ビ ゲー シ ョ ナル
(テーブル ベース) 結果セ ッ ト を同時に開 き 、 処理す る こ と がで き ます。
コ マ ン ド ベー ス の レ コ ー ド セ ッ ト は SQL エン ジ ン のパ ワ ー と 柔軟性を提
供 し ますが、 サーバー側のナビ ゲーシ ョ ナル結果セ ッ ト は イ ンデ ッ ク スへ
の直接ア ク セ ス を提供 し ます。 こ の機能は コ マ ン ド ベース の結果セ ッ ト で
は使用で き ません (間接ア ク セ ス は ク エ リ オプテ ィ マ イ ザに よ っ て提供 さ
れます) 。 イ ンデ ッ ク ス が使用で き る こ と に よ り 、 Seek オペレーシ ョ ン を
実行す る こ と がで き ます。Seek を使用す る ルーチンは、同 じ 機能を SQL ス
テー ト メ ン ト を介 し て実行す る 同様のルーチンに比べ、 非常に効率が よ く
な っ てい ます。 適切に使用 し た場合、 特定の値を含むレ コ ー ド にすばや く
位置付け る こ と がで き 、 サーバー側のナ ビ ゲーシ ョ ナル レ コ ー ド セ ッ ト
は、 アプ リ ケーシ ョ ンのパフ ォーマ ン ス を向上 さ せます。
ADOX
Pervasive PSQL は、デー タ 定義言語お よ びセキ ュ リ テ ィ のための ADO 拡張
(ADOX) を サポー ト し てい ま す。 ADOX はテーブルの作成、 ス キーマ定
義の変更、お よ びデー タ ベース テーブルの内容表示に使用 さ れます。現在、
カ タ ロ グ、 テーブル、 列、 お よ び イ ンデ ッ ク ス オブジ ェ ク ト がサポー ト さ
れてい ます。 テーブルお よ び イ ンデ ッ ク ス の作成はサポー ト さ れてい ます
が、 デー タ ベース の作成は現在サポー ト さ れてい ません。
プ ロバイ ダのナ ビゲーシ ョ ナル レ コ ー ド セ ッ ト
ナ ビ ゲーシ ョ ナル結果セ ッ ト を開 く には、 Open メ ソ ッ ド のオプシ ョ ン で
adCmdTableDirect を 使用す る 必要が あ り ま す。 以前 の バー ジ ョ ン で は、
adCmdTable を使っ てナ ビ ゲーシ ョ ナル結果セ ッ ト を開 く こ と がで き ま し
た。 し か し 、 ADO は こ れを SQL ス テー ト メ ン ト の SELECT * FROM SQL
に置 き 換え ます。 こ れは結果セ ッ ト を コ マ ン ド ベース に し 、 イ ンデ ッ ク ス
が使用で き な く な り ます。
1-8
Pervasive OLE DB のアーキテ ク チ ャ
メ モ ADO は こ れを別の も の と し て扱 う ため、 コ マ ン ド サポー ト が無
効の場合に イ ンデ ッ ク ス 機能を利用す る 既存のアプ リ ケーシ ョ ンは、
Open メ ソ ッ ド 呼び出 し で adCmdTableDirect を使用 し ない限 り 機能 し
ません。
ラ ージ バイ ナ リ オブ ジ ェ ク ト (BLOB)
ISequentialStream の サ ポ ー ト が OLE DB プ ロ バ イ ダ に 追加 さ れ ま し た。
ADO では、 こ れを レ コ ー ド セ ッ ト オブジ ェ ク ト の AppendChunk/GetChunk
機能に変換 し ます。 ま た、 BLOB デー タ と ビ ジ ュ アル コ ン ト ロ ールを相互
に転送す る ための複合デー タ バ イ ンデ ィ ン グ を行 う こ と も で き ます。
1-9
Pervasive PSQL OLE DB プ ロバイ ダの概要
Pervasive PSQL v9 における Visual Studio.NET のサポー ト
こ のセ ク シ ョ ンでは、 Pervasive PSQL v9 を Visual Studio.NET と 併用す る 場
合の留意事項について説明 し ます。
Visual Studio.NET のウ ィ ザー ド
ADO.NET コ ー ド を生成す る Visual Studio.NET の ウ ィ ザー ド は、 Microsoft
プ ロ バ イ ダ向けにのみ設計 さ れてい ます。 こ のため、 Pervasive PSQL では
こ れ ら の ウ ィ ザー ド を使用 し ない よ う に し て く だ さ い。 ただ し 、 こ れ ら の
ウ ィ ザー ド には コ ー ド を生成す る 機能 し かないので、 ウ ィ ザー ド で可能な
こ と はユーザー自身が作成 し た コ ー ド ですべて行え ます。
ASP.NET によ る セキ ュ リ テ ィ
ASP.NET で動作す る には、 ASP.NET と IIS (IUSR_ マシ ン名) で使用す る
ユーザー ア カ ウ ン ト の両方が必ず以下の フ ァ イ ルお よ びデ ィ レ ク ト リ に
読み取 り / 書 き 込みア ク セ ス で き る よ う に し てお く 必要があ り ます。
„
デー タ と DDF フ ァ イ ルがあ る デ ィ レ ク ト リ
„
Pervasive バ イ ナ リ の ロ ケーシ ョ ン (\pvsw\bin)
„
dbnames.cfg (お使いのシ ス テ ムの \winnt ま たは \windows フ ォ
ルダ内にあ り ます)
サポー ト さ れるオブ ジ ェ ク ト
Visual Studio.NET で サ ポ ー ト さ れ る オ ブ ジ ェ ク ト の 説明 に つ い て は、
「Visual Studio.NET イ ンプ リ メ ン テーシ ョ ン リ フ ァ レ ン ス」 (4-13 ページ)
を参照 し て く だ さ い。
1-10
OLE DB のパフ ォ ーマ ン スに関する考慮点
OLE DB のパ フ ォ ーマ ン スに関する考慮点
プ ロ バ イ ダの リ レーシ ョ ナル側において、 そのパフ ォーマ ン スは以前の リ
リ ース か ら 格段に向上 し ま し た。
接続が切断 さ れた カー ソ ルや複雑な SQL ク エ リ を含め、ODBC のパフ ォー
マ ン ス が Pervasive OLE DB プ ロ バ イ ダのパフ ォーマ ン ス を上回 る よ う な こ
と がな く な り ま し た。
メ モ Pervasive PSQL のキ ャ ッ シ ュ エン ジ ンは、 ク ラ イ ア ン ト / サー
バー環境で使用す る と OLE DB プ ロ バ イ ダのパフ ォーマ ン ス に影響 し
ます。環境に応 じ て必要であれば Pervasive Control Center でキ ャ ッ シ ュ
エン ジ ン を無効にす る こ と がで き ます。 こ れについて最 も 影響があ る
のは静的カー ソ ルです。
プ ロ バ イ ダに行っ た アーキ テ ク チ ャ の変更点については、 「Pervasive OLE
DB のアーキ テ ク チ ャ 」 (1-5 ページ) を参照 し て く だ さ い。
最高パフ ォ ーマ ン スのナビゲーシ ョ ナル
前に述べた よ う に、 サーバー側のナビ ゲーシ ョ ナル レ コ ー ド セ ッ ト は コ マ
ン ド ベース の レ コ ー ド セ ッ ト に比べ、特定の値を含むレ コ ー ド への位置付
けが頻繁に要求 さ れ る タ ス ク では、パフ ォーマ ン ス の上で非常に有利です。
静的カ ー ソ ル と 動的カ ー ソ ル
静的カー ソ ルは、 リ レーシ ョ ナル エン ジ ンに よ っ て作成 さ れなか っ た場合
は常にテ ン ポ ラ リ テーブルを作成 し ます(テ ン ポ ラ リ テーブルの詳細につ
いては 『SQL Engine Reference』 を参照 し て く だ さ い) 。 こ れは、 コ マ ン ド
ベースお よ びナビ ゲーシ ョ ナル テーブル共にそ う な り ます。帯域幅が問題
にな ら ない場合は、 動的カー ソ ルが、 テ ン ポ ラ リ テーブルをいつ も 作成 し
ないので、 よ り 高いパフ ォーマ ン ス を提供 し ます。 ただ し 、 帯域幅が低い
場合は、動的カー ソ ルを容認す る には往復の コ ス ト は高い も の と な る ため、
その解決策 と し て RDS を使用す る と よ い場合があ り ます。 RDS の欠点は、
Microsoft が こ れを コ マ ン ド ベース のみの解決策 と し て実装 し た こ と で、イ
ンデ ッ ク ス機能 (Seek の使用) がで き ない こ と を意味 し ます。 RDS ベース
と ロ ーカル レ コ ー ド セ ッ ト で同様に働 く 抽象 レ イ ヤ を実装す る こ と に よ
り 、 展開に関係な く パ フ ォ ーマ ン ス は維持 さ れ ま す。 こ の抽象の性質は、
アプ リ ケーシ ョ ンの要求に依存 し 、よ く ラ ン タ イ ム ビ ジネ ス オブジ ェ ク ト
の形を取 り ます。
1-11
Pervasive PSQL OLE DB プ ロバイ ダの概要
未使用のサービ ス を使用不可にする
OLE DB アプ リ ケーシ ョ ン を開発す る 際、 パフ ォーマ ン ス を向上 さ せ る 方
法 と し て、 使用 さ れていない OLE DB サービ ス を オ フ にす る こ と があ り ま
す。 詳細については、 DBPROP_INIT_OLEDBSERVICES の ド キ ュ メ ン ト を
参照 し て く だ さ い。
Automatic Transaction Enlistment をオフにすると、 セッションの ITransactionJoin
イ ン タ ーフ ェ イ ス の イ ン ス タ ン ス を作成せず、プ ロ バ イ ダが MTS オブジ ェ
ク ト を検索 し ない よ う に し ます。
1-12
OLE DB プ ロバイ ダの制限
OLE DB プ ロバイ ダの制限
„
非同期オペレーシ ョ ンはサポー ト さ れません。
„
Record お よ び Stream オブジ ェ ク ト はサポー ト さ れません。
„
い っ たん レ コ ー ド セ ッ ト が使用 さ れ る と 、 Index プ ロ パテ ィ は静的ナ
ビ ゲーシ ョ ナル カー ソ ルに設定す る こ と はで き ません。 レ コ ー ド セ ッ
ト の Open オペレーシ ョ ン を実行す る 前に イ ンデ ッ ク ス を適切に設定
し て く だ さ い。 レ コ ー ド セ ッ ト をオープン し た後、 イ ンデ ッ ク スは変
更で き ません。
1-13
Pervasive PSQL OLE DB プ ロバイ ダの概要
1-14
Pervasive OLE DB プ ロバイ ダ
によ る プ ログ ラ ミ ング
2
Pervasive PSQL OLE DB プ ロ バ イ ダ を使用 し た一般的な操作の リ ソ ース
こ の章は、 以下の概要セ ク シ ョ ンか ら 構成 さ れてい ます。
„
「OLE DB プ ロ バ イ ダ を使用 し たデー タ ベースへの接続」 (2-2 ページ)
„
「 リ モー ト 接続」 (2-3 ページ)
„
「排他的カー ソ ル」 (2-5 ページ)
„
「Pervasive OLE DB プ ロ バ イ ダ を使用 し たプ ロ グ ラ ミ ン グ上の注意」
(2-11 ページ)
„
「COM+ サービ ス のサポー ト 」 (2-14 ページ)
„
「Execute メ ソ ッ ド (ADO コ マ ン ド )」 (2-17 ページ)
2-1
Pervasive OLE DB プ ロバイ ダによ る プ ログ ラ ミ ング
OLE DB プ ロバイ ダ を使用 し たデー タ ベースへの接続
Pervasive OLE DB プ ロ バ イ ダ を 使用す る 場合の一般的な疑問は、 デー タ
ベースへの接続方法です。 こ のセ ク シ ョ ンでは、 OLE DB プ ロ バ イ ダ を使
用 し た接続の基本を説明 し ます。
OLE DB プ ロバイ ダへの接続
接続文字列
"Provider=PervasiveOLEDB;Data Source= (デー タ フ ァ イ ルの
DB 名ま たはパ ス )"
接続 と オープ ンの例
Private Sub Form_Load()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
' こ れは、 特に Client Cursor Engine を使用す る 場合を除 き 、
' 常に adUseServer です。
cn.CursorLocation = adUseServer
cn.ConnectionString = "Provider=PervasiveOLEDB;Data
Source=Demodata"
cn.Open
rs.Open "Billing", cn, adOpenDynamic, adLockOptimistic,
adCmdTableDirect
rs.MoveFirst
MsgBox " 最初の Student ID : " & rs.Fields("Student_ID")
rs.Close
cn.Close
End Sub
その他の作業
その他の一般的な処理については、 第 3 章 「ADO/OLE DB リ フ ァ レ ン ス
情報」 を参照 し て く だ さ い。
2-2
リ モー ト 接続
リ モー ト 接続
以前のバージ ョ ンのプ ロ バ イ ダでは、リ モー ト ア ク セ スす る ためには DDF
への完全なパス を指定す る 必要があ り ま し た。
現在、 プ ロ バ イ ダはネ ッ ト ーワー ク プ ロ ト コ ルを介 し てエン ジ ンに接続で
き る よ う にな り ま し た。 サーバー エ ン ジ ン が リ ク エ ス ト を処理 し 、 その
デー タ をプ ロ バ イ ダに戻 し ます。 プ ロ バ イ ダは必要な処理を行っ て ク ラ イ
ア ン ト にデー タ を渡 し ます。 こ れは ODBC ク ラ イ ア ン ト と 同 じ プ ロ ト コ ル
を使用す る こ と に よ っ て行い ます。
ト ラ ンザ ク シ ョ ナル ア ク セ ス は変更 さ れてい ません。 ト ラ ンザ ク シ ョ ナル
エン ジ ン を リ モー ト 操作す る と パフ ォーマ ン ス が低下す る ので、 こ のエン
ジ ンは現在 も ク ラ イ ア ン ト 側にあ り ます。
サポー ト さ れる新 し い構文
接続文字列内で Location= パ ラ メ ー タ を使用 し て リ モー ト サーバーを指
定で き ます。
Provider=PervasiveOLEDB;Data
Source=MyDBname;Location=MyServer
メ モ Data Source パ ラ メ ー タ は DSN で は な く 、 デ ー タ ベ ー ス 名
(DBname) を指 し ます。 DSN は ODBC でのみ使用 し ます。
以前のバージ ョ ン と の互換性
現在、接続文字列で DDF へのパ ス を使用 し てい る 場合で も 、Pervasive PSQL
v9 でサポー ト し ます。
Provider=PervasiveOLEDB;Data Source=f:\mydata
以前のバージ ョ ン の Pervasive.SQL と は異な り 、 本 リ リ ー ス では接続す る
サーバーにデー タ ベース名が存在 し てい る 必要があ り ます。
デー タ ベース名を指定 し た場合 と Location を指定 し た場合、 あ る いはマ ッ
プ さ れた ド ラ イ ブ を指定 し た場合で も パ フ ォ ーマ ン ス に違いは あ り ま せ
ん。 ただ し 、 リ モー ト サーバーに接続する 方法 と し ては現在 Location の使
用を推奨 し てい ます。 Pervasive PSQL v9 プ ロ バ イ ダでは、 マ ッ プ さ れた ド
ラ イ ブ ま たは UNC パ ス使用 し た場合にア ク セ ス権の問題が発生す る 可能
性があ り ます。
2-3
Pervasive OLE DB プ ロバイ ダによ る プ ログ ラ ミ ング
メ モ 接続文字列内で OLE DB プ ロ バ イ ダ を使用 し 、 マ ッ プ さ れた ド
ラ イ ブ ま たは UNC パ ス を Data Source 部分に指定す る 場合は、 「UNC
パ ス ま たはマ ッ プ さ れた ド ラ イ ブ を使 う OLE DB プ ロ バ イ ダの使用」
(2-8 ページ) も 参照 し て く だ さ い。
2-4
排他的カ ー ソル
排他的カ ー ソ ル
ほかの ク ラ イ ア ン ト が レ コ ー ド の ロ ッ ク に遭遇す る 可能性が高 く な る リ ス
ク を負っ て も 、 作成す る アプ リ ケーシ ョ ンで確実に更新を行 う こ と を優先
す る 必要があ る 場合は排他的カー ソ ルを使用 し ます。
以前のバージ ョ ンの Pervasive.SQL OLE DB プ ロ バ イ ダでは、排他的カー ソ
ルを使用で き る ADO パ ラ メ ー タ adLockPessimistic がサポー ト さ れてい ま
せんで し た。
現在は、こ のパ ラ メ ー タ を Pervasive の接続文字列の拡張機能 と 共に使用 し
て排他的カー ソ ルを持つアプ リ ケーシ ョ ン を作成す る こ と がで き ます。
OLE DB 仕様 と 排他的カ ー ソ ル
OLE DB 仕様では排他的カー ソ ルを、 最新の フ ェ ッ チに よ っ て単一行に行
われた変更が並行性違反のために失敗 し ない こ と を保証す る カー ソ ル と し
て定義 し てい ます。 レコードセットをオープン し た後、 バ ッ チ更新 さ れ る ま で
は し ば ら く 時間がかか り ます。 排他的カー ソ ルを使用す る こ と は、 こ の時
間のギ ャ ッ プのために発生す る 並行性の問題を軽減す る 1 つの方法です。
プ ロ バ イ ダ ご と に行レベルの ロ ッ ク の実装が異な る ので、 OLE DB 仕様の
排他的カー ソ ルの定義は意図的に明確に さ れてい ません。 こ こ では一般的
な 2 つの実装について説明 し ます。
„
(a) 読み取 り 時に行を ロ ッ ク す る
„
(b) 更新の開始時に行を ロ ッ ク する
た と えば、 次の よ う に連続 し た イ ベン ト があ る と し ます。
1
ク ラ イ ア ン ト A が レ コ ー ド セ ッ ト を オープンす る
2
ク ラ イ ア ン ト A が行を読み込む (a)
3
ク ラ イ ア ン ト A が フ ィ ール ド 1 を変更する (b)
4
ク ラ イ ア ン ト A が フ ィ ール ド 2 を変更する
5
ク ラ イ ア ン ト A がその行を更新す る
2-5
Pervasive OLE DB プ ロバイ ダによ る プ ログ ラ ミ ング
開発者側か ら 見れば、 こ の 2 つアルゴ リ ズ ムの違いは、 アルゴ リ ズ ム (a)
では読み取 り ロ ッ ク を使用 し 、 アルゴ リ ズ ム (b) では更新 ロ ッ ク を使用 し
てい る と い う 点です。 次の表では、 こ れ ら 2 つのアルゴ リ ズ ム間の動作の
違いについて ま と めてい ます。
表 2-1
読み取 り ロ ッ ク と 更新ロ ッ ク
ロ ッ ク タ イプ
動作
読み取 り ロ ッ ク
読み取 る たびに行を ロ ッ ク し ます。
最初の Move メ ソ ッ ド で行の ロ ッ ク を解除 し ます。
次の行を ロ ッ ク し ます。
更新 ロ ッ ク
デー タ が変更 さ れた と き に行を ロ ッ ク し ます。
Update メ ソ ッ ド を 呼び出 し た と き に行の ロ ッ ク を
解除 し ます。
読み取 り ロ ッ ク を使用す る こ と で、 開発者は行を読み込んだ と き に並行性
エ ラ ーを懸念す る こ と な く 確実に更新を行 う こ と がで き ます。 ただ し 、 こ
れは読み取 る 行を常に ロ ッ ク し ます。 更新 ロ ッ ク ではデー タ が変更 さ れた
場合に行を ロ ッ ク す る だけです。 ただ し 、 並行性エ ラ ーが発生す る のは よ
り 遅 く な る 可能性があ り ます。
こ のアーキ テ ク チ ャ の変更の詳細については、「Pervasive OLE DB のアーキ
テ ク チ ャ 」 (1-5 ページ) を参照 し て く だ さ い。
排他的カ ー ソ ルの構文
Pervasive の排他的カー ソ ル実装に よ っ て、 希望す る 動作を選択す る こ と が
で き ます。 接続文字列内の排他的カー ソ ルに関す る パ ラ メ ー タ は次の と お
り です。
„
読み取 り ロ ッ ク ま たは更新 ロ ッ ク (Pessimistic Read Lock=True/False)
Open メ ソ ッ ド の間に、 こ の接続文字列オプシ ョ ン と 、 排他的カー ソ ルを指
定す る ADO パ ラ メ ー タ adLockPessimistic を併用 し ます。
読み取 り ロ ッ ク と 更新ロ ッ クの指定
接続文字列内で Pessimistic Read Lock=True を使用する と 、 読み取
り ロ ッ ク を実行 し ます。 次にそのサンプル接続文字列を示 し ます。
"Provider=PervasiveOLEDB;Data
Source=Demodata;Pessimistic Read Lock=True"
更新 ロ ッ ク を実行す る 場合は、 Pessimistic Read Lock の値を False に変更 し
ます。
2-6
排他的カ ー ソル
排他的カ ー ソ ルの動作のま と め
次の表では、排他的カー ソ ル オプシ ョ ン を使用す る 効果について ま と めて
い ます。
表 2-2
排他的ロ ッ クのオプ シ ョ ン と その動作のマ ト リ ッ ク ス
Pessimistic Read Lock=
動作
True
読み取 り 時に レ コ ー ド を ロ ッ ク し ます。
既に ロ ッ ク さ れていた場合はエ ラ ーを返 し ます。
False
更新時に レ コ ー ド を ロ ッ ク し ます。
既に ロ ッ ク さ れていた場合はエ ラ ーを返 し ます。
排他的カ ー ソ ルを使っ た Visual Basic サン プル コ ー ド
次の Visual Basic サ ン プル コ ー ド の一部では、 読み取 り ロ ッ ク の排他的
カー ソ ルを使用 し て DEMODATA サン プル デー タ ベース の Course テーブ
ルを開 き ます。
Public myRecordSet as ADODB.Recordset
myRecordSet.CursorLocation = adUseServer
myConnString = "Provider=PervasiveOLEDB;Data
Source=DEMODATA;Pessimistic Read Lock=True"
myRecordSet.Open "Course",myConnString, adOpenDynamic,
adLockPessimistic, adCmdTableDirect
myRecordSet.MoveFirst ' 最初の レ コ ー ド が ロ ッ ク さ れます
2-7
Pervasive OLE DB プ ロバイ ダによ る プ ログ ラ ミ ング
Pervasive OLE DB プ ロバイ ダ を使用 し たプ ログ ラ ミ ング上の
注意
次のセ ク シ ョ ンでは、 Pervasive OLE DB プ ロ バ イ ダに関す る 注意事項を述
べます。
更新の表示
adCmdTableDirect を使っ てテーブルに行っ た更新は、 コ マ ン ド ベース の レ
コ ー ド セ ッ ト か ら 見 る こ と がで き ます。
た と えば、 次の よ う に連続 し た イ ベン ト があ る と し ます。
„
adCmdTableDirect を使用 し 、 ト ラ ンザ ク シ ョ ナル (Btrieve) 方式でテー
ブルをオープンす る 。
„
テーブルに変更を加え、 Update メ ソ ッ ド を呼び出す。
„
次に、 ト ラ ンザ ク シ ョ ナル方式で行われたテーブルの更新に よ っ て変
更 さ れたデー タ を選択す る SQL ク エ リ を実行する 。
こ の よ う な状況では、 ト ラ ンザ ク シ ョ ナル方式で行っ た更新は SQL ク エ リ
に表示 さ れます。
UNC パス またはマ ッ プ さ れた ド ラ イ ブ を使 う OLE DB プ ロバイ ダの使用
こ こ では、 接続文字列内で Pervasive OLE DB プ ロ バ イ ダ を使用 し 、 マ ッ プ
さ れた ド ラ イ ブ ま たは UNC パ ス を Data Source 部分に指定 し た と き に起 こ
る 状況について説明 し ます。 た と えば、 次の よ う にな り ます。
Provider=PervasiveOLEDB;Data Source=\\servername\path
以前のバージ ョ ン のプ ロ バ イ ダ では、 こ の接続文字列が自動的に正 し い
デー タ ベース名に解決 さ れま し た。 Pervasive PSQL v9 プ ロ バ イ ダでは、 こ
の設定でア ク セ ス権の問題が発生す る 可能性があ り ます。 接続文字列内で
新 し い Location パ ラ メ ー タ を使用す る 場合は、 ア ク セ ス権の問題は発生 し
ません。 Location パ ラ メ ー タ の詳細については、 「 リ モー ト 接続」 (2-3 ペー
ジ) を参照 し て く だ さ い。
ク ラ イ ア ン ト がサーバーに接続 し よ う と し た と き に、 その ク ラ イ ア ン ト の
デー タ ソ ース が UNC パス の場合、 プ ロ バ イ ダはそのパ ス をデー タ ベース
名 と サーバー名に解決 し なければな り ません。 OLE DB プ ロ バ イ ダが こ の
情報を取得す る には、 ク ラ イ ア ン ト のユーザー ア カ ウ ン ト にそのサーバー
の管理者ま たは Power User の権限がなければいけ ません。
多 く の設定の中で、 ク ラ イ ア ン ト のユーザー ア カ ウ ン ト には こ れ ら の必要
な ア ク セ ス権がない場合があ り ます。 ク ラ イ ア ン ト が必要な権限を持っ て
いない場合、 OLE DB プ ロ バ イ ダでは図 2-1 (2-9 ページ) の よ う なダ イ ア
2-8
Pervasive OLE DB プ ロバイ ダ を使用 し たプ ロ グ ラ ミ ン グ上の注意
ロ グ を 表示 し ま す。 ユーザーは こ の ダ イ ア ロ グ でデー タ ベー ス 名 と サー
バー名を入力す る こ と がで き ます。
図 2-1 デー タ ベース名 と サーバー名を解決する ダ イ ア ログ
[上の設定を レ ジ ス ト リ に保存 し ますか?] のチ ェ ッ ク を オンにする と 、 そ
のエン ト リ は Windows レ ジ ス ト リ に保存 さ れ る ので、こ こ で参照 し た UNC
ま たはマ ッ プ さ れた ド ラ イ ブの場所を対象 と す る ダ イ ア ロ グ (図 2-1) は
それ以降表示 さ れません。 その代わ り に、 デー タ ベース名は レ ジ ス ト リ を
使っ て解決 さ れ、 こ れに よ り パフ ォーマ ン ス が向上 し ます。 使用 さ れ る レ
ジ ス ト リ の ロ ケーシ ョ ンは次の と お り です。
SOFTWARE\Pervasive Software\OLEDB\Connections
開発者が こ のダ イ ア ロ グ を エ ン ド ユーザーに見せない よ う にす る 場合は、
Windows の レ ジ ス ト リ に必要な情報 を 入力す る こ と がで き ま す。 上記の
キーの下位に次の書式で入力 し ます。
名前
値
デー タ への UNC パス
サーバー名 ; デー タ ベース名
た と えば、 次の よ う にな り ます。
名前
値
\\myserver\c\pvsw\demodata
myserver;demodata
必要であれば、 同 じ デー タ ベース名を指す複数の UNC エ ン ト リ を持つ こ
と がで き ます。
2-9
Pervasive OLE DB プ ロバイ ダによ る プ ログ ラ ミ ング
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 = ?"
'Refresh パ ラ メ ー タ
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
2-10
Pervasive OLE DB プ ロバイ ダ を使用 し たプ ロ グ ラ ミ ン グ上の注意
Pervasive OLE DB プ ロバイ ダ を使用 し たプ ログ ラ ミ ング上の
注意
以下のセ ク シ ョ ンでは、 Pervasive OLE DB プ ロ バ イ ダについての注意の一
覧を示 し ます。
静的カ ー ソ ルを使用 し た 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 プ ロ バ イ ダは、 リ モー ト 接続を作成す る こ と はで き ま
せん。 つま り 、 接続文字列内で リ モー ト サーバーを設定す る こ と がで き ま
せん。 ただ し 、 同 じ 機能を実行す る 代わ り の方法があ り ます。
„
Pervasive プ ロ バ イ ダでテ ス ト 済みの RDS を使用 し ます。
„
COM+ サービ ス を使用 し て ビ ジネ ス オブジ ェ ク ト を開発 し 、
CreateObject を使用 し てオブジ ェ ク ト を作成 し ます。 た と えば、 次の
よ う にな り ます。
Dim m_busObj As projDLL.busObj
rs As New ADODB.Recordset
Set m_busObj =
CreateObject("sampProj2.TwoPhaseSampleProduct",
"RemoteServer")
Set rs = m_busObj.GetData()
テーブル定義
ITableDefinition は以下の列の作成をサポー ト し ませんが、 こ れはその基盤
と な る Pervasive PSQL エン ジ ンがサポー ト し ていないためです。
„
BSTR
„
WCHAR
„
VarWChar
2-11
Pervasive OLE DB プ ロバイ ダによ る プ ログ ラ ミ ング
„
LongVarWChar
„
UserDefined Types
„
GUID
デ フ ォル ト のロ ッ ク タ イ プ
LockType を指定 し ない と 、 カー ソ ルは即時更新モー ド に設定 さ れます。 こ
れに よ り 、 い く つかの影響があ り ます。
„
すべての変更はす ぐ にデー タ ベース に転送 さ れます (Update を呼び出
す必要があ り ません)。
„
Update お よ び UpdateBatch は実際には意味を持ち ません (デー タ ベー
ス は既に更新 さ れてい る ため) 。 ただ し 、 Supports メ ソ ッ ド は Update
に対 し True を返 し ますが、 UpdateBatch には False を返 し ます。
„
GetOriginalValue は使用で き ません。
GetOriginalValue が使用可能 な場合、 プ ロ グ ラ ム に よ っ て判断す る には、
adUpdateBatch を 引数 と し て "supports" メ ソ ッ ド を 使用す る 必要が あ り ま
す。 た と えば、 次の よ う にな り ます。
if rs.Supports(adUpdateBatch) then
someValue = rs.fields(iCol).OriginalValue
end if
初期化プ ロパテ ィ
次の表は OLE DB の初期化で Pervasive がサポー ト す る プ ロ パテ ィ の一覧
で、 対応す る 接続文字列識別子 も 示 し ます。
表 2-3
2-12
接続文字列識別子
接続文字列識別子
プ ロパテ ィ
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
Pervasive OLE DB プ ロバイ ダ を使用 し たプ ロ グ ラ ミ ン グ上の注意
表 2-3
接続文字列識別子
接続文字列識別子
プ ロパテ ィ
Persist Security Info
DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINF
O
User ID
DBPROP_AUTH_USERID
以下のプ ロ パテ ィ を設定す る こ と も で き ます。
„
DBPROP_INIT_HWND
„
DBPROP_INIT_PROMPT
„
DBPROP_INIT_ASYNCH
„
DBPROP_INIT_OLEDBSERVICES
2-13
Pervasive OLE DB プ ロバイ ダによ る プ ログ ラ ミ ング
COM+ サービ スのサポー ト
こ のセ ク シ ョ ンでは、Pervasive の OLE DB プ ロ バ イ ダが Microsoft の COM+
サービ ス と ど の よ う に相互作用す る かについて説明 し ます。
COM+ サービ ス と は
COM+ (Component Object Model) サービ ス は Microsoft 固有の技術で、 マ
ルチ ス レ ッ ド コ ン テ キ ス ト 内の ビ ジネ ス オブジ ェ ク ト を作成す る のに使
用 さ れ ます。 COM+ は主に Visual Basic プ ロ グ ラ マのためにデザ イ ン さ れ
ま し たが、 それに限定 さ れません。 COM+ に よ り 、 複構造アプ リ ケーシ ョ
ン を迅速に作成で き 、 通常開発者に よ っ て実装 さ れ る 必要のあ る た く さ ん
の利点を含んでい ます。 次に COM+ の利点を挙げます。
„
コ ンテキ ス ト
„
並行性
„
セキ ュ リ テ ィ の追加
„
オブジ ェ ク ト のプー リ ン グ
„
ジ ャ ス ト イ ン タ イ ムのア ク テ ィ ブ化
„
待ち行列に入れ ら れ る コ ン ポーネ ン ト
„
イ ベン ト
COM+ の詳細については Microsoft の ド キ ュ メ ン ト を参照 し て く だ さ い。
COM+ サービ スは MTS (Microsoft Transaction Server) に よ っ て提供 さ れ る
利点の拡張です。 MTS は Microsoft の以前の ビ ジ ネ ス オブジ ェ ク ト サー
バー イ ン プ リ メ ン テーシ ョ ン です。 一般的に、 MTS への参照 (Microsoft
お よ び Pervasive ド キ ュ メ ン ト にあ る ) が COM+ サービ ス に よ っ て置き 換
え ら れます。
Pervasive の OLE DB プ ロ バ イ ダは COM+ サー ビ ス でサポー ト さ れ ま す。
COM+ サービ ス内で行われ る ADO 呼び出 し はその他すべての ADO ク ラ
イ ア ン ト 呼び出 し と 同様に動作 し ます。
Visual Basic プ ログ ラ マのための COM+ サービ スの例
Visual Basic プ ロ グ ラ マは、 MTSTransactionMode プ ロ パテ ィ に通 じ てい る
必要 が あ り ま す。 こ の プ ロ パ テ ィ に NoTransactions 以外 を 設定す る と 、
Microsoft Transactions を 起動 し ま す。 こ の機能 の詳細につ い て は COM+
サービ ス のマニ ュ アルを参照 し て く だ さ い。
次の例は Microsoft Transactions の使用法を示 し ます。GetObjectContext の呼
び出しを成功させるには、 MTSTransactionMode プ ロ パテ ィ に NoTransactions
以 外 を 設 定 す る 必 要 が あ り ま す。 Microsoft Transactions を 使用す る と 、
Microsoft Transaction Coordinator が 2 段階のコミットを行えるようになります。
2-14
COM+ サービ スのサポー ト
Public Function UpdatePayroll(employeeID As
Integer, salary As Currency)
On Error GoTo ErrHandler
Dim rs As New ADODB.Recordset
rs.Index = "employeeID"
rs.Open "PayrollTable",
"Provider=PervasiveOLEDB;Data Source=CompanyDB",
adOpenDynamic, adLockOptimistic, adCmdTableDirect
rs.Seek employeeID, adSeekFirstEQ
If rs.EOF = True Then
GetObjectContext.SetAbort
Else
rs!salary = salary
End If
rs.Update
rs.Close
rs = Nothing
GetObjectContext.SetComplete
Exit Function
ErrHandler:
GetObjectContext.SetAbort
If Not IsNull(rs) Then
If rs.State = adStateOpen Then
rs.Close
End If
End If
rs = Nothing
End Function
ただ し 、 ADO ト ラ ンザ ク シ ョ ン (接続オブジ ェ ク ト を使用) を使用 し て こ
の ビ ジ ネ ス オ ブ ジ ェ ク ト を 書 き 換 え る こ と が で き ま す。 こ れ に よ り 、
MTSTransactionMode プ ロ パテ ィ に NoTransactions を設定で き る よ う にな り
ます。 Microsoft Transactions を使用 し なければ、 2 段階 コ ミ ッ ト に よ る オー
バーヘ ッ ド を避け る こ と がで き ます。 ま た、 ト ラ ンザ ク シ ョ ン をサポー ト
し ないオブジ ェ ク ト は メ モ リ に常駐 さ せ る こ と がで き る のに対 し 、 ト ラ ン
ザ ク シ ョ ン をサポー ト す る オブジ ェ ク ト は参照 さ れ る ご と に作成お よ び破
棄 さ れます。
Public Function UpdatePayroll(employeeID As
Integer, salary As Currency)
On Error GoTo ErrHandler
Dim cn As New Connection
Dim rs As New ADODB.Recordset
cn.Open "Provider=PervasiveOLEDB;Data
Source=CompanyDB"
cn.BeginTrans
2-15
Pervasive OLE DB プ ロバイ ダによ る プ ログ ラ ミ ング
rs.Index = "employeeID"
rs.Open "PayrollTable", cn, adOpenDynamic,
adLockOptimistic, adCmdTableDirect
rs.Seek employeeID, adSeekFirstEQ
If rs.EOF = True Then
cn.RollbackTrans
Else
rs!salary = salary
End If
rs.Update
rs.Close
cn.CommitTrans
Exit Function
ErrHandler:
cn.RollbackTrans
If Not IsNull(rs) Then
If rs.State = adStateOpen Then
rs.Close
End If
End If
End Function
2-16
Execute メ ソ ッ ド (ADO コ マ ン ド )
Execute メ ソ ッ ド (ADO コ マ ン ド )
Pervasive OLE DB プ ロ バ イ ダ を使用す る 場合、 コ マ ン ド の Execute メ ソ ッ
ド の RecordsAffected パ ラ メ ー タ はオペレーシ ョ ンの種類に基づ き 、異な る
結果を返 し ます。
SELECT オペレーシ ョ ン
SELECT ス テー ト メ ン ト を実行す る 場合、 RecordsAffected は -1 (マ イ ナ ス
1) を返 し 、 こ のオプシ ョ ンがサポー ト さ れていない こ と を示 し ます。 た と
えば、 次の よ う にな り ます。
cn.Open "Provider=PervasiveOLEDB;Data Source=TestData;"
SQLst = "Select * From MyData”
cmd.ActiveConnection = cn
cmd.CommandText = SQLst
Set rs = cmd.Execute(RecordsAffected)
こ の場合、 RecordsAffected が -1 に等 し く な り ます。
SELECT ク エ リ が返す レ コ ー ド 数 を 取得 し た い場合は、 次の例の よ う に
RecordCount プ ロ パテ ィ を使用 し ます。
recordcount = rs.RecordCount
' Mydata の レ コ ー ド 数
Batch Insert、 Update および Delete
RecordsAffected は、 Batch Insert、 Update、 Delete を実行 し た と き に、 オペ
レーシ ョ ンが影響 し た正確な レ コ ー ド 数を返 し ます。
例 - Batch Insert
cn.Open "Provider=PervasiveOLEDB;Data Source=TestData;"
SQLst = "Insert into MyData(utinyint_,
usmallint_,uinteger_, ubigint_, char_, character_,
bit_) Values (1, 12, 13, 100, 'testdata', 'chardata',
1)”
cmd.ActiveConnection = cn
cmd.CommandText = SQLst
cmd.Execute RecordsAffected
こ の場合 RecordsAffected は 1 に等 し く な り ます。
2-17
Pervasive OLE DB プ ロバイ ダによ る プ ログ ラ ミ ング
例 - Batch Update
SQLst = "Update MyData set char_ = ‘SampleTest’
uinteger_ = 13"
cmd.ActiveConnection = cn
cmd.CommandText = SQLst
cmd.Execute RecordsAffected
where
こ の場合、 RecordsAffected は x に等 し く な り 、 13 と い う 値を持つすべての
レ コ ー ド 数にな り ます。
2-18
ADO/OLE DB リファレンス情報
3
OLE DB プ ロ バ イ ダの使用を始め る
こ の章では、 Pervasive の ADO イ ン タ ーフ ェ イ ス について説明 し ます。 こ
の章では、 以下の項目について説明 し ます。
„
「Pervasive PSQL OLE DB プ ロ グ ラ ミ ン グ用の Visual Basic のセ ッ ト
ア ッ プ」 (3-2 ページ)
„
「接続の作成」 (3-5 ページ)
„
「名前付 き デー タ ベース を使っ た レ コ ー ド セ ッ ト の作成」 (3-6 ページ)
„
「パス を使っ た レ コ ー ド セ ッ ト の作成」 (3-7 ページ)
„
「Location パ ラ メ ー タ を使っ た レ コ ー ド セ ッ ト の作成」 (3-8 ページ)
„
「既存の接続を使用 し た レ コ ー ド セ ッ ト の作成」 (3-9 ページ)
„
「デー タ 間の移動お よ びデー タ 操作」 (3-10 ページ)
„
「レ コ ー ド の検索」 (3-12 ページ)
„
「バ ッ チ更新ま たは即時更新の選択」 (3-13 ページ)
„
「ADO オブジ ェ ク ト の使用」 (3-15 ページ)
„
「ブ ッ ク マー ク の使用」 (3-16 ページ)
„
「 イ ベン ト の使用」 (3-17 ページ)
„
「Field オブジ ェ ク ト の使用」 (3-18 ページ)
„
「 ト ラ ンザ ク シ ョ ンの使用」 (3-19 ページ)
3-1
ADO/OLE DB リ フ ァ レ ン ス情報
Pervasive PSQL OLE DB プ ログ ラ ミ ン グ用の Visual Basic の
セッ トアップ
こ のセ ク シ ョ ンには、Pervasive OLE DB プ ロ バ イ ダ を Visual Basic 開発環境
に組み込むのに役立つ情報が含まれてい ます。
非ビ ジ ュ アル プ ログ ラ ミ ング
こ の手順は、 ビ ジ ュ アル コ ン ト ロ ール オブジ ェ ク ト を使用 し ない ADO と
OLE DB でのプ ロ グ ラ ミ ン グの方法を示 し てい ます。
¾Visual Basic で OLE DB 用のプ ロ グ ラ ミ ン グを行 う には
1
VB 6 で新 し いプ ロ ジ ェ ク ト を開 き ます。
2
[プ ロ ジ ェ ク ト |参照設定] の メ ニ ュ ー項目を ク リ ッ ク し 、参照設定の
ダ イ ア ロ グ を表示 し ます。
3
"Microsoft ActiveX Data Objects 2.1 Library" ま たは "Microsoft ActiveX
Data Objects 2.5 Library" が選択 さ れてい る こ と を確認 し て [OK] を ク
リ ッ ク し ます。
4
フ ォームに 3 つのテ キ ス ト ボ ッ ク ス を追加 し ます。
5
コード ウィンドウを表示し、以下の コ ー ド を使用 し て グ ロ ーバル レ コ ー ド
セ ッ ト オブジ ェ ク ト を割 り 当て ます( こ れは General::Declarations コ ー
ド 領域に入れ る 必要があ り ます)。
Dim myData as New ADODB.Recordset
6
Form::Load 上に レ コ ー ド セ ッ ト を作成す る には、 Form_Load イ ベン ト
に次の コ ー ド を記述 し て く だ さ い (DemoData は DBNAMES エン ト リ
と し て設定 し て あ り 、 Person フ ァ イ ルを使用 し ます)。
myData.CursorLocation = adUseServer
myData.Open "Person", "Provider=PervasiveOLEDB;Data
Source=DemoData", adOpenDynamic,
adLockOptimistic, adCmdTableDirect
7
見つか っ た レ コ ー ド を表示す る ために、 以下のサブルーチン を作成 し
ます。
Private Sub DisplayFields()
Text1 = myData.Fields(0)
Text2 = myData.Fields(1)
Text3 = myData.Fields(2)
End Sub
3-2
Pervasive PSQL OLE DB プ ログ ラ ミ ング用の Visual Basic のセ ッ ト ア ッ プ
8
フ ォームに 4 つのボ タ ン を追加 し 、 以下の コ ー ド を追加 し ます。
Private Sub Command1_Click()
myData.MoveFirst
DisplayFields
End Sub
Private Sub Command2_Click()
myData.MovePrevious
DisplayFields
End Sub
Private Sub Command3_Click()
myData.MoveNext
DisplayFields
End Sub
Private Sub Command4_Click()
myData.MoveLast
DisplayFields
End Sub
9
フ ォ ー ム が ロ ー ド さ れ た と き に最初の レ コ ー ド を 取得す る た め に、
Form_Load の最後に次の行を追加 し ます。
Command1_Click
10 アプ リ ケーシ ョ ン を実行す る と 、 デー タ 間を移動す る ためのボ タ ン を
使用す る こ と がで き る よ う にな り ます。 分か り やす く す る ためにボ タ
ンの タ イ ト ルや名前を変更す る こ と も で き ます。
11 更新機能を追加す る ためには、 フ ォームに別のボ タ ン を配置 し 、 その
ボ タ ンのキ ャ プシ ョ ン を " 更新 " に、オブジ ェ ク ト 名を "btnUpdate" に
し ます。
12 以下の コ ー ド を追加す る と 、 ユーザーは最初の フ ィ ール ド を更新で き
な く な り ます。 並行モー ド は adLockOptimistic なので、 更新はカー ソ
ルが現在の行か ら 移動 し た と き に自動的に適用 さ れます。 ま た、 更新
はカー ソ ルの位置に関係な く 更新す る のに使用す る こ と も で き ます。
Private Sub btnUpdate_Click()
myData.Fields(1) = Text2
myData.Fields(2) = Text3
End Sub
3-3
ADO/OLE DB リ フ ァ レ ン ス情報
ビ ジ ュ アル プ ログ ラ ミ ング
Pervasive プ ロ バ イ ダには初期化に必須のプ ロ パテ ィ が 1 つあ り ます。 それ
は、 DataSource プ ロ パテ ィ です。 OLE DB プ ロ バ イ ダは DSN を使用 し ない
ので、 DataSource プ ロ パテ ィ にはデー タ ベース名の値を設定す る 必要があ
り ま す。 た と え ば、 ADO の Connection::Open コ マ ン ド の接続文字列は、
「Provider=PervasiveOLEDB;Data Source=<data store>」にな り ます。こ の <data
store> はデー タ ベース名にな り ます。
¾ プ ロバイ ダ を使用 し て Visual Basic でグ リ ッ ド を埋めるには
1
Visual Basic 6 を起動 し ます。
2
標準プ ロ ジ ェ ク ト を開始 し ます。
3
[プ ロ ジ ェ ク ト ] 、 [ コ ン ポーネ ン ト ] の メ ニ ュ ー オプシ ョ ン を ク リ ッ
ク し て [ コ ン ポーネ ン ト ] ダ イ ア ロ グ を表示 し ます。
4
次の コ ン ポーネ ン ト のチ ェ ッ ク ボ ッ ク ス を ク リ ッ ク し 、[OK]を ク リ ッ
ク し ます。
Š
Microsoft ADO Data Control 6.0 (OLEDB)
Š
Microsoft DataGrid Control 6.0 (OLEDB)
5
フ ォーム上にそれぞれの コ ン ト ロ ールの コ ピーを ド ラ ッ グ ア ン ド ド
ロ ッ プ し ます。
6
デー タ コ ン ト ロ ール上を マ ウ ス の右ボ タ ンで ク リ ッ ク し 、 ポ ッ プア ッ
プ メ ニ ュ ーで [ADODC のプ ロ パテ ィ ] を ク リ ッ ク し ます。
7
[作成] を ク リ ッ ク し 、 接続文字列構築を呼び出 し ます。
8
一覧か ら 、 "Pervasive OLE DB Provider" を選び、 [次へ] を ク リ ッ ク し
ます。
9
DataSource プ ロ パテ ィ のためのデー タ ベース名エン ト リ ま たはパ ス名
を入力 し ます。
10 [OK] を ク リ ッ ク し ます。
11 [ADODC のプ ロ パテ ィ ] ダ イ ア ロ グ ボ ッ ク ス の [レ コ ー ド ソ ース]
タ ブ を ク リ ッ ク し ます。
12
ド ロ ッ プダ ウ ン リ ス ト を使っ て、 コ マ ン ド タ イ プ を "adCmdTable" に
変更 し ます。
13 テーブル名を入力す る か、 ド ロ ッ プダ ウ ン リ ス ト か ら テーブルを 1 つ
を選択 し て [OK] を ク リ ッ ク し ます。
14 グ リ ッ ド を選択 し 、 F4 を使っ てプ ロ パテ ィ を編集 し ます。
15
ド ロ ッ プダ ウ ン リ ス ト を使っ て、 DataSource プ ロ パテ ィ を "Adodc1"
に変更 し ます。
16 アプ リ ケーシ ョ ン を実行 し ます。
3-4
接続の作成
接続の作成
接続を作成す る には、 CursorLocation を設定 し 、 ConnectionString を設定 し
て Open を呼び出すか、 ま たは Open 呼び出 し で接続文字列を指定 し ます。
cn.ConnectionString = "Provider=PervasiveOLEDB;Data
Source=Demodata"
cn.CursorLocation = adUseServer
cn.Open
ま たは
cn.CursorLocation = adUseServer
cn.Open "Provider=PervasiveOLEDB;Data Source=Demodata"
3-5
ADO/OLE DB リ フ ァ レ ン ス情報
名前付き デー タ ベース を使っ た レ コ ー ド セ ッ ト の作成
名前付 き デー タ ベース は Pervasive PSQL Control Center で作成す る こ と がで
き ます。
Control Center のエ ク ス プ ロ ー ラ 内で、 デー タ ベース を作成す る デー タ ベー
ス エン ジ ン を右 ク リ ッ ク し 、[新規作成|デー タ ベース] を選択 し ます。 こ
れは、 アプ リ ケーシ ョ ン を中断す る こ と な く 必要に応 じ てデー タ を移動で
き る ので、 デー タ ス ト ア を指定する 好ま し い方法です。 アプ リ ケーシ ョ ン
か ら 新 し いデ ィ レ ク ト リ を 指すた めに必要な のは、 サーバーで名前付 き
デー タ ベース のパス変更す る こ と だけです。 それぞれの ク ラ イ ア ン ト コ ン
ピ ュ ー タ で再設定を行 う のではな く 、 1 つの簡単な作業で済みます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data
Source=Demodata", adOpenDynamic, adLockBatchOptimistic,
adCmdTableDirect
3-6
パス を使っ た レ コ ー ド セ ッ ト の作成
パス を使っ た レ コ ー ド セ ッ ト の作成
ア プ リ ケーシ ョ ン にパ ス を ハー ド コ ーデ ィ ン グす る こ と はお勧め し ま せ
ん。 し か し 、 アプ リ ケーシ ョ ンで レ ジ ス ト リ エン ト リ ま たは環境変数か ら
パス を取得す る こ と がで き 、 次の よ う な文字列を作成で き る 場合は、 パ ス
を使用す る こ と で、名前付 き デー タ ーベース を定義する こ と な く デー タ ス
ト アに簡単にア ク セ スす る こ と がで き ます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data
Source=C:\Pvsw\Demodata", adOpenDynamic,
adLockBatchOptimistic, adCmdTableDirect
3-7
ADO/OLE DB リ フ ァ レ ン ス情報
Location パラ メ ー タ を使っ た レ コ ー ド セ ッ ト の作成
ア プ リ ケーシ ョ ン でパ ス を コ ー ド 記述す る のではな く 、 接続文字列内で
Location パ ラ メ ー タ を使用 し て リ モー ト デー タ ベース に接続す る こ と がで
き ます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data
Source=DEMODATA;Location=MyRemoteServer",
adOpenDynamic, adLockBatchOptimistic, adCmdTableDirect
3-8
既存の接続を使用 し た レ コ ー ド セ ッ ト の作成
既存の接続を使用 し た レ コ ー ド セ ッ ト の作成
接続を作成 し 、 その接続を使用 し て複数の レ コ ー ド セ ッ ト を作成す る こ と
がで き ます。 こ れは、 各レ コ ー ド セ ッ ト に個別の接続を作成す る よ り も 効
率的です。
rs.Open "Course", MyExistingConnection, adOpenDynamic,
adLockBatchOptimistic, adCmdTableDirect
3-9
ADO/OLE DB リ フ ァ レ ン ス情報
デー タ 間の移動およびデー タ 操作
レ コ ー ド セ ッ ト を一度開 く と 、Move x、MoveFirst、MoveNext、MovePrevious
お よ び MoveLast を使用 し てデー タ 間を移動す る こ と がで き ます。 Move メ
ソ ッ ド では 1 つのパ ラ メ ー タ が必要です。 こ のパ ラ メ ー タ は移動す る レ
コ ー ド 数を指 し ます。 負の数を指定す る と 、 カー ソ ルは レ コ ー ド セ ッ ト の
後方に (最初の レ コ ー ド に向か っ て) 移動 し ます。
レ コ ー ド の追加
新 し い レ コ ー ド を追加す る には、AddNew メ ソ ッ ド を使用 し ます。パ ラ メ ー
タ は必要あ り ませんが、 呼び出 し の中で フ ィ ール ド と 値を指定す る こ と が
で き ます。 カー ソ ルは新たに追加 さ れ る レ コ ー ド を指すので、 移動す る こ
と な く 、 直ちにその フ ィ ール ド への更新を行 う こ と がで き ます。
メ モ Update ま たは UpdateBatch を呼び出す前に、ヌ ル値を許可 し ない
フ ィ ール ド に対 し ては値を入れてお く 必要があ り ます。
即時更新モー ド では、 空の レ コ ー ド がデー タ ス ト アに書き 込まれ、 フ ィ ー
ル ド への更新がその ま ま保存 さ れます。バ ッ チ更新モー ド では、空の レ コ ー
ド を作成 し ますが、 その レ コ ー ド は Update ま たは UpdateBatch が呼び出 さ
れ る ま で書 き 込まれません。
rs.Open "Course", "Provider=PervasiveOLEDB;Data
Source=Demodata", adOpenDynamic, adLockBatchOptimistic,
adCmdTableDirect
rs.AddNew
rs!Field1 = 0
rs!Field2 = "TextValue"
rs.UpdateBatch
rs.Close
ま たは
rs.Open "Course", "Provider=PervasiveOLEDB;Data
Source=Demodata", adOpenDynamic, adLockBatchOptimistic,
adCmdTableDirect
rs.AddNew Array("Field1", "Field2"), Array(0,
"TextValue")
rs.UpdateBatch
rs.Close
3-10
デー タ 間の移動およびデー タ 操作
レ コ ー ド の削除
レ コ ー ド を削除す る には、 Delete メ ソ ッ ド を使用 し ます。 オプシ ョ ン パ ラ
メ ー タ が 1 つあ り ま す。 こ のパ ラ メ ー タ は削除す る レ コ ー ド を指 し ま す。
現在、 Pervasive プロバイダでサポートするのはデフ ォ ル ト の adAffectCurrent
のみです。
rs.Open "Course", "Provider=PervasiveOLEDB;Data
Source=Demodata", adOpenDynamic, adLockOptimistic,
adCmdTableDirect
' 削除す る レ コ ー ド へ移動す る
rs.Delete adAffectCurrent
rs.Close
レ コ ー ド の更新
レ コ ー ド を更新す る には、 適切な フ ィ ール ド に、 希望す る 値を割 り 当てた
後で Update ま たは UpdateBatch を呼び出 し ます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data
Source=Demodata", adOpenDynamic, adLockBatchOptimistic,
adCmdTableDirect
' 更新す る レ コ ー ド へ移動す る
rs!Field4 = "Changed text"
rs.UpdateBatch
rs.Close
3-11
ADO/OLE DB リ フ ァ レ ン ス情報
レ コ ー ド の検索
レ コ ー ド の検索に使用す る メ ソ ッ ド は、 レ コ ー ド セ ッ ト の設定に よ っ て異
な り ます。 動的な レ コ ー ド セ ッ ト の場合、 Pervasive では Index プ ロ パテ ィ
と Seek メ ソ ッ ド をサポー ト し ます。
Sort メ ソ ッ ド と Find メ ソ ッ ド (静的な ク ラ イ ア ン ト 側のカー ソ ルでのみ動
作) は Pervasive OLE DB プ ロ バ イ ダで提供 さ れてい ますが、 現在はサポー
ト さ れてお ら ず、 Pervasive では こ れ ら を使用 し てい ません。 すべての検索
お よ び ソ ー ト において、 Index メ ソ ッ ド と Seek メ ソ ッ ド の方が信頼性が高
く 、 Pervasive エン ジ ン を直接使用 し ます。 こ れに よ り 、 ク ラ イ ア ン ト 側の
レ イ ヤの使用に際 し てパフ ォーマ ン ス が向上 し ます。
メ モ Seek メ ソ ッ ド を 使用す る には、 レ コ ー ド セ ッ ト を 開 く と き に
dCmdTableDirect を指定する 必要があ り ます。
Seek メ ソ ッ ド では、 検索す る 値を含むバ リ ア ン ト 配列が必要です。 1 つま
たは複数の列で構成 さ れ る イ ンデ ッ ク スお よ びその値を含む配列を、 それ
ぞれ対応す る 列で比較 し ます。 こ のため、 セグ メ ン ト イ ンデ ッ ク ス があ る
場合、 現在の イ ンデ ッ ク ス に含まれ る セグ メ ン ト 数 と 等 し い要素数でバ リ
ア ン ト 配列を宣言す る 必要があ り ます。
rs.Open "Person", "Provider=PervasiveOLEDB;Data
Source=Demodata", adOpenDynamic, adLockBatchOptimistic,
adCmdTableDirect
Dim VariantArray (1) as Variant
VariantArray(0) = "CA"
VariantArray(1) = "Sacramento"
rs.Index = "State_City"
rs.Seek VariantArray adSeekFirstEQ
rs.Close
3-12
バ ッ チ更新または即時更新の選択
バ ッ チ更新または即時更新の選択
ADO のデフ ォ ル ト の ロ ッ ク タ イ プは読み取 り 専用です。 こ の ロ ッ ク タ イ
プの変更は、 レ コ ー ド セ ッ ト の Open 呼び出 し で ロ ッ ク タ イ プ パ ラ メ ー タ
を指定 し 、 レ コ ー ド セ ッ ト にその変更を書 き 込むのに使用す る メ ソ ッ ド を
適用す る こ と に よ っ て変更で き ます。
レ コ ー ド セ ッ ト を更新す る には、 即時更新モー ド 、 単一行バ ッ チ更新モー
ド 、 ま たは複数行バ ッ チ更新モー ド のいずれか を使用する ために ロ ッ ク タ
イ プ を変更 し ます。
即時更新モー ド
Pervasive.SQL V8 よ り 前 の OLE DB プ ロ バ イ ダ で は ロ ッ ク タ イ プ に
adLockPessimistic をサポー ト し てい ませんで し た。 ロ ッ ク タ イ プ を指定 し
ない場合、 Update メ ソ ッ ド は必要な く 、 更新はフ ィ ール ド 単位でデー タ ス
ト アに書 き 込まれます。 こ の方法は効率が悪いので、 その他の ロ ッ ク タ イ
プが特定のアプ リ ケーシ ョ ンで受け入れ ら れない こ と が判明 し てい る 場合
以外は使用 し ないで く だ さ い。
バ ッ チ更新モー ド
バ ッ チ更新モー ド には、 単一行 と 複数行があ り ます。
単一行のバ ッ チ更新モー ド
ロ ッ ク タ イ プに adLockOptimistic を 使用 し た場合、 変更の書 き 込みには
Update メ ソ ッ ド を使用 し 、 一度に 1 つの レ コ ー ド を処理す る コ ー ド を記述
す る 必要があ り ます。ADO を レ コ ー ド セ ッ ト 内のほかの行で動作 さ せ る オ
ペレーシ ョ ン、 ま たは現在行を リ フ レ ッ シ ュ さ せ る オペレーシ ョ ンはいず
れ も 、 ADO の暗黙的な Update 呼び出 し を ト リ ガ し ます。 ただ し 、 こ れは
即時更新モー ド よ り も 非常に効率的です。 以下に、 即時更新モー ド を使用
し て レ コ ー ド セ ッ ト を開 く 例を示 し ます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data
Source=Demodata", adOpenDynamic, adLockOptimistic,
adCmdTableDirect
複数行のバ ッ チ更新モー ド
ロ ッ ク タ イ プに adLockBatchOptimistic を使用 し た場合、変更の書 き 込みに
は UpdateBatch メ ソ ッ ド を使用 し 、 一度に複数レ コ ー ド の変更処理を行 う
コ ー ド を記述す る こ と がで き ます。
3-13
ADO/OLE DB リ フ ァ レ ン ス情報
こ れはパフ ォーマ ン ス の点か ら 見れば最良の ロ ッ ク タ イ プですが、 アプ リ
ケーシ ョ ン設計で ADO が一度に複数行を キ ャ ッ シ ュ し て更新で き る よ う
にす る 必要があ り ます。 こ の ロ ッ ク タ イ プが必ず し も 、 マルチユーザー、
スループ ッ ト の大 き いアプ リ ケーシ ョ ンに適 し てい る と は限 り ません。 以
下に、 バ ッ チ更新モー ド を使用 し て レ コ ー ド セ ッ ト を開 く 例を示 し ます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data
Source=Demodata", adOpenDynamic, adLockBatchOptimistic,
adCmdTableDirect
3-14
ADO オブ ジ ェ ク ト の使用
ADO オブ ジ ェ ク ト の使用
ADO ではオブジ ェ ク ト を使っ てデー タ にア ク セ ス し 、 そのデー タ を ユー
ザーに提供 し ます。 Microsoft ADO Data Control を使用 し てい る 場合は、 接
続 と レ コ ー ド セ ッ ト オブ ジ ェ ク ト の イ ン ス タ ン ス を作成す る 必要はあ り
ません。 ただ し 、 接続 と レ コ ー ド セ ッ ト の作成 と 破棄を直ちに行 う よ う に
す る 場合は、 イ ン ス タ ン ス を作成 し てか ら 、 後でオブジ ェ ク ト を破棄す る
必要が あ り ま す。 さ ら に、 現在出荷 さ れ て い る バー ジ ョ ン の ADO Data
Control では、 コ ー ド か ら レ コ ー ド セ ッ ト を作成 し 、 コ ー ド 内で こ の レ コ ー
ド セ ッ ト に ADO Data Control の Recordset プ ロ パテ ィ を設定す る 場合にの
み ADO 2.1 の機能 ( イ ンデ ッ ク ス サポー ト な ど) を使用 し ます (ま た、 こ
れはデフ ォ ル ト の ADO2.0 ではな く 、 ADO 2.1 を含め る プ ロ ジ ェ ク ト 参照
の変更 も 必要です)。
オブジ ェ ク ト の イ ン ス タ ン ス を作成す る 場合は、 New キーワー ド を使用 し
ます。 オブジ ェ ク ト の宣言で次の よ う に記述 し ます。
Dim cn as New ADODB.Connection
Dim rs as New ADODB.Recordset
使用す る 直前で次の よ う に記述 し ます。
Dim
Dim
Set
Set
cn
rs
cn
rs
as ADODB.Connection
as ADODB.Recordset
= New ADODB.Connection
= New ADODB.Connection
こ れ ら のオブジ ェ ク ト を破棄す る には、 次の よ う に記述 し ます。
Set rs = Nothing
Set cn = Nothing
3-15
ADO/OLE DB リ フ ァ レ ン ス情報
ブ ッ ク マー ク の使用
ADO で使用す る ブ ッ ク マー ク は、文書の中で使用す る 通常のブ ッ ク マー ク
と 同 じ で、後でその場所を見つけ る こ と がで き ます。 こ れは、デー タ ーベー
ス内を検索す る 場合、 ま たは複数のテーブルを使用す る 場合には特に便利
です。 バ リ ア ン ト 変数を使用 し てブ ッ ク マー ク を保存 し ます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data
Source=Demodata", adOpenDynamic, adLockBatchOptimistic,
adCmdTable
' ブ ッ ク マー ク を付け る 場所へ移動す る
SaveMyPlace = rs.Bookmark
' その他の処理を行っ て、 再びブ ッ ク マー ク を付けた場所を検索す る
rs.Bookmark = SaveMyPlace
rs.Close
ヒ ン ト Find メ ソ ッ ド の使用については、 「レ コ ー ド の検索」 を参照 し
て く だ さ い。
3-16
イ ベン ト の使用
イ ベン ト の使用
メ モ : ADO イ ベン ト を使用する 際は、 1 つの イ ベン ト でほかの イ ベン ト を
生成す る 呼び出 し を行わない よ う 十分に注意す る 必要があ り ます。こ れは、
無限ループに陥 る 可能性が高 く な る か ら です。 無限ループが発生す る 例を
よ り 具体的に挙げ る と 、 MoveComplete イ ベン ト の代わ り に、 WillMove イ
ベン ト を使用 し て フ ァ イ ルの最後 (EOF) 条件を処理す る 場合です。
Private Sub Adodc1_WillMove(ByVal adReason As
ADODB.EventReasonEnum, adStatus As
ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
If Adodc1.Recordset.EOF Then
Adodc1.Recordset.MoveLast
End Sub
こ の コ ー ド では、 無限ループに陥 り 、 その結果 メ モ リ がいっぱいにな っ て
ス タ ッ ク 領域が不足す る エ ラ ーが発生 し ます。こ のエ ラ ーを回避す る には、
Adodc1_MoveComplete イ ベン ト を使用 し なければな り ません。
3-17
ADO/OLE DB リ フ ァ レ ン ス情報
Field オブ ジ ェ ク ト の使用
レ コ ー ド セ ッ ト 内の フ ィ ール ド に値を割 り 当て る 場合は、 レ コ ー ド セ ッ ト
名、 感嘆符 (!) お よ びフ ィ ール ド を参照す る フ ィ ール ド 名に よ っ て指定す
る こ と がで き ます。 フ ィ ール ド は番号で参照す る こ と も で き ます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data
Source=Demodata", adOpenDynamic, adLockBatchOptimistic,
adCmdTableDirect
rs.Fields(8).Value = "Sacramento"
rs!State = "CA"
rs.UpdateBatch
rs.Close
ま た、 Field オブジ ェ ク ト のほかのプ ロ パテ ィ を使っ て、 フ ィ ール ド に格納
さ れ て い る デ ー タ の 詳 細 情 報 を 調 べ る こ と も で き ま す。 た と え ば、
ActualSize ではフ ィ ール ド 内のデー タ の長 さ を、OriginalValue では レ コ ー ド
セ ッ ト の こ の イ ン ス タ ン ス で行っ た変更前の元の値を、 そ し て Type では
デー タ 型を知る こ と がで き ます (あ る フ ィ ール ド の値 と 別の フ ィ ール ド の
値ま たは メ モ リ 内の値 と を比較す る 方法を調べ る 場合に便利です)。
3-18
ト ラ ンザク シ ョ ンの使用
ト ラ ンザク シ ョ ンの使用
ト ラ ン ザ ク シ ョ ンは、 Connection オブジ ェ ク ト を使っ て ADO 内に実装 さ
れてい ます。ト ラ ンザ ク シ ョ ン用に使用で き る メ ソ ッ ド は次の と お り です。
„
BeginTrans
„
CommitTrans
„
RollbackTrans
こ れ ら の メ ソ ッ ド にはパ ラ メ ー タ があ り ません。
ヒ ン ト ト ラ ンザ ク シ ョ ン を使用す る ためには、 接続を作成 し 、 その
接続を使っ て レ コ ー ド セ ッ ト を作成す る 必要があ り ます。
3-19
ADO/OLE DB リ フ ァ レ ン ス情報
3-20
Pervasive PSQL OLE DB プ ロ
バイ ダのイ ン プ リ メ ン テー
ション
4
Pervasive の ADO イ ン タ ーフ ェ イ ス の説明
こ の章では、 以下の項目について説明 し ます。
„
「Pervasive PSQL OLE DB プ ロ バ イ ダの イ ンプ リ メ ン テーシ ョ ン リ
フ ァ レ ン ス」 (4-2 ページ)
„
「ADOX イ ンプ リ メ ン テーシ ョ ン リ フ ァ レ ン ス」 (4-9 ページ)
„
「Visual Studio.NET イ ンプ リ メ ン テーシ ョ ン リ フ ァ レ ン ス」 (4-13 ペー
ジ)
4-1
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン
リ フ ァ レンス
こ のセ ク シ ョ ンでは、 Pervasive の OLE DB プ ロ バ イ ダの イ ンプ リ メ ン テー
シ ョ ンに関す る 詳細を リ ス ト し ます。
メ モ 非同期のオペレーシ ョ ンはサポー ト さ れません。
コ マン ド
メソッド
サポー ト
„
CreateParameter
„
Execute
非サポー ト
„
Cancel
プ ロパテ ィ
サポー ト
„
ActiveConnection
„
CommandText
„
CommandType
„
Name
„
Parameters
„
Prepared
„
Properties
„
State
Connection
メソッド
サポー ト
„
4-2
BeginTrans (ネ ス ト さ れた ト ラ ンザ ク シ ョ ン を含む)
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン リ フ ァ レ ン ス
„
Close
„
CommitTrans
„
Execute
„
Open
Š
adConnectUnspecified
„
OpenSchema
„
RollbackTrans
非サポー ト
„
Cancel
プ ロパテ ィ
サポー ト
„
Attributes
„
ConnectionString
„
CursorLocation
Š
adUseClient は、 Microsoft の ク ラ イ ア ン ト カー ソ ル エン ジ ンにつ
いて調査 し てか ら 使用 し なければな り ません。
„
Errors
„
IsolationLevels
Š
„
adXactRepeatableRead と adXactSerializable
Mode
Š
adModeReadWrite
„
Properties
„
Provider
„
Version
非サポー ト
„
CommandTimeout
„
ConnectionTimeout
„
DefaultDatabase
イ ベン ト
サポー ト
„
CommitTransComplete
„
ConnectComplete
„
Disconnect
4-3
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン
„
ExecuteComplete
„
EndOfRecordset
„
FieldChangeComplete
„
MoveComplete
„
RollbackTransComplete
„
WillExecute
„
WillChangeField
„
WillConnect
„
WillMove
非サポー ト
„
InfoMessage
Field
メソッド
サポー ト
„
AppendChunk
„
GetChunk
プ ロパテ ィ
サポー ト
„
4-4
ActualSize
Š
こ れはデー タ ベース に保持す る サ イ ズ を指定 し ます。
Š
こ れは LongVarBinary と LongVarChar でち ょ う ど 65K にな り 、 そ
の後、 その長 さ は GetChunk を使っ た場合にのみ見つけ る こ と が
で き ます。
„
Attributes
„
DataFormat
„
DefinedSize
„
Name
„
NumericScale
„
OriginalValue
„
Precision
„
Properties
„
Status
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン リ フ ァ レ ン ス
„
Type
„
Value
非サポー ト
„
UnderlyingValue
Fields
メソッド
非サポー ト
„
Append
„
CancelUpdate
„
Delete
„
Refresh
„
Resynch
„
Update
プ ロパテ ィ
サポー ト
„
Count
„
Item
Parameter
メソッド
サポー ト
„
Appendchunk
プ ロパテ ィ
サポー ト
„
Attributes
„
Direction
„
Name
„
NumericScale
4-5
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン
„
Precision
„
Properties
„
Size
„
Type
„
Value
Record
サポー ト さ れません
Recordset
メソッド
サポー ト
„
AddNew
„
Cancel
„
CancelBatch
„
CancelUpdate
„
Clone
„
Close
„
CompareBookmark
„
Delete
„
Find
„
GetRows
„
GetString
„
Move
„
MoveFirst
„
MoveLast
„
MoveNext
„
MovePrevious
„
Open
„
Resync
„
Save
„
Seek
Š
4-6
adCmdTableDirect を使用 し た場合にサポー ト さ れます
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン リ フ ァ レ ン ス
„
Supports
„
Update
„
UpdateBatch
非サポー ト
„
Requery
プ ロパテ ィ
サポー ト
„
AbsolutePage
„
AbsolutePosition
„
ActiveCommand
„
ActiveConnection
„
BOF
„
Bookmark
„
CacheSize
„
CursorLocation
„
CursorType
Š
adOpenStatic、 adOpenDynamic お よ び adOpenForwardOnly
„
DataSource
„
EditMode
„
EOF
„
Fields
„
Filter
Š
„
Š
„
ビ ュ ーをサポー ト し ません
Index
adCmdTableDirect で使用
Locktype
Š
adLockOptimistic、 adLockBatchOptimistic お よ び adLockReadOnly
„
MarshalOptions
„
MaxRecords
„
PageCount
„
PageSize
„
Properties
„
RecordCount
„
Sort
4-7
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン
„
Source
„
State
„
Status
„
StayInSync
Stream
サポー ト さ れません
4-8
ADOX イ ン プ リ メ ン テーシ ョ ン リ フ ァ レ ン ス
ADOX イ ン プ リ メ ン テーシ ョ ン リ フ ァ レ ン ス
こ のセ ク シ ョ ンでは、 Pervasive の ADOX のサポー ト について説明 し ます。
Catalog
メソッド
非サポー ト
„
Create
„
GetObjectOwner
„
SetObjectOwner
プ ロパテ ィ
サポー ト
„
ActiveConnection
„
Tables
非サポー ト
„
Groups
„
Procedures
„
Users
„
Views
„
Properties
列
メソッド
サポー ト
„
Append
„
Delete
非サポー ト
„
Refresh
4-9
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン
プ ロパテ ィ
サポー ト
„
Count
„
Item
Column
プ ロパテ ィ
サポー ト
„
Attributes
„
DefinedSize
„
Name
„
NumericScale
„
ParentCatalog
„
Precision
„
Properties
„
Type
非サポー ト
„
RelatedColumn
„
SortOrder
Group
サポー ト さ れません
Index
プ ロパテ ィ
サポー ト
4-10
„
Columns
„
IndexNulls
„
Name
„
Properties
„
Unique
ADOX イ ン プ リ メ ン テーシ ョ ン リ フ ァ レ ン ス
非サポー ト
„
Clustered
„
PrimaryKey
イ ンデ ッ ク ス
メソッド
サポー ト
„
Append
„
Delete
非サポー ト
„
Refresh
プ ロパテ ィ
サポー ト
„
Count
„
Item
Connection
非サポー ト
Procedure
非サポー ト
Tables
メソッド
サポー ト
„
Append
„
Delete
非サポー ト
„
Refresh
4-11
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン
プ ロパテ ィ
サポー ト
„
Count
„
Item
Table
プ ロパテ ィ
サポー ト
„
Indexes
„
Name
„
ParentCatalog
„
Type
非サポー ト
4-12
„
DateCreated
„
DateModified
„
Keys
Visual Studio.NET イ ン プ リ メ ン テーシ ョ ン リ フ ァ レ ン ス
Visual Studio.NET イ ン プ リ メ ン テーシ ョ ン リ フ ァ レ ン ス
こ こ では、 Pervasive PSQL で .NET に関 し てサポー ト さ れ る プ ロ パテ ィ と
メ ソ ッ ド の一覧を示 し ます。
OleDbCommand の メ ソ ッ ド
Cancel
CreateParameter
CreateParameter
Dispose
ExecuteNonQuery
メ モ こ の メ ソ ッ ド では DDL ス テー ト メ ン ト の実行時に -1 が返 さ れ
る 必要があ り ます。 Pervasive PSQL OLE DB プ ロ バ イ ダでは 0 が返 さ
れます。
ExecuteReader
CloseConnection
KeyInfo
Default
SingleResutl
SingleRow
ExecuteScalar
Prepare
OleDbCommand のプ ロパテ ィ
Connection
CommandText
CommandTimeout
Transaction
CommandType
Text
Stored Procedure
TableDirect
CommandUpdatedRowSource
OleDbCommandBuilder
すべてサポー ト さ れます。
4-13
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン
OleDbConnection の メ ソ ッ ド
Open
CreateCommand
Close
DatabaseChange
メ モ Pervasive OLEDB では現在の カ タ ロ グ の変更を サポー ト し ま せ
ん。
BeginTransaction
GetOleDbSchemaTable
Columns
Indexes
ProviderTypes
Tables
OleDbConnection のプ ロパテ ィ
ConnectionString
DataBase
DataSource
Provider
ServerVersion
State
OleDbDataAdapter の メ ソ ッ ド
CreateTableMappings
CloneInternals
Fill
FillSchema
GetFillParameters
OnRowUpdated
OleDbDataAdapter のプ ロパテ ィ
MissingMappingsAction
MissingSchemaAction
AcceptChangesDuringFill
DeleteCommand
InsertCommand
SelectCommand
4-14
Visual Studio.NET イ ン プ リ メ ン テーシ ョ ン リ フ ァ レ ン ス
UpdateCommand
TableMappings
Columns
Table
Pervasive OLE DB プ ロバイ ダで テ ス ト し た DataColumn の
プ ロパテ ィ
AllowDBNull
AutoIncrement
AutoIncrementSeed
AutoIncrementStep
ColumnName
DataType
Bit
System.Boolean
Tinyint
System.Int16
Utinyint
System.Byte
Blob
System.Byte[]
Binary(8)
System.Byte[]
Clob
System.String
Char
System.String
Numeric
System.Decimal
BigInt
System.Decimal
UBigInt
System.Decimal
Currency
System.Decimal
Decimal
System.Decimal
Int
System.Int32
UInt
System.Int64
SmallInt
System.Int16
USmallInt
System.Int32
Double
System.Double
Real
System.Single
4-15
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン
ColumnName
DataType
Double
System.Double
Date
System.DateTime
Time
System.TimeSpan
TimeStamp
System.DateTime
VarChar
System.String
Identity
System.Int32
SmallIdentity
System.Int16
MaxLength
ReadOnly
Unique
OleDbDataReader の メ ソ ッ ド
Close
Read
GetBoolean
GetByte(次善策 : GetInt16 を使用)
GetChar (サポー ト さ れません)
GetDateTime
GetDecimal
GetDouble
GetFloat(次善策 : GetDouble を使用)
GetInt16
GetInt32
GetInt64(次善策 : GetDecimal を使用)
GetName
GetSchemaTable
GetString
GetTimeSpan
GetValue
GetValues
IsDBNull:
NextResult
4-16
Visual Studio.NET イ ン プ リ メ ン テーシ ョ ン リ フ ァ レ ン ス
OleDbDataReader のプ ロパテ ィ
Depth
Item
FieldCount
IsClosed
RecordsAffected
Pervasive OLE DB プ ロ バ イ ダ で テ ス ト し た DataSet の メ
ソッド
AcceptChanges
GetChanges
Merge
HasChanges
RejectChanges
Reset
Pervasive OLE DB プ ロバイ ダで テ ス ト し た DataSet のプ ロ
パテ ィ
CaseSensitive
DataSetName
DefaultViewManager
EnforceConstraints
HasErrors
Locale
Table
Pervasive OLE DB プ ロバイ ダで テ ス ト し た DataTable の メ
ソッド
AcceptChanges
Clear
NewRow
Pervasive OLE DB プ ロバイ ダで テ ス ト し た DataTable のプ
ロパテ ィ
ChildRelations
Columns
DataSet
Rows
TableName
4-17
Pervasive PSQL OLE DB プ ロバイ ダのイ ン プ リ メ ン テーシ ョ ン
Pervasive OLE DB プ ロバ イ ダ で テ ス ト し た DataRow の メ
ソッド
AcceptChanges
RejectChanges
Delete
IsNull
4-18
索引
A
ADO.................................................. 1-1, 3-1, 4-1
C
COM+ サービ ス .......................................... 2-14
M
Microsoft Transaction Server ....................... 2-14
MTS .............................................................. 2-14
O
OLE DB ............................................ 1-1, 3-1, 4-1
索引 1
2 索引