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 索引
© Copyright 2024 Paperzz