OLE DB Provider Guide

Pervasive PSQL v11
OLE DB Provider Guide
Developing Applications Using the Pervasive OLE DB Provider
免責事項
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 2003、Windows 2008、Windows 7、Windows 8、Windows Server 2003、Windows Server
2008、 Windows Server 2012、 Windows XP、 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 2013 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
2014 年 5 月
目次
こ のマニ ュ アルについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
こ のマニ ュ アルの読者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii
こ のマニ ュ アルの構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
表記上の規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x
1
Pervasive OLE DB プ ロバイ ダーの概要 . . . . . . . . . . . . . . . . . . . . . .
1
Pervasive OLE DB プ ロ バ イ ダーの概要
OLE DB プ ロ バ イ ダーの概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
OLE DB プ ロ バ イ ダーのアーキテ ク チ ャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
リ レーシ ョ ナル パフ ォーマ ン ス . .
リ モー ト 接続 . . . . . . . . . . . . .
排他的カー ソ ル . . . . . . . . . . . .
ADO Refresh メ ソ ッ ド のサポー ト . .
以前の OLE DB プ ロ バ イ ダーの確認
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
4
4
4
OLE DB プ ロ バ イ ダー と Visual Studio.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
Visual Studio.NET の ウ ィ ザー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ASP.NET に よ る セキ ュ リ テ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
サポー ト さ れ る オブジ ェ ク ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
7
7
OLE DB のパフ ォーマ ン ス に関す る 考慮点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
キ ャ ッ シ ュ エン ジ ン . . . . . . . . . . . .
最高パフ ォーマ ン ス のナビ ゲーシ ョ ナル
静的カー ソ ル と 動的カー ソ ル . . . . . . .
未使用のサービ ス を使用不可にする . . .
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
.
.
.
.
8
8
8
8
OLE DB プ ロ バ イ ダーの制限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
Pervasive OLE DB プ ロバイ ダーによ る プ ログ ラ ミ ング . . . . . . . . . . . . . 11
Pervasive OLE DB プ ロ バ イ ダーを使用す る ためのプ ロ グ ラ ミ ン グ概念
デー タ ベースへの接続
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
OLE DB プ ロ バ イ ダーへの接続 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
その他の作業 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
リ モー ト 接続 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
サポー ト さ れ る 新 し い構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
以前のバージ ョ ン と の互換性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
排他的カー ソ ル
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
OLE DB 仕様 と 排他的カー ソ ル . . . . . . . . .
排他的カー ソ ルの構文 . . . . . . . . . . . . . .
排他的カー ソ ルの動作の ま と め . . . . . . . . .
排他的カー ソ ルを使っ た Visual Basic サンプル
. . . .
. . . .
. . . .
コー ド
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
14
15
15
15
プ ロ グ ラ ミ ン グ上の注意 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
更新の表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
UNC パ ス ま たはマ ッ プ さ れた ド ラ イ ブを使 う OLE DB プ ロ バ イ ダーの使用
ADO Refresh メ ソ ッ ド のサポー ト 例 . . . . . . . . . . . . . . . . . . . . . . .
静的カー ソ ルでの Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
リ モー ト 接続 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
16
16
17
17
18
iii
目次
テーブル定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
デフ ォ ル ト の ロ ッ ク タ イ プ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
初期化プ ロ パテ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
COM+ サービ ス のサポー ト
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
COM+ サービ ス と は . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Visual Basic プ ロ グ ラ マのための COM+ サービ ス の例 . . . . . . . . . . . . . . . . . . . . . . . . 20
Execute メ ソ ッ ド (ADO コ マ ン ド )
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
SELECT オペレーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
バ ッ チ挿入、 更新お よ び削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3
ADO/OLE DB リ フ ァ レ ン ス情報 . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Pervasive OLE DB プ ロ バ イ ダーを使用 し た一般的な操作の リ フ ァ レ ン ス
OLE DB プ ロ バ イ ダー と Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
非ビ ジ ュ アル プ ロ グ ラ ミ ン グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
ビ ジ ュ アル プ ロ グ ラ ミ ン グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
接続の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
レ コ ー ド セ ッ ト の作成
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
名前付 き デー タ ベース を使用す る
パス を使用す る . . . . . . . . . . .
Location パ ラ メ ー タ ーを使用す る .
既存の接続を使用す る . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
27
27
27
27
デー タ 間の移動お よ びデー タ 操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
レ コ ー ド の追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
レ コ ー ド の削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
レ コ ー ド の更新 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
レ コ ー ド の検索
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
バ ッ チ更新ま たは即時更新の選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
即時更新モー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
バ ッ チ更新モー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
ADO オブジ ェ ク ト の使用
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
ブ ッ ク マー ク の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
イ ベン ト の使用
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Field オブジ ェ ク ト の使用
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
ト ラ ンザ ク シ ョ ンの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4
Pervasive PSQL OLE DB プ ロバイ ダーの実装 . . . . . . . . . . . . . . . . . . 37
サポー ト さ れ る プ ロ パテ ィ 、 メ ソ ッ ド お よ び イ ベン ト の リ フ ァ レ ン ス
OLE DB プ ロ バ イ ダーの実装 リ フ ァ レ ン ス
Command . . . . . . . . . . . . . . . .
Connection . . . . . . . . . . . . . . .
Field . . . . . . . . . . . . . . . . . . .
Fields . . . . . . . . . . . . . . . . . .
Parameter . . . . . . . . . . . . . . . .
Record . . . . . . . . . . . . . . . . . .
Recordset . . . . . . . . . . . . . . . .
Stream . . . . . . . . . . . . . . . . . .
iv
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
38
38
38
39
40
40
41
41
42
目次
ADOX 実装 リ フ ァ レ ン ス
Catalog . . . . . . .
Columns . . . . . . .
Column . . . . . . .
Group . . . . . . . .
Index . . . . . . . .
Indexes . . . . . . .
Connection . . . . .
Procedure . . . . . .
Tables . . . . . . . .
Table . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Visual Studio.NET 実装 リ フ ァ レ ン ス
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
43
43
43
43
44
44
44
45
45
45
45
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
v
目次
vi
こ のマニ ュ アルについて
こ のマニ ュ アルは、 Pervasive PSQL OLE DB プ ロ バ イ ダーについての手引書です。
vii
こ のマニ ュ アルの読者
こ のマニ ュ アルは、 Pervasive PSQL に精通 し 、 OLE DB プ ロ バ イ ダーを使用 し て アプ リ ケーシ ョ ン を開発 し たい
ユーザー向けにデザ イ ン さ れてい ます。
viii
こ のマニ ュ アルの構成
こ のマニ ュ アルでは、 以下の項目について説明 し ます。
„
第 1 章 「Pervasive OLE DB プ ロ バ イ ダーの概要」
こ の章では、 Pervasive PSQL OLE DB プ ロ バ イ ダーについて ご紹介 し ます。
„
第 2 章 「Pervasive OLE DB プ ロ バ イ ダーに よ る プ ロ グ ラ ミ ン グ」
こ の章では、 ActiveX Data Objects (ADO) お よ び Pervasive PSQL OLE DB プ ロ バ イ ダーのプ ロ グ ラ ミ ン グ概
念について説明 し ます。
„
第 3 章 「ADO/OLE DB リ フ ァ レ ン ス情報」
こ の章では、 Pervasive PSQL OLE DB プ ロ バ イ ダーを使用 し た一般的な タ ス ク について説明 し ます。
„
第 4 章 「Pervasive PSQL OLE DB プ ロ バ イ ダーの実装」
こ の章は、 Pervasive PSQL OLE DB プ ロ バ イ ダーでサポー ト さ れ る プ ロ パテ ィ 、 メ ソ ッ ド お よ び イ ベン ト の
リ フ ァ レ ン ス です。
ix
表記上の規則
特段の記述がない限り、 コマンド構文、 コード、 およびコード例では、 以下の表記が使用されます。
x
大文字小文字の
区別
通常、 コ マ ン ド と 予約語は、 大文字で表記 さ れます。 本書で
別途記述がない限 り 、 こ れ ら の項目は大文字、 小文字、 あ る
いはそ の両方 を 使 っ て入力で き ま す。 た と えば、 MYPROG、
myprog、 ま たは MYprog と 入力す る こ と がで き ます。
太字
太字で表示 さ れ る 単語には次の よ う な も のが あ り ま す。 メ
ニ ュ ー名、 ダ イ ア ロ グ ボ ッ ク ス名、 コ マ ン ド 、 オプシ ョ ン、
ボ タ ン、 ス テー ト メ ン ト な ど。
固定幅フ ォ ン ト
固定幅フ ォ ン ト は、 コ マ ン ド 構文な ど、 ユーザーが入力す る
テ キ ス ト に使われます。
[ ]
省略可能な情報には、 [log_name] の よ う に、 角か っ こ が使
用 さ れます。 角かっ こ で囲ま れていない情報は必ず指定す る
必要があ り ます。
|
縦棒は、 [file name | @file name] の よ う に、 入力す る 情報の選
択肢を表 し ます。
< >
<> は、 /D=<5|6|7> の よ う に、 必須項目に対す る 選択肢
を表 し ます。
変数
file name の よ う に斜体で表 さ れてい る 語は、 適切な値に置 き
換え る 必要のあ る 変数です。
...
[parameter...] の よ う に、 情報の後に省略記号が続 く 場合は、
その情報を繰 り 返 し 使用で き ます。
::=
記号 ::= は、 あ る 項目が別の項目用語で定義 さ れてい る こ と
を意味 し ます。 た と えば、 a::=b は、 項目 a が b で定義 さ れて
い る こ と を意味 し ます。
Pervasive OLE DB プ ロバイ ダーの
概要
1
Pervasive OLE DB プ ロ バ イ ダーの概要
こ の章では、 以下の項目について説明 し ます。
„
「OLE DB プ ロ バ イ ダーの概要」
„
「OLE DB プ ロ バ イ ダーのアーキ テ ク チ ャ 」
„
「OLE DB プ ロ バ イ ダー と Visual Studio.NET」
„
「OLE DB のパフ ォーマ ン ス に関す る 考慮点」
„
「OLE DB プ ロ バ イ ダーの制限」
1
Pervasive OLE DB プ ロバイ ダーの概要
OLE DB プ ロバイ ダーの概要
Pervasive OLE DB プ ロ バ イ ダー (ADO も 含む) は、 OLE DB コ ン シ ュ ーマー (利用者) が使用す る ための コ ン
ポーネ ン ト です。
こ のマニ ュ アルでは、 OLE DB と ADO についての説明は行い ません。 こ れ ら については、 Microsoft の仕様書で
詳 し く 説明 し てい ます。 その代わ り 、 こ のマニ ュ アルでは Pervasive プ ロ バ イ ダーに関す る 具体的な事項について
説明 し てお り 、 新規ユーザー と し て初めて作業する 際に役立ち ます。
こ のプ ロ バ イ ダーがサポー ト す る のは Pervasive PSQL v11 SP3 エン ジ ンのみです。Pervasive PSQL v11 SP3 の OLE
DB プ ロ バ イ ダーを使用 し て、 以前のバージ ョ ンの Pervasive PSQL が動作 し てい る マシ ンに接続す る こ と はで き
ません。
2
OLE DB プ ロバイ ダーのアーキテ ク チ ャ
OLE DB プ ロバイ ダーのアーキテ ク チ ャ
Pervasive OLE DB は、 Microsoft が作成 し た OLE DB プ ロ バ イ ダー仕様の Pervasive Software におけ る 実装名です。
リ レーシ ョ ナル ア ク セ ス の場合、プ ロ バ イ ダーはネ ッ ト ーワ ー ク プ ロ ト コ ルを介 し てデー タ ベース エン ジ ンに
接続 し ます。 サーバー エン ジ ンが リ ク エ ス ト を処理 し 、 そのデー タ を プ ロ バ イ ダーに戻 し ます。 プ ロ バ イ ダーは
必要な処理を行っ て ク ラ イ ア ン ト にデー タ を渡 し ます。 プ ロ バ イ ダーは ODBC ク ラ イ ア ン ト イ ン タ ーフ ェ イ ス
と 同 じ プ ロ ト コ ルを使用 し ます。
次の図は、 OLE DB プ ロ バ イ ダーのアーキテ ク チ ャ を示 し てい ます。
図 1 Pervasive PSQL OLE DB プ ロバイ ダーのアーキテ ク チ ャ
リ レーシ ョ ナル パフ ォ ーマ ン ス
Pervasive OLE DB プ ロ バ イ ダーでは、 ODBC お よ び JDBC ド ラ イ バーが リ モー ト サーバー と 通信す る 方法 と 同様
のアーキ テ ク チ ャ を使用 し ます。 サーバー側の リ レーシ ョ ナル エン ジ ン を使用す る こ と に よ っ て、 ス ト ア ド プ ロ
シージ ャ や複雑な ク エ リ を含め、こ のプ ロ バ イ ダーの使用に よ る ほ と ん ど の SQL ベース のパフ ォーマ ン ス が向上
し ます。
リ モー ト 接続
接続文字列内で Location パ ラ メ ー タ ーを使用 し て リ モー ト サーバーを指定 し ます。
Provider=PervasiveOLEDB;Data Source=MyDBname;Location=MyServer
詳細については、 「 リ モー ト 接続」 を参照 し て く だ さ い。
3
Pervasive OLE DB プ ロバイ ダーの概要
排他的カ ー ソ ル
デー タ ベース プ ロ グ ラ ミ ン グにおいて、 その他の ク ラ イ ア ン ト が レ コ ー ド の ロ ッ ク に遭遇す る 可能性が高 く な る
リ ス ク を負っ て も 、 確実に更新を行 う こ と を優先する 必要があ る 場合があ り ます。
レ コ ー ド セ ッ ト を取得 し てバ ッ チ更新を指定 し た場合、 更新 し よ う と し た行が別の ク ラ イ ア ン ト に よ っ て更新 さ
れていたために、 並行性違反が発生す る 場合があ り ます。 排他的カー ソ ルを設定す る こ と に よ っ て こ れ ら の状況
を回避す る こ と がで き ます。
詳細については、 「排他的カー ソ ル」 を参照 し て く だ さ い。
ADO Refresh メ ソ ッ ド のサポー ト
Pervasive PSQL OLE DB プ ロ バ イ ダーでは、 Command オブジ ェ ク ト の Parameters コ レ ク シ ョ ンの Refresh メ ソ ッ
ド を サポー ト す る ので、 ス ト ア ド プ ロ シージ ャ ま たはパ ラ メ ー タ ー ク エ リ か ら パ ラ メ ー タ ー情報を取得で き ま
す。
詳細については、 「ADO Refresh メ ソ ッ ド のサポー ト 例」 を参照 し て く だ さ い。
以前の OLE DB プ ロバイ ダーの確認
現在のバージ ョ ン と の比較のために、こ のセ ク シ ョ ンでは以前のプ ロ バ イ ダーの概要について簡単に説明 し ます。
Pervasive では Pervasive.SQL 2000i リ リ ース Service Pack 2 で初めて OLE DB プ ロ バ イ ダーを装備 し ま し た。 本 リ
リ ース は第 3 世代のプ ロ バ イ ダーです。
最初のバージ ョ ン : Pervasive.SQL 2000i (SP2)
Pervasive の最初のプ ロ バ イ ダーは ト ラ ン ザ ク シ ョ ナル (Btrieve) のみで し た。 リ レ ーシ ョ ナル ア ク セ ス の場合
は、Microsoft の ODBC to OLE DB ブ リ ッ ジ プ ロ バ イ ダーを使用する 必要があ り ま し た。次の図は、最初の Pervasive
OLE DB プ ロ バ イ ダーのアーキテ ク チ ャ を示 し てい ます。
図 2 最初の OLE DB プ ロバイ ダーのアーキテ ク チ ャ
4
OLE DB プ ロバイ ダーのアーキテ ク チ ャ
2 番目のバージ ョ ン : Pervasive.SQL 2000i (SP3、 SP4)
Pervasive では、 Pervasive.SQL 2000i で リ レーシ ョ ナル ア ク セ ス を可能にす る 最新のプ ロ バ イ ダーを リ リ ース し ま
し た。 こ れを使用すれば、 開発者は同 じ API を使っ て リ レーシ ョ ナル ア ク セ スお よ び ト ラ ンザ ク シ ョ ナル ア ク
セ ス を行 う こ と がで き ます。 デー タ への更新は、 ト ラ ンザ ク シ ョ ン内でカプセル化す る こ と も 、 リ レーシ ョ ナル
ア ク セ ス と ト ラ ン ザ ク シ ョ ナル ア ク セ ス 間で カ プセル化す る こ と も 可能です。 さ ら に、 こ のプ ロ バ イ ダーには
ADOX 機能がい く つか組み込まれてお り 、 SQL 機能に加え てデー タ ベース作成 も 行 う こ と がで き ま し た。
図 3 2 番目の OLE DB プ ロバイ ダーのアーキテ ク チ ャ
こ の 2 番目のバージ ョ ンのプ ロ バ イ ダーには、 欠点がい く つかあ り ま し た。 リ レーシ ョ ナル エン ジ ンが こ のプ ロ
バ イ ダーにカプセル化 さ れ る ために、 ク ラ イ ア ン ト ベース と 見な さ れてい ま し た。 こ のため、 プ ロ バ イ ダーは行
ご と に ク ラ イ ア ン ト プ ロ セ ス と サーバー プ ロ セ ス の境界を越え る 必要があ り 、 ク ラ イ ア ン ト / サーバー 設定の
アプ リ ケーシ ョ ンではパフ ォーマ ン ス の問題を引き 起 こ し てい ま し た。
Pervasive PSQL v11 SP3 バージ ョ ンのプ ロ バ イ ダーは、こ のパフ ォーマ ン ス の問題を克服す る よ う 設計 さ れてい ま
す。
Pervasive.SQL 2000i OLE DB プ ロバイ ダーの機能
こ のセ ク シ ョ ンでは、 Pervasive.SQL 2000i SP3 リ リ ース の Pervasive OLE DB ド ラ イ バーに加え ら れた変更の概要
について説明 し ます。
コ マ ン ド ベースのレ コ ー ド セ ッ ト のサポー ト
SP3 よ り 前の Pervasive.SQL 2000i に付属の OLE DB プ ロ バ イ ダーには、 SQL ス テー ト メ ン ト のサポー ト が含まれ
てい ませんで し た。 つま り 、 Commnad オブジ ェ ク ト がサポー ト さ れてお ら ず、 結果セ ッ ト を正常に開 く にはテー
ブル名が必要で し た。 こ のバージ ョ ンには SQL コ マ ン ド のサポー ト が含まれてお り 、 2.5 仕様に適合 し てい ます。
SQL Server プ ロ バ イ ダーや ODBC ブ リ ッ ジ と は異な り 、 こ のプ ロ バ イ ダーは コ マ ン ド ベース ま たは完全にナビ
ゲーシ ョ ナルのいずれの結果セ ッ ト も 開 く こ と がで き ま す。 さ ら に、 いずれの場合 も サーバー側のカー ソ ルは、
前方のみ、 静的ま たは動的 と す る こ と がで き ます。 コ マ ン ド ベース の結果セ ッ ト と ナビ ゲーシ ョ ナル (テーブル
ベース) 結果セ ッ ト を同時に開 き 、 処理す る こ と がで き ます。
コ マ ン ド ベース の レ コ ー ド セ ッ ト は SQL エン ジ ンのパ ワー と 柔軟性を提供 し ますが、サーバー側のナビ ゲーシ ョ
ナル結果セ ッ ト は イ ンデ ッ ク スへの直接ア ク セ ス を提供 し ます。 こ の機能は コ マ ン ド ベース の結果セ ッ ト では使
用で き ません (間接ア ク セ ス は ク エ リ オプテ ィ マ イ ザーに よ っ て提供 さ れます) 。 イ ンデ ッ ク ス が使用で き る こ
と に よ り 、Seek オペレーシ ョ ン を実行す る こ と がで き ます。Seek を使用する ルーチンは、同 じ 機能を SQL ス テー
ト メ ン ト を介 し て実行す る 同様のルーチンに比べ、 非常に効率が よ く な っ てい ます。 適切に使用 し た場合、 特定
5
Pervasive OLE DB プ ロバイ ダーの概要
の値を含むレ コ ー ド にすばや く 位置付け る こ と がで き 、 サーバー側のナビ ゲーシ ョ ナル レ コ ー ド セ ッ ト は、 アプ
リ ケーシ ョ ンのパフ ォーマ ン ス を向上 さ せます。
ADOX
Pervasive PSQL は、 デー タ 定義言語お よ びセ キ ュ リ テ ィ の た めの ADO 拡張 (ADOX) を サポー ト し てい ま す。
ADOX はテーブルの作成、 ス キーマ定義の変更、 お よ びデー タ ベー ス テーブルの内容表示に使用 さ れ ま す。 現
在、 カ タ ロ グ、 テーブル、 列、 お よ び イ ンデ ッ ク ス オブジ ェ ク ト がサポー ト さ れてい ます。 テーブルお よ び イ ン
デ ッ ク ス の作成はサポー ト さ れてい ますが、 デー タ ベース の作成は現在サポー ト さ れてい ません。
プ ロバイ ダーのナ ビゲーシ ョ ナル レ コ ー ド セ ッ ト
ナビ ゲーシ ョ ナル結果セ ッ ト を開 く には、 Open メ ソ ッ ド のオプシ ョ ンで adCmdTableDirect を使用す る 必要があ
り ま す。 以前のバージ ョ ン では、 adCmdTable を使っ てナ ビ ゲーシ ョ ナル結果セ ッ ト を開 く こ と がで き ま し た。
し か し 、ADO は こ れを SQL ス テー ト メ ン ト の SELECT * FROM SQL に置 き 換え ます。 こ れは結果セ ッ ト を コ マ
ン ド ベース に し 、 イ ンデ ッ ク ス が使用で き な く な り ます。
メ モ ADO は こ れを別の も の と し て扱 う ため、 コ マ ン ド サポー ト が無効の場合に イ ンデ ッ ク ス機能を利用す
る 既存のアプ リ ケーシ ョ ンは、Open メ ソ ッ ド 呼び出 し で adCmdTableDirect を使用 し ない限 り 機能 し ません。
ラ ージ バイ ナ リ オブ ジ ェ ク ト (BLOB)
ISequentialStream のサポー ト が OLE DB プ ロ バ イ ダーに追加 さ れま し た。 ADO では、 こ れを レ コ ー ド セ ッ ト オ
ブジ ェ ク ト の AppendChunk/GetChunk 機能に変換 し ます。 ま た、 BLOB デー タ と ビ ジ ュ アル コ ン ト ロ ールを相互
に転送す る ための複合デー タ バ イ ンデ ィ ン グ を行 う こ と も で き ます。
6
OLE DB プ ロバイ ダー と Visual Studio.NET
OLE DB プ ロバイ ダー と Visual Studio.NET
こ のセ ク シ ョ ンでは、 Pervasive PSQL OLE DB プ ロ バ イ ダーを 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 実装 リ フ ァ レ ン ス」 を参
照 し て く だ さ い。
7
Pervasive OLE DB プ ロバイ ダーの概要
OLE DB のパ フ ォ ーマ ン スに関する考慮点
こ のセ ク シ ョ ンでは OLE DB に関す る パフ ォーマ ン ス の問題について述べます。
キャ ッ シュ エンジン
Pervasive PSQL のキ ャ ッ シ ュ エン ジ ンは、 ク ラ イ ア ン ト / サーバー環境で使用す る と OLE DB プ ロ バ イ ダーのパ
フ ォーマ ン ス に影響 し ます。 環境に応 じ て必要であれば Pervasive PSQL Control Center でキ ャ ッ シ ュ エン ジ ン を
無効にす る こ と がで き ます。 こ れについて最 も 影響があ る のは静的カー ソ ルです。
最高パフ ォ ーマ ン スのナビゲーシ ョ ナル
サーバー側のナビ ゲーシ ョ ナル レ コ ー ド セ ッ ト は コ マ ン ド ベース の レ コ ー ド セ ッ ト に比べ、 特定の値を含むレ
コ ー ド への位置付けが頻繁に要求 さ れ る タ ス ク では、 パフ ォーマ ン ス の上で非常に有利です。
静的カ ー ソ ル と 動的カ ー ソ ル
リ レーシ ョ ナル エ ン ジ ン がテ ン ポ ラ リ テーブルを作成 し なか っ た場合、 静的カー ソ ルが常に こ れを作成 し ます
(テ ン ポ ラ リ テーブルの詳細については 『SQL Engine Reference』 を参照 し て く だ さ い)。 こ れは、 コ マ ン ド ベー
ス お よ びナ ビ ゲーシ ョ ナル テーブル共にそ う な り ま す。 帯域幅に配慮す る 必要がない場合は、 常にテ ン ポ ラ リ
テーブルを作成す る こ と のない動的カー ソ ルが よ り 高いパフ ォーマ ン ス を生みます。 ただ し 、 帯域幅が低い場合
には、 往復の コ ス ト が高すぎて動的カー ソ ルを受け入れ難いため、 その解決策 と し て RDS を使用す る と よ い場合
があ り ます。 RDS の欠点は、 Microsoft が こ れを コ マ ン ド ベース のみの解決策 と し て実装 し た こ と です。 つま り 、
イ ンデ ッ ク ス機能 (Seek の使用) がで き ません。 RDS ベース と ロ ーカル レ コ ー ド セ ッ ト で同様に機能す る 抽象
レ イ ヤーを実装す る こ と に よ り 、 デプ ロ イ メ ン ト に関係な く パフ ォーマ ン ス を維持す る こ と がで き ます。 こ の抽
象の性質はアプ リ ケーシ ョ ンの必要性に よ っ て異な り 、ラ ン タ イ ム ビ ジネ ス オブジ ェ ク ト の形を取 る こ と が よ く
あ り ます。
未使用のサービ ス を使用不可にする
OLE DB アプ リ ケーシ ョ ン を開発す る 際、 パフ ォーマ ン ス を向上 さ せ る 方法 と し て、 使用 さ れていない OLE DB
サービ ス をオ フ にす る こ と があ り ます。 詳細については、 DBPROP_INIT_OLEDBSERVICES の ド キ ュ メ ン ト を参
照 し て く だ さ い。
Automatic Transaction Enlistment を オ フ にす る と 、 セ ッ シ ョ ンの ITransactionJoin イ ン タ ーフ ェ イ ス の イ ン ス タ ン
ス を作成せず、 プ ロ バ イ ダーが MTS オブジ ェ ク ト を検索 し ない よ う に し ます。
8
OLE DB プ ロバイ ダーの制限
OLE DB プ ロバイ ダーの制限
„
非同期オペレーシ ョ ンはサポー ト さ れません。
„
Record お よ び Stream オブジ ェ ク ト はサポー ト さ れません。
„
い っ たん レ コ ー ド セ ッ ト が使用 さ れ る と 、 Index プ ロ パテ ィ は静的ナビ ゲーシ ョ ナル カー ソ ルに設定す る こ
と はで き ません。 レ コ ー ド セ ッ ト の Open オペレーシ ョ ン を実行す る 前に イ ンデ ッ ク ス を適切に設定 し て く
だ さ い。 レ コ ー ド セ ッ ト を開いた後、 イ ンデ ッ ク ス は変更で き ません。
9
Pervasive OLE DB プ ロバイ ダーの概要
10
Pervasive OLE DB プ ロバイ ダーに
よ る プ ロ グ ラ ミ ング
2
Pervasive OLE DB プ ロ バ イ ダーを使用す る ためのプ ロ グ ラ ミ ン グ概念
こ の章では、 以下の項目について説明 し ます。
„
「デー タ ベースへの接続」
„
「 リ モー ト 接続」
„
「排他的カー ソ ル」
„
「プ ロ グ ラ ミ ン グ上の注意」
„
「COM+ サービ ス のサポー ト 」
„
「Execute メ ソ ッ ド (ADO コ マ ン ド )」
11
Pervasive OLE DB プ ロバイ ダーによ る プ ログ ラ ミ ング
デー タ ベースへの接続
Pervasive OLE DB プ ロ バ イ ダーを使用す る 場合の一般的な疑問は、デー タ ベースへの接続方法です。こ のセ ク シ ョ
ンでは、 OLE DB プ ロ バ イ ダーを使用 し た接続の基本事項について説明 し ます。
OLE DB プ ロバイ ダーへの接続
接続文字列
"Provider=PervasiveOLEDB;Data Source= (デー タ ベース名ま たはデー タ フ ァ イ ルへのパ ス )"
接続 と オープ ンの例
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 リ フ ァ レ ン ス情報」 を参照 し て く だ さ い。
12
リ モー ト 接続
リ モー ト 接続
プ ロ バ イ ダーはネ ッ ト ワー ク プ ロ ト コ ルを介 し てデー タ ベース エン ジ ンに接続 し ます。 サーバー エン ジ ンが リ
ク エ ス ト を処理 し 、 そのデー タ をプ ロ バ イ ダーに戻 し ます。 プ ロ バ イ ダーは必要な処理を行っ て ク ラ イ ア ン ト に
デー タ を渡 し ます。 こ れは ODBC ク ラ イ ア ン ト と 同 じ プ ロ ト コ ルを使用す る こ と に よ っ て行い ます。
サポー ト さ れる新 し い構文
接続文字列内で Location= パ ラ メ ー タ ーを使用 し て リ モー ト サーバーを指定で き ます。
Provider=PervasiveOLEDB;Data Source=MyDBName;Location=MyServer
メ モ Data Source パ ラ メ ー タ ーは DSN ではな く 、 デー タ ベース名 (DBName) を指 し ます。 DSN は ODBC
でのみ使用 し ます。
以前のバージ ョ ン と の互換性
現在、 接続文字列で DDF へのパ ス を使用 し てい る 場合は こ の メ ソ ッ ド で も サポー ト し ます。
Provider=PervasiveOLEDB;Data Source=f:\mydata
以前のバージ ョ ンの Pervasive PSQL と は異な り 、 本 リ リ ース では接続す る サーバーにデー タ ベース名が存在 し て
い る 必要があ り ます。
デー タ ベース名を指定 し た場合 と Location を指定 し た場合、 あ る いはマ ッ プ さ れた ド ラ イ ブ を指定 し た場合で も
パフ ォーマ ン ス に違いはあ り ません。 ただ し 、 リ モー ト サーバーに接続する 方法 と し ては Location の使用を推奨
し てい ます。 OLE DB プ ロ バ イ ダーでは、 マ ッ プ さ れた ド ラ イ ブ ま たは UNC パ ス を使用 し た場合にア ク セ ス権の
問題が発生す る 可能性があ り ます。
メ モ 接続文字列内で OLE DB プ ロ バ イ ダーを使用 し 、マ ッ プ さ れた ド ラ イ ブ ま たは UNC パ ス を Data Source
部分に指定す る 場合は、 「UNC パ ス ま たはマ ッ プ さ れた ド ラ イ ブ を使 う OLE DB プ ロ バ イ ダーの使用」 も 参
照 し て く だ さ い。
13
Pervasive OLE DB プ ロバイ ダーによ る プ ログ ラ ミ ング
排他的カ ー ソ ル
ほかの ク ラ イ ア ン ト が レ コ ー ド の ロ ッ ク に遭遇す る 可能性が高 く な る リ ス ク を負っ て も 、 作成す る ア プ リ ケー
シ ョ ンで確実に更新を行 う こ と を優先す る 必要があ る 場合は排他的カー ソ ルを使用 し ます。
以前のバージ ョ ンの Pervasive PSQL 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 つアルゴ リ ズ ムの違いは、 アルゴ リ ズ ム (a) では読み取 り ロ ッ ク を使用 し 、 アルゴ リ ズ
ム (b) では更新 ロ ッ ク を使用 し てい る と い う 点です。 次の表では、 こ れ ら 2 つのアルゴ リ ズ ム間の動作の違いに
ついて ま と めてい ます。
表 1 読み取 り ロ ッ ク と 更新ロ ッ ク
ロ ッ ク タ イプ
動作
読み取 り ロ ッ ク
読み取 る たびに行を ロ ッ ク し ます。
最初の Move メ ソ ッ ド で行の ロ ッ ク を解除 し ます。
次の行を ロ ッ ク し ます。
更新 ロ ッ ク
デー タ が変更 さ れた と き に行を ロ ッ ク し ます。
Update メ ソ ッ ド を 呼び出 し た と き に行の ロ ッ ク を
解除 し ます。
読み取 り ロ ッ ク を使用す る こ と で、 開発者は行を読み込んだ と き に並行性エ ラ ーを懸念す る こ と な く 確実に更新
を行 う こ と がで き ます。 ただ し 、 こ れは読み取る 行を常に ロ ッ ク し ます。 更新 ロ ッ ク ではデー タ が変更 さ れた場
合に行を ロ ッ ク す る だけです。 ただ し 、 並行性エ ラ ーが発生す る のは よ り 遅 く な る 可能性があ り ます。
こ のアーキ テ ク チ ャ の変更の詳細については、 「OLE DB プ ロ バ イ ダーのアーキ テ ク チ ャ 」 を参照 し て く だ さ い。
14
排他的カ ー ソル
排他的カ ー ソ ルの構文
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 排他的ロ ッ クのオプ シ ョ ン と その動作のマ ト リ ッ ク ス
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 ' 最初の レ コ ー ド が ロ ッ ク さ れます
15
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
以前のバージ ョ ンのプ ロ バ イ ダーでは、 こ の接続文字列が自動的に正 し いデー タ ベース名に解決 さ れま し た。 現
在のプ ロ バ イ ダーを使用す る と 、 こ の設定でア ク セ ス権の問題が発生す る 可能性があ り ます。 接続文字列内で新
し い Location パ ラ メ ー タ ーを使用す る 場合は、 ア ク セ ス権の問題は発生 し ません。 Location パ ラ メ ー タ ーの詳細
については、 「 リ モー ト 接続」 を参照 し て く だ さ い。
ク ラ イ ア ン ト がサーバーに接続 し よ う と し た と き に、 その ク ラ イ ア ン ト のデー タ ソ ース が UNC パ ス の場合、 プ
ロ バ イ ダーはそのパ ス をデー タ ベース名 と サーバー名に解決 し なければな り ません。 OLE DB プ ロ バ イ ダーが こ
の情報を取得す る には、ク ラ イ ア ン ト のユーザー ア カ ウ ン ト にそのサーバーの管理者ま たは Power User の権限が
なければいけ ません。
多 く の構成において、 ク ラ イ ア ン ト のユーザー ア カ ウ ン ト には こ れ ら の必要な ア ク セ ス 権がない場合があ り ま
す。 ク ラ イ ア ン ト が必要な権限を持っ ていない場合、 OLE DB プ ロ バ イ ダーでは図 4 の よ う なダ イ ア ロ グ を表示
し ます。 ユーザーは こ のダ イ ア ロ グでデー タ ベース名 と サーバー名を入力す る こ と がで き ます。
図 4 デー タ ベース名 と サーバー名を解決する ダ イ ア ロ グ
[上記の設定を レ ジ ス ト リ に保存 し ますか?] のチ ェ ッ ク を オンにす る と 、 そのエン ト リ は Windows レ ジ ス ト リ
に保存 さ れ る ので、 こ こ で参照 し た UNC ま たはマ ッ プ さ れた ド ラ イ ブの場所を対象 と す る ダ イ ア ロ グ (図 4) は
それ以降表示 さ れません。 その代わ り に、 デー タ ベース名は レ ジ ス ト リ を使っ て解決 さ れ、 こ れに よ り パフ ォー
マ ン ス が向上 し ます。 使用 さ れ る レ ジ ス ト リ の場所は次の と お り です。
SOFTWARE\Pervasive Software\OLEDB\Connections
開発者が こ のダ イ ア ロ グ をエン ド ユーザーに見せない よ う にす る 場合は、Windows の レ ジ ス ト リ に必要な情報を
入力す る こ と がで き ます。 上記のキーの下位に次の書式で入力 し ます。
16
プ ロ グ ラ ミ ン グ上の注意
名前
値
デー タ への 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
17
Pervasive OLE DB プ ロバイ ダーによ る プ ログ ラ ミ ング
リ モー ト 接続
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
„
LongVarWChar
„
UserDefined Types
„
GUID
デ フ ォル ト のロ ッ ク タ イ プ
LockType を指定 し ない と 、 カー ソ ルは即時更新モー ド に設定 さ れます。 こ れに よ り 、い く つかの影響があ り ます。
„
すべての変更はすぐ にデー タ ベース に転送 さ れます (Update を呼び出す必要があ り ません)。
„
Update お よ び UpdateBatch は実際には意味を持ち ません (デー タ ベースは既に更新 さ れてい る ため)。 ただ
し 、 Supports メ ソ ッ ド は Update に対 し ては True を返 し ますが、 UpdateBatch には False を返 し ます。
„
GetOriginalValue は使用で き ません。
GetOriginalValue が使用可能かど う かをプ ロ グ ラ ムで調べる には、 "Supports" メ ソ ッ ド の引数 と し て adUpdateBatch
を使用する必要があ り ます。 た と えば、 次の よ う に し ます。
if rs.Supports(adUpdateBatch) then
someValue = rs.fields(iCol).OriginalValue
end if
初期化プ ロパテ ィ
次の表は、 OLE DB の初期化で Pervasive がサポー ト する プ ロ パテ ィ と 、 それに対応す る 接続文字列識別子の一覧
です。
表 3 接続文字列識別子
18
接続文字列識別子
プ ロパテ ィ
Cache Authentication
DBPROP_AUTH_CACHE_AUTHINFO
Connect Timeout
DBPROP_INIT_TIMEOUT
Data Source
DBPROP_INIT_DATASOURCE
Encrypt Password
DBPROP_AUTH_ENCRYPT_PASSWORD
プ ロ グ ラ ミ ン グ上の注意
表 3 接続文字列識別子
接続文字列識別子
プ ロパテ ィ
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
以下のプ ロ パテ ィ を設定す る こ と も で き ます。
„
DBPROP_INIT_HWND
„
DBPROP_INIT_PROMPT
„
DBPROP_INIT_ASYNCH
„
DBPROP_INIT_OLEDBSERVICES
19
Pervasive OLE DB プ ロバイ ダーによ る プ ログ ラ ミ ング
COM+ サービ スのサポー ト
こ のセ ク シ ョ ンでは、 Pervasive の OLE DB プ ロ バ イ ダーが Microsoft の COM+ サービ ス と ど の よ う に相互作用す
る かについて説明 し ます。
COM+ サービ ス と は
COM+ (Component Object Model) サービ ス は Microsoft 固有の技術で、 マルチ ス レ ッ ド コ ン テ キ ス ト 内のビ ジネ
ス オブジ ェ ク ト を作成す る のに使用 さ れます。 COM+ は主に Visual Basic プ ロ グ ラ マのためにデザ イ ン さ れま し
たが、 それに限定 さ れ ま せん。 COM+ を使用す る と 、 多階層型ア プ リ ケーシ ョ ン を迅速に作成で き ま す。 ま た
COM+ は、 本来な ら ば開発者が実装す る 必要のあ る 多 く の利点を備え てい ます。 次に COM+ の利点を挙げます。
„
コ ンテキ ス ト
„
同時実行
„
セキ ュ リ テ ィ 強化
„
オブジ ェ ク ト プー リ ン グ
„
ジ ャ ス ト イ ン タ イ ム ア ク テ ィ ベーシ ョ ン
„
キ ュ ー コ ン ポーネ ン ト
„
イ ベン ト
COM+ の詳細については Microsoft の ド キ ュ メ ン ト を参照 し て く だ さ い。
COM+ サービ ス は、 MTS (Microsoft Transaction Server) に よ っ て も た ら さ れ る 利点の拡張です。 MTS は Microsoft
の以前の ビ ジネ ス オブジ ェ ク ト サーバーの実装です。 概 し て、 (Microsoft お よ び Pervasive の ド キ ュ メ ン ト にあ
る ) MTS への参照は、 COM+ サービ ス と 置 き 換え る こ と がで き ます。
Pervasive の OLE DB プ ロ バ イ ダーは COM+ サービ ス でサポー ト さ れます。COM+ サービ ス内で行われ る ADO 呼
び出 し はその他すべての ADO ク ラ イ ア ン ト 呼び出 し と 同様に動作 し ます。
Visual Basic プ ログ ラ マのための COM+ サービ スの例
Visual Basic プ ロ グ ラ マは、 MTSTransactionMode プ ロ パテ ィ に通 じ てい る 必要があ り ま す。 こ のプ ロ パテ ィ を
NoTransactions 以外に設定す る と 、Microsoft ト ラ ンザ ク シ ョ ンが起動 さ れます。こ の機能の詳細については COM+
サービ ス のマニ ュ アルを参照 し て く だ さ い。
次の例は、Microsoft Transaction Server の使い方を示 し てい ます。GetObjectContext の呼び出 し を成功 さ せ る には、
MTSTransactionMode プ ロ パ テ ィ を NoTransactions 以外 の ど れ か に 設定す る 必要 が あ り ま す。 Microsoft
Transactions を使用す る と 、 Microsoft Transaction Coordinator が 2 フ ェ ーズ コ ミ ッ ト を行え る よ う にな り ます。
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
20
COM+ サービ スのサポー ト
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
On Error GoTo
Dim cn As New
Dim rs As New
UpdatePayroll(employeeID As Integer, salary As Currency)
ErrHandler
Connection
ADODB.Recordset
cn.Open "Provider=PervasiveOLEDB;Data Source=CompanyDB"
cn.BeginTrans
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
21
Pervasive OLE DB プ ロバイ ダーによ る プ ログ ラ ミ ング
Execute メ ソ ッ ド (ADO コ マ ン ド )
Pervasive OLE DB プ ロ バ イ ダーを使用 し てい る 場合、 Command オブジ ェ ク ト の 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 の レ コ ー ド 数
バ ッ チ挿入、 更新および削除
RecordsAffected は、 バ ッ チ挿入、 更新お よ び削除を実行 し た と き に、 オペレーシ ョ ンが影響 し た正確な レ コ ー ド
数を返 し ます。
例 - バ ッ チ挿入
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 にな り ます。
例 - バ ッ チ更新
SQLst = "Update MyData set char_ = 'SampleTest'
cmd.ActiveConnection = cn
cmd.CommandText = SQLst
cmd.Execute RecordsAffected
where uinteger_ = 13"
こ の場合、 RecordsAffected は 13 と い う 値を持つすべての レ コ ー ド 数に相当する x にな り ます。
22
ADO/OLE DB リ フ ァ レ ン ス情報
3
Pervasive OLE DB プ ロ バ イ ダーを使用 し た一般的な操作の リ フ ァ レ ン ス
こ の章では、 以下の項目について説明 し ます。
„
「OLE DB プ ロ バ イ ダー と Visual Basic」
„
「接続の作成」
„
「レ コ ー ド セ ッ ト の作成」
„
「デー タ 間の移動お よ びデー タ 操作」
„
「レ コ ー ド の検索」
„
「バ ッ チ更新ま たは即時更新の選択」
„
「ADO オブジ ェ ク ト の使用」
„
「ブ ッ ク マー ク の使用」
„
「 イ ベン ト の使用」
„
「Field オブジ ェ ク ト の使用」
„
「 ト ラ ンザ ク シ ョ ンの使用」
23
ADO/OLE DB リ フ ァ レ ン ス情報
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
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
24
OLE DB プ ロバイ ダー と Visual Basic
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
ビ ジ ュ アル プ ログ ラ ミ ング
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 アプ リ ケーシ ョ ン を実行 し ます。
25
ADO/OLE DB リ フ ァ レ ン ス情報
接続の作成
接続を作成す る には、 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"
26
レ コ ー ド セ ッ ト の作成
レ コ ー ド セ ッ ト の作成
名前付き デー タ ベース を使用する
Pervasive PSQL Control Center で名前付 き デー タ ベース を作成す る こ と がで き ます。
Control Center のエ ク ス プ ロ ー ラ ー内で、 デー タ ベース を作成する デー タ ベース エン ジ ン を右 ク リ ッ ク し 、 [新規
作成|デー タ ベース] を選択 し ます。 こ れは、 アプ リ ケーシ ョ ン を中断す る こ と な く 必要に応 じ てデー タ を移動
で き る ので、 デー タ ス ト ア を指定す る 好ま し い方法です。 アプ リ ケーシ ョ ンか ら 新 し いデ ィ レ ク ト リ を指すため
に必要なのは、 サーバーで名前付 き デー タ ベー ス のパ ス 変更す る こ と だけです。 それぞれの ク ラ イ ア ン ト コ ン
ピ ュ ー タ ーで再設定を行 う のではな く 、 1 つの簡単な作業で済みます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data Source=Demodata", adOpenDynamic,
adLockBatchOptimistic, adCmdTableDirect
パス を使用する
アプ リ ケーシ ョ ンにパス をハー ド コ ーデ ィ ン グす る こ と はお勧め し ません。 し か し 、 アプ リ ケーシ ョ ン で レ ジ ス
ト リ エン ト リ ま たは環境変数か ら パ ス を取得す る こ と がで き 、 次の よ う な文字列を作成で き る 場合は、 パ ス を使
用す る こ と で、 名前付 き デー タ ベース を定義する こ と な く デー タ ス ト アに簡単にア ク セ スす る こ と がで き ます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data Source=d:\mydata\mydatabase",
adOpenDynamic, adLockBatchOptimistic, adCmdTableDirect
Location パラ メ ー タ ーを使用する
アプ リ ケーシ ョ ンでパス をハー ド コ ーデ ィ ン グす る のではな く 、接続文字列内で Location パ ラ メ ー タ ーを使用 し
て リ モー ト デー タ ベース に接続す る こ と がで き ます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data
Source=DEMODATA;Location=MyRemoteServer", adOpenDynamic, adLockBatchOptimistic,
adCmdTableDirect
既存の接続を使用する
接続を作成 し 、 その接続を使用 し て複数の レ コ ー ド セ ッ ト を作成す る こ と がで き ます。 こ れは、 各レ コ ー ド セ ッ
ト に個別の接続を作成す る よ り も 効率的です。
rs.Open "Course", MyExistingConnection, adOpenDynamic, adLockBatchOptimistic,
adCmdTableDirect
27
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
レ コ ー ド の削除
レ コ ー ド を削除す る には、 Delete メ ソ ッ ド を使用 し ま す。 オプシ ョ ン パ ラ メ ー タ ーが 1 つあ り ま す。 こ のパ ラ
メ ー タ ーは削除す る レ コ ー ド を 指 し ま す。 現在、 Pervasive プ ロ バ イ ダ ー で サ ポ ー ト す る の はデ フ ォ ル ト の
adAffectCurrent のみです。
rs.Open "Course", "Provider=PervasiveOLEDB;Data Source=Demodata", adOpenDynamic,
adLockOptimistic, adCmdTableDirect
' 削除す る レ コ ー ド へ移動す る
rs.Delete adAffectCurrent
rs.Close
28
デー タ 間の移動およびデー タ 操作
レ コ ー ド の更新
レ コ ー ド を更新す る には、 適切な フ ィ ール ド に、 希望する 値を割 り 当てた後で Update ま たは UpdateBatch を呼び
出 し ます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data Source=Demodata", adOpenDynamic,
adLockBatchOptimistic, adCmdTableDirect
' 更新す る レ コ ー ド へ移動す る
rs!Field4 = "Changed text"
rs.UpdateBatch
rs.Close
29
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
30
バ ッ チ更新または即時更新の選択
バ ッ チ更新または即時更新の選択
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 メ ソ ッ ド を使用 し 、 一
度に複数レ コ ー ド の変更処理を行 う コ ー ド を記述する こ と がで き ます。
こ れはパフ ォーマ ン ス の点か ら 見れば最良の ロ ッ ク タ イ プですが、 アプ リ ケーシ ョ ン設計で ADO が一度に複数
行を キ ャ ッ シ ュ し て更新で き る よ う にす る 必要があ り ます。 こ の ロ ッ ク タ イ プが必ず し も 、 マルチユーザー、 ス
ループ ッ ト の大 き いアプ リ ケーシ ョ ンに適 し てい る と は限 り ません。以下に、バ ッ チ更新モー ド を使用 し て レ コ ー
ド セ ッ ト を開 く 例を示 し ます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data Source=Demodata", adOpenDynamic,
adLockBatchOptimistic, adCmdTableDirect
31
ADO/OLE DB リ フ ァ レ ン ス情報
ADO オブ ジ ェ ク ト の使用
ADO ではオブジ ェ ク ト を使っ てデー タ にア ク セ ス し 、 そのデー タ をユーザーに提供 し ます。 Microsoft ADO Data
Control を使用 し てい る 場合は、 接続 と レ コ ー ド セ ッ ト オブジ ェ ク ト の イ ン ス タ ン ス を作成す る 必要はあ り ませ
ん。 ただ し 、 接続 と レ コ ー ド セ ッ ト の作成 と 破棄を直ちに行 う よ う にす る 場合は、 イ ン ス タ ン ス を作成 し てか ら 、
後でオブジ ェ ク ト を破棄す る 必要があ り ます。 さ ら に、現在出荷 さ れてい る バージ ョ ンの ADO Data Control では、
コ ー ド か ら レ コ ー ド セ ッ ト を作成 し 、コ ー ド 内で こ の レ コ ー ド セ ッ ト に ADO Data Control の Recordset プ ロ パテ ィ
を設定す る 場合にのみ ADO 2.1 の機能 ( イ ンデ ッ ク ス サポー ト な ど) を使用 し ます (ま た、 こ れはデフ ォ ル ト の
ADO 2.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
32
ブ ッ ク マー クの使用
ブ ッ ク マー ク の使用
ADO で使用す る ブ ッ ク マー ク は、 文書の中で使用する 通常のブ ッ ク マー ク と 同 じ で、 後でその場所を見つけ る こ
と がで き ます。 こ れは、 デー タ ベース内を検索する 場合、 ま たは複数のテーブルを使用す る 場合には特に便利で
す。 バ リ ア ン ト 変数を使用 し てブ ッ ク マー ク を保存 し ます。
rs.Open "Course", "Provider=PervasiveOLEDB;Data Source=Demodata", adOpenDynamic,
adLockBatchOptimistic, adCmdTable
' ブ ッ ク マー ク を付け る 場所へ移動す る
SaveMyPlace = rs.Bookmark
' その他の処理を行っ て、 再びブ ッ ク マー ク を付けた場所を検索す る
rs.Bookmark = SaveMyPlace
rs.Close
ヒ ン ト Find メ ソ ッ ド の使用については、 「レ コ ー ド の検索」 を参照 し て く だ さ い。
33
ADO/OLE DB リ フ ァ レ ン ス情報
イ ベン ト の使用
メ モ : 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 イ ベン ト を使用する 必要があ り ます。
34
Field オブ ジ ェ ク ト の使用
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 ではデー タ 型を知 る こ と がで き ます (あ る フ ィ ー
ル ド の値 と 別の フ ィ ール ド の値ま たは メ モ リ 内の値 と を比較す る 方法を調べ る 場合に便利です)。
35
ADO/OLE DB リ フ ァ レ ン ス情報
ト ラ ンザク シ ョ ンの使用
ト ラ ンザ ク シ ョ ンは、 Connection オブジ ェ ク ト を使っ て ADO 内に実装 さ れてい ます。 ト ラ ンザ ク シ ョ ン用に使
用で き る メ ソ ッ ド は次の と お り です。
„
BeginTrans
„
CommitTrans
„
RollbackTrans
こ れ ら の メ ソ ッ ド にはパ ラ メ ー タ ーがあ り ません。
ヒ ン ト ト ラ ンザ ク シ ョ ン を使用す る ためには、 接続を作成 し 、 その接続を使っ て レ コ ー ド セ ッ ト を作成す
る 必要があ り ます。
36
Pervasive PSQL OLE DB プ ロバイ
ダーの実装
4
サポー ト さ れ る プ ロ パテ ィ 、 メ ソ ッ ド お よ び イ ベン ト の リ フ ァ レ ン ス
こ の章では、 以下の項目について説明 し ます。
„
「OLE DB プ ロ バ イ ダーの実装 リ フ ァ レ ン ス」
„
「ADOX 実装 リ フ ァ レ ン ス」
„
「Visual Studio.NET 実装 リ フ ァ レ ン ス」
37
Pervasive PSQL OLE DB プ ロバイ ダーの実装
OLE DB プ ロバイ ダーの実装 リ フ ァ レ ン ス
こ のセ ク シ ョ ンでは、 Pervasive の OLE DB プ ロ バ イ ダーの実装に関す る 詳細を リ ス ト し ます。
メ モ 非同期のオペレーシ ョ ンはサポー ト さ れません。
Command
メソッド
サポー ト
„
CreateParameter
„
Execute
非サポー ト
„
Cancel
プ ロパテ ィ
サポー ト
„
ActiveConnection
„
CommandText
„
CommandType
„
Name
„
Parameters
„
Prepared
„
Properties
„
State
Connection
メソッド
サポー ト
„
BeginTrans (ネ ス ト さ れた ト ラ ンザ ク シ ョ ン を含む)
„
Close
„
CommitTrans
„
Execute
„
Open
Š
adConnectUnspecified
„
OpenSchema
„
RollbackTrans
非サポー ト
„
38
Cancel
OLE DB プ ロバイ ダーの実装 リ フ ァ レ ン ス
プ ロパテ ィ
サポー ト
„
Attributes
„
ConnectionString
„
CursorLocation
„
adUseClient は、 Microsoft の ク ラ イ ア ン ト カー ソ ル エン ジ ンについて調査 し てか ら 使用す る 必要があ り
ます。
Errors
„
IsolationLevels
Š
adXactRepeatableRead と adXactSerializable
Mode
Š
„
Š
adModeReadWrite
„
Properties
„
Provider
„
Version
非サポー ト
„
CommandTimeout
„
ConnectionTimeout
„
DefaultDatabase
イ ベン ト
サポー ト
„
CommitTransComplete
„
ConnectComplete
„
Disconnect
„
ExecuteComplete
„
EndOfRecordset
„
FieldChangeComplete
„
MoveComplete
„
RollbackTransComplete
„
WillExecute
„
WillChangeField
„
WillConnect
„
WillMove
非サポー ト
„
InfoMessage
Field
メソッド
サポー ト
„
AppendChunk
„
GetChunk
39
Pervasive PSQL OLE DB プ ロバイ ダーの実装
プ ロパテ ィ
サポー ト
„
ActualSize
„
デー タ ベース に保持す る サ イ ズ を指定 し ます。
こ れは LongVarBinary と LongVarChar で 65K ま でのみ正確であ り 、その後、その長 さ は GetChunk を使っ
た場合にのみ確認す る こ と がで き ます。
Attributes
„
DataFormat
„
DefinedSize
„
Name
„
NumericScale
„
OriginalValue
„
Precision
„
Properties
„
Status
„
Type
„
Value
Š
Š
非サポー ト
„
UnderlyingValue
Fields
メソッド
非サポー ト
„
Append
„
CancelUpdate
„
Delete
„
Refresh
„
Resynch
„
Update
プ ロパテ ィ
サポー ト
„
Count
„
Item
Parameter
メソッド
サポー ト
„
40
AppendChunk
OLE DB プ ロバイ ダーの実装 リ フ ァ レ ン ス
プ ロパテ ィ
サポー ト
„
Attributes
„
Direction
„
Name
„
NumericScale
„
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
„
adCmdTableDirect を使用 し た場合にサポー ト さ れます
Supports
„
Update
„
UpdateBatch
Š
41
Pervasive PSQL OLE DB プ ロバイ ダーの実装
非サポー ト
„
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
„
Source
„
State
„
Status
„
StayInSync
Š
Stream
サポー ト さ れません
42
ADOX 実装 リ フ ァ レ ン ス
ADOX 実装 リ フ ァ レ ン ス
こ のセ ク シ ョ ンでは、 Pervasive の ADOX のサポー ト について説明 し ます。
Catalog
メソッド
非サポー ト
„
Create
„
GetObjectOwner
„
SetObjectOwner
プ ロパテ ィ
サポー ト
„
ActiveConnection
„
Tables
非サポー ト
„
Groups
„
Procedures
„
Users
„
Views
„
Properties
Columns
メソッド
サポー ト
„
Append
„
Delete
非サポー ト
„
Refresh
プ ロパテ ィ
サポー ト
„
Count
„
Item
Column
プ ロパテ ィ
サポー ト
„
Attributes
43
Pervasive PSQL OLE DB プ ロバイ ダーの実装
„
DefinedSize
„
Name
„
NumericScale
„
ParentCatalog
„
Precision
„
Properties
„
Type
非サポー ト
„
RelatedColumn
„
SortOrder
Group
サポー ト さ れません
Index
プ ロパテ ィ
サポー ト
„
Columns
„
IndexNulls
„
Name
„
Properties
„
Unique
非サポー ト
„
Clustered
„
PrimaryKey
Indexes
メソッド
サポー ト
„
Append
„
Delete
非サポー ト
„
Refresh
プ ロパテ ィ
サポー ト
„
Count
„
Item
44
ADOX 実装 リ フ ァ レ ン ス
Connection
非サポー ト
Procedure
非サポー ト
Tables
メソッド
サポー ト
„
Append
„
Delete
非サポー ト
„
Refresh
プ ロパテ ィ
サポー ト
„
Count
„
Item
Table
プ ロパテ ィ
サポー ト
„
Indexes
„
Name
„
ParentCatalog
„
Type
非サポー ト
„
DateCreated
„
DateModified
„
Keys
45
Pervasive PSQL OLE DB プ ロバイ ダーの実装
Visual Studio.NET 実装 リ フ ァ レ ン ス
こ こ では、 Pervasive PSQL で .NET に関 し てサポー ト さ れ る プ ロ パテ ィ と メ ソ ッ ド の一覧を示 し ます。
OleDbCommand の メ ソ ッ ド
Cancel
CreateParameter
CreateParameter
Dispose
ExecuteNonQuery
メ モ こ の メ ソ ッ ド では DDL ス テー ト メ ン ト の実行時に -1 が返 さ れ る 必要があ り ます。 Pervasive PSQL OLE
DB プ ロ バ イ ダーでは 0 が返 さ れます。
ExecuteReader
CloseConnection
KeyInfo
Default
SingleResult
SingleRow
ExecuteScalar
Prepare
OleDbCommand のプ ロパテ ィ
Connection
CommandText
CommandTimeout
Transaction
CommandType
Text
Stored Procedure
TableDirect
CommandUpdatedRowSource
OleDbCommandBuilder
すべてサポー ト さ れます。
OleDbConnection の メ ソ ッ ド
Open
CreateCommand
Close
DatabaseChange
メ モ Pervasive OLEDB では現在のカ タ ロ グの変更をサポー ト し ません。
BeginTransaction
GetOleDbSchemaTable
Columns
Indexes
ProviderTypes
46
Visual Studio.NET 実装 リ フ ァ レ ン ス
Tables
OleDbConnection のプ ロパテ ィ
ConnectionString
DataBase
DataSource
Provider
ServerVersion
State
OleDbDataAdapter の メ ソ ッ ド
CreateTableMappings
CloneInternals
Fill
FillSchema
GetFillParameters
OnRowUpdated
OleDbDataAdapter のプ ロパテ ィ
MissingMappingsAction
MissingSchemaAction
AcceptChangesDuringFill
DeleteCommand
InsertCommand
SelectCommand
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
47
Pervasive PSQL OLE DB プ ロバイ ダーの実装
ColumnName
DataType
UBigInt
System.Decimal
Currency
System.Decimal
Decimal
System.Decimal
Integer
System.Int32
UInt
System.Int64
SmallInt
System.Int16
USmallInt
System.Int32
Double
System.Double
Real
System.Single
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
48
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
Pervasive OLE DB プ ロバイ ダーで テ ス ト し た DataRow の メ ソ ッ ド
AcceptChanges
RejectChanges
Delete
IsNull
49
Pervasive PSQL OLE DB プ ロバイ ダーの実装
50