Pervasive PSQL v10 SP3 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 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 2009 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/) により開発さ れたソフトウェアが含まれています。 Apache Software License を参照してください。 本製品ではフリー ソフトウェアの unixODBC Driver Manager を使用しています。 これは Peter Harvey (pharvey@codebydesign.com) によって作成され、 Nick Gorham (nick@easysoft.com) により変更および拡張されたものに Pervasive Software が一部修正を加えたものです。Pervasive Software は、 unixODBC Driver Manager プロジェクトの LGPL 使用許諾契約書に従って、 この プロジェクトの現在の保守管理者にそのコード変更を提供します。 unixODBC Driver Manager の Web ページは www.unixodbc.org にあります。 このプロジェクトに関する詳細については、 現在 の保守管理者である Nick Gorham (nick@easysoft.com) にお問い合せください。 GNU Lesser General Public License (LGPL) は本製品の配布メディアに含まれています。 LGPL は www.fsf.org/licensing/licenses/lgpl.html でも見ることができます。 OLE DB Provider Guide 2009 年 11 月 目次 こ のマニ ュ アルについて . . . . . . . . . . . . . . . . . . . . . . . . . . . ix こ のマニ ュ アルの読者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x こ のマニ ュ アルの構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi 表記上の規則. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii 1 Pervasive OLE DB プ ロバイ ダーの概要 . . . . . . . . . . . . . . . . . 1-1 Pervasive OLE DB プ ロ バ イ ダーの概要 Pervasive OLE DB の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-2 Pervasive OLE DB のアーキ テ ク チ ャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-3 リ レーシ ョ ナル パフ ォーマ ン ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4 リ モー ト 接続 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4 排他的カー ソ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4 ADO Refresh メ ソ ッ ド のサポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4 以前の OLE DB プ ロ バ イ ダーの確認. . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4 Visual Studio.NET のサポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-8 Visual Studio.NET の ウ ィ ザー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-8 ASP.NET に よ る セキ ュ リ テ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-8 サポー ト さ れ る オブジ ェ ク ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-8 OLE DB のパフ ォーマ ン ス に関す る 考慮点 . . . . . . . . . . . . . . . . . . . . . . . . . . 1-9 キ ャ ッ シ ュ エン ジ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-9 最高パフ ォーマ ン ス のナビ ゲーシ ョ ナル . . . . . . . . . . . . . . . . . . . . . . . . 1-9 静的カー ソ ル と 動的カー ソ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-9 未使用のサービ ス を使用不可にする . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-9 OLE DB プ ロ バ イ ダーの制限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-10 2 Pervasive OLE DB プ ロバイ ダーによ る プ ログ ラ ミ ング . . . . . . . . . 2-1 Pervasive OLE DB プ ロ バ イ ダーを使用す る ためのプ ロ グ ラ ミ ン グ概念 OLE DB プ ロ バ イ ダーを使用 し たデー タ ベースへの接続 . . . . . . . . . . . . . . . . . . 2-2 OLE DB プ ロ バ イ ダーへの接続. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2 その他の作業 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2 リ モー ト 接続. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3 サポー ト さ れ る 新 し い構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3 以前のバージ ョ ン と の互換性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3 排他的カー ソ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-5 OLE DB 仕様 と 排他的カー ソ ル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-5 排他的カー ソ ルの構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-6 iii 目次 排他的カー ソ ルの動作の ま と め . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 バ ッ チ挿入、 更新お よ び削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-17 3 ADO/OLE DB リ フ ァ レ ン ス情報 . . . . . . . . . . . . . . . . . . . . . 3-1 Pervasive 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 ブ ッ ク マー ク の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-16 iv 目次 イ ベン ト の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-17 Field オブジ ェ ク ト の使用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-18 ト ラ ンザ ク シ ョ ンの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-19 4 Pervasive PSQL OLE DB プ ロバイ ダーの実装 . . . . . . . . . . . . . . 4-1 サポー ト さ れ る プ ロ パテ ィ 、 メ ソ ッ ド お よ び イ ベン ト の リ フ ァ レ ン ス Pervasive PSQL OLE DB プ ロ バ イ ダーの実装 リ フ ァ レ ン ス . . . . . . . . . . . . . . . . . 4-2 Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-2 Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-2 Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-4 Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-5 Parameter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-5 Record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-5 Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-6 Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-7 ADOX 実装 リ フ ァ レ ン ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-8 Catalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-8 Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-8 Column . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-9 Group. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-9 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-9 Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-9 Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-10 Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-10 Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-10 Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-10 Visual Studio.NET 実装 リ フ ァ レ ン ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11 v 図 1-1 1-2 1-3 2-1 vi Pervasive PSQL OLE DB プ ロ バ イ ダーのアーキ テ ク チ ャ 最初の OLE DB プ ロ バ イ ダーのアーキ テ ク チ ャ . . . . . 2 番目の OLE DB プ ロ バ イ ダーのアーキ テ ク チ ャ . . . . デー タ ベース名 と サーバー名を解決する ダ イ ア ロ グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-3 1-5 1-6 2-9 表 2-1 2-2 2-3 読み取 り ロ ッ ク と 更新 ロ ッ ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-6 排他的 ロ ッ ク のオプシ ョ ン と その動作のマ ト リ ッ ク ス . . . . . . . . . . . . . . . . 2-7 接続文字列識別子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-12 vii viii こ のマニ ュ アルについて こ のマニ ュ アルは、 Pervasive PSQL OLE DB プ ロ バ イ ダーについての手引 書です。 ix こ のマニ ュ アルの読者 こ のマニ ュ アルは、 Pervasive PSQL に精通 し 、 OLE DB プ ロ バ イ ダーを使 用 し て アプ リ ケーシ ョ ン を開発 し たいユーザー向けにデザ イ ン さ れてい ま す。 x こ のマニ ュ アルの構成 こ のマニ ュ アルでは、 以下の項目について説明 し ます。 第 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 プ ロ バ イ ダーでサポー ト さ れ る プ ロ パテ ィ 、 メ ソ ッ ド お よ び イ ベン ト の リ フ ァ レ ン ス です。 こ のマニ ュ アルの巻末には索引が用意 さ れてい ます。 xi 表記上の規則 特段の記述がない限 り 、 コ マ ン ド 構文、 コ ー ド 、 お よ び コ ー ド 例では、 以 下の表記が使用 さ れます。 xii 大文字小文字の 区別 通常、 コ マ ン ド と 予約語は、 大文字で表記 さ れます。 本書で 別途記述がない限 り 、 こ れ ら の項目は大文字、 小文字、 あ る いはそ の両方 を 使 っ て入力で き ま す。 た と えば、 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 プ ロ バ イ ダーの概要 こ こ では、 以下の項目について説明 し ます。 「Pervasive OLE DB の概要」 (1-2 ページ) 「Pervasive OLE DB のアーキ テ ク チ ャ 」 (1-3 ページ) 「Visual Studio.NET のサポー ト 」 (1-8 ページ) 「OLE DB のパフ ォーマ ン ス に関す る 考慮点」 (1-9 ページ) 「OLE DB プ ロ バ イ ダーの制限」 (1-10 ページ) 1-1 Pervasive OLE DB プ ロバイ ダーの概要 Pervasive OLE DB の概要 Pervasive OLE DB プ ロ バ イ ダー (ADO も 含む) は、 OLE DB コ ン シ ュ ー マー (利用者) が使用する ための コ ン ポーネ ン ト です。 こ のマニ ュ アルでは、OLE DB と ADO についての説明は行い ません。 こ れ ら については、 Microsoft の仕様書で詳 し く 説明 し てい ま す。 その代わ り 、 こ のマニ ュ アルでは Pervasive プ ロ バ イ ダーに関す る 具体的な事項につい て説明 し てお り 、 新規ユーザー と し て初めて作業す る 際に役立ち ます。 こ のプ ロ バ イ ダーがサポー ト す る のは Pervasive PSQL v10 SP3 エン ジ ンの みです。 Pervasive PSQL v10 SP3 の OLE DB プ ロ バ イ ダーを使用 し て、 以 前のバージ ョ ンの Pervasive PSQL が動作 し てい る マシ ンに接続す る こ と は で き ません。 1-2 Pervasive OLE DB のアーキテ ク チ ャ Pervasive OLE DB のアーキテ ク チ ャ Pervasive OLE DB は、 Microsoft が作成 し た OLE DB プ ロ バ イ ダー仕様の Pervasive Software におけ る 実装名です。 リ レーシ ョ ナル ア ク セ ス の場合、プ ロ バ イ ダーはネ ッ ト ーワ ー ク プ ロ ト コ ルを介 し てエン ジ ンに接続 し ます。 サーバー エン ジ ンが リ ク エ ス ト を処理 し 、 そのデー タ をプ ロ バ イ ダーに戻 し ます。 プ ロ バ イ ダーは必要な処理を 行っ て ク ラ イ ア ン ト にデー タ を渡 し ます。プ ロ バ イ ダーは ODBC ク ラ イ ア ン ト イ ン タ ーフ ェ イ ス と 同 じ プ ロ ト コ ルを使用 し ます。 ト ラ ンザ ク シ ョ ナル エン ジ ンへの ク ラ イ ア ン ト / サーバー ア ク セ ス ではパ フ ォーマ ン ス が低下する ため、 ト ラ ンザ ク シ ョ ナル エン ジ ンは現在 も ク ラ イ ア ン ト 側にあ り ます。 次の図は、 OLE DB プ ロ バ イ ダーのアーキテ ク チ ャ を示 し てい ます。 図 1-1 Pervasive PSQL OLE DB プ ロバイ ダーのアーキテ ク チ ャ 1-3 Pervasive OLE DB プ ロバイ ダーの概要 リ レーシ ョ ナル パフ ォ ーマ ン ス Pervasive OLE DB プ ロ バ イ ダーでは、 ODBC お よ び JDBC ド ラ イ バーが リ モー ト サーバー と 通信す る 方法 と 同様の アーキ テ ク チ ャ を 使用 し ま す。 サーバー側の リ レーシ ョ ナル エン ジ ン を使用す る こ と に よ っ て、 ス ト ア ド プ ロ シージ ャ や複雑な ク エ リ を含め、 こ のプ ロ バ イ ダーの使用に よ る ほ と ん ど の SQL ベース のパフ ォーマ ン ス が向上 し ます。 リ モー ト 接続 接続文字列内で Location パ ラ メ ー タ ーを使用 し て リ モー ト サーバーを指 定 し ます。 Provider=PervasiveOLEDB;Data Source=MyDBname;Location= MyServer 詳細については、 「 リ モー ト 接続」 (2-3 ページ) を参照 し て く だ さ い。 排他的カ ー ソ ル デー タ ベース プ ロ グ ラ ミ ン グにおいて、 その他の ク ラ イ ア ン ト が レ コ ー ド の ロ ッ ク に遭遇する 可能性が高 く な る リ ス ク を負っ て も 、 確実に更新を行 う こ と を優先する 必要があ る 場合があ り ます。 レ コ ー ド セ ッ ト を取得 し てバ ッ チ更新を指定 し た場合、 更新 し よ う と し た 行が別の ク ラ イ ア ン ト に よ っ て更新 さ れていたために、 並行性違反が発生 す る 場合があ り ます。 排他的カー ソ ルを設定す る こ と に よ っ て こ れ ら の状 況を回避す る こ と がで き ます。 詳細については、 「排他的カー ソ ル」 (2-5 ページ) を参照 し て く だ さ い。 ADO Refresh メ ソ ッ ド のサポー ト Pervasive PSQL OLE DB プ ロ バ イ ダ ー で は、 Command オ ブ ジ ェ ク ト の Parameters コ レ ク シ ョ ンの Refresh メ ソ ッ ド をサポー ト する ので、 ス ト ア ド プ ロ シージ ャ ま たはパ ラ メ ー タ ー ク エ リ か ら パ ラ メ ー タ ー情報を取得で き ます。 詳細については、 「ADO Refresh メ ソ ッ ド のサポー ト 例」 (2-10 ページ) を 参照 し て く だ さ い。 以前の OLE DB プ ロバイ ダーの確認 現在のバージ ョ ン と の比較のために、 こ のセ ク シ ョ ンでは以前のプ ロ バ イ ダーの概要について簡単に説明 し ます。 Pervasive では Pervasive.SQL 2000i リ リ ース Service Pack 2 で初めて OLE DB プ ロ バ イ ダーを装備 し ま し た。本 リ リ ース は第 3 世代のプ ロ バ イ ダーです。 1-4 Pervasive OLE DB のアーキテ ク チ ャ 最初のバージ ョ ン : Pervasive.SQL 2000i (SP2) Pervasive の最初のプ ロ バ イ ダーは ト ラ ンザ ク シ ョ ナル (Btrieve) のみで し た。 リ レーシ ョ ナル ア ク セ ス の場合は、 Microsoft の ODBC to OLE DB ブ リ ッ ジ プ ロ バ イ ダ ー を 使用す る 必要が あ り ま し た。 次の図は、 最初の Pervasive OLE DB プ ロ バ イ ダーのアーキ テ ク チ ャ を示 し てい ます。 図 1-2 最初の OLE DB プ ロバイ ダーのアーキテ ク チ ャ 2 番目のバージ ョ ン : Pervasive.SQL 2000i (SP3、 SP4) Pervasive では、 Pervasive.SQL 2000i で リ レーシ ョ ナル ア ク セ ス を可能にす る 最新のプ ロ バ イ ダーを リ リ ース し ま し た。 こ れを使用すれば、 開発者は 同 じ API を使っ て リ レーシ ョ ナル ア ク セ スお よ び ト ラ ンザ ク シ ョ ナル ア ク セ ス を行 う こ と がで き ます。 デー タ への更新は、 ト ラ ンザ ク シ ョ ン内で カプセル化す る こ と も 、リ レーシ ョ ナル ア ク セ ス と ト ラ ンザ ク シ ョ ナル ア ク セ ス間でカプセル化する こ と も 可能です。 さ ら に、 こ のプ ロ バ イ ダーに は ADOX 機能がい く つか組み込まれてお り 、SQL 機能に加えてデー タ ベー ス作成 も 行 う こ と がで き ま し た。 1-5 Pervasive OLE DB プ ロバイ ダーの概要 図 1-3 2 番目の OLE DB プ ロバイ ダーのアーキテ ク チ ャ こ の 2 番目のバージ ョ ンのプ ロ バ イ ダーには、欠点がい く つかあ り ま し た。 リ レーシ ョ ナル エン ジ ン が こ のプ ロ バ イ ダーにカプセル化 さ れ る ために、 ク ラ イ ア ン ト ベース と 見な さ れてい ま し た。 こ のため、 プ ロ バ イ ダーは行 ご と に ク ラ イ ア ン ト プ ロ セ ス と サーバー プ ロ セ ス の境界を越え る 必要が あ り 、 ク ラ イ ア ン ト / サーバー 設定のアプ リ ケーシ ョ ンではパフ ォーマ ン ス の問題を引 き 起 こ し てい ま し た。 Pervasive PSQL v10 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 ブ リ ッ ジ と は異な り 、 こ のプ ロ バ イ ダーは コ マ ン ド ベース ま たは完全にナ ビ ゲーシ ョ ナルのいずれの結果セ ッ ト も 開 く こ と がで き ます。 さ ら に、 い ずれの場合 も サーバー側のカー ソ ルは、 前方のみ、 静的ま たは動的 と す る 1-6 Pervasive OLE DB のアーキテ ク チ ャ こ と がで き ます。 コ マ ン ド ベース の結果セ ッ ト と ナビ ゲーシ ョ ナル (テー ブル ベース) 結果セ ッ ト を同時に開 き 、 処理す る こ と がで き ます。 コ マ ン ド ベース の レ コ ー ド セ ッ ト は SQL エ ン ジ ン のパ ワ ー と 柔軟性を提 供 し ますが、 サーバー側のナビ ゲーシ ョ ナル結果セ ッ ト は イ ンデ ッ ク スへ の直接ア ク セ ス を提供 し ます。 こ の機能は コ マ ン ド ベース の結果セ ッ ト で は使用で き ません (間接ア ク セ ス は ク エ リ オプテ ィ マ イ ザーに よ っ て提供 さ れます) 。 イ ンデ ッ ク ス が使用で き る こ と に よ り 、 Seek オペレーシ ョ ン を実行す る こ と がで き ます。 Seek を使用す る ルーチンは、 同 じ 機能を SQL ス テー ト メ ン ト を介 し て実行する 同様のルーチンに比べ、 非常に効率が よ く な っ てい ます。 適切に使用 し た場合、 特定の値を含むレ コ ー ド にすばや く 位置付け る こ と がで き 、サーバー側のナビ ゲーシ ョ ナル レ コ ー ド セ ッ ト は、 アプ リ ケーシ ョ ンのパフ ォーマ ン ス を向上 さ せます。 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 デー タ と ビ ジ ュ アル コ ン ト ロ ールを相互 に転送す る ための複合デー タ バ イ ンデ ィ ン グ を行 う こ と も で き ます。 1-7 Pervasive OLE DB プ ロバイ ダーの概要 Visual Studio.NET のサポー ト こ のセ ク シ ョ ンでは、 Pervasive PSQL を 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-11 ページ) を参照 し て く だ さ い。 1-8 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 オブジ ェ ク ト を検索 し ない よ う に し ます。 1-9 Pervasive OLE DB プ ロバイ ダーの概要 OLE DB プ ロバイ ダーの制限 1-10 非同期オペレーシ ョ ンはサポー ト さ れません。 Record お よ び Stream オブジ ェ ク ト はサポー ト さ れません。 い っ たん レ コ ー ド セ ッ ト が使用 さ れ る と 、 Index プ ロ パテ ィ は静的ナ ビ ゲーシ ョ ナル カー ソ ルに設定す る こ と はで き ません。 レ コ ー ド セ ッ ト の Open オペレーシ ョ ン を実行す る 前に イ ンデ ッ ク ス を適切に設定 し て く だ さ い。 レ コ ー ド セ ッ ト を開いた後、 イ ンデ ッ ク スは変更で き ません。 Pervasive OLE DB プロバイダー によ る プ ログ ラ ミ ング 2 Pervasive OLE DB プ ロ バ イ ダーを使用す る ためのプ ロ グ ラ ミ ン グ概念 こ の章では、 以下の項目について説明 し ます。 「OLE DB プ ロ バ イ ダーを使用 し たデー タ ベースへの接続」 (2-2 ペー ジ) 「 リ モー ト 接続」 (2-3 ページ) 「排他的カー ソ ル」 (2-5 ページ) 「Pervasive OLE DB プ ロ バ イ ダーを使用 し たプ ロ グ ラ ミ ン グ上の注意」 (2-8 ページ) 「Pervasive OLE DB プ ロ バ イ ダーを使用 し たプ ロ グ ラ ミ ン グ上の注意」 (2-8 ページ) 「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 へのパス を使用 し てい る 場合は こ の メ ソ ッ ド で も サポー ト し ます。 Provider=PervasiveOLEDB;Data Source=f:\mydata 以前のバージ ョ ンの Pervasive PSQL と は異な り 、 本 リ リ ース では接続す る サーバーにデー タ ベース名が存在 し てい る 必要があ り ます。 デー タ ベース名を指定 し た場合 と Location を指定 し た場合、 あ る いはマ ッ プ さ れた ド ラ イ ブ を指定 し た場合で も パ フ ォ ーマ ン ス に違いは あ り ま せ ん。 ただ し 、 リ モー ト サーバーに接続する 方法 と し ては Location の使用を 推奨 し てい ます。 OLE DB プ ロ バ イ ダーでは、 マ ッ プ さ れた ド ラ イ ブ ま た は UNC パ ス を使用 し た場合にア ク セ ス権の問題が発生す る 可能性があ り ます。 2-3 Pervasive OLE DB プ ロバイ ダーによ る プ ログ ラ ミ ング メ モ 接続文字列内で OLE DB プ ロ バ イ ダーを使用 し 、 マ ッ プ さ れた ド ラ イ ブ ま たは UNC パ ス を Data Source 部分に指定する 場合は、「UNC パ ス ま たはマ ッ プ さ れた ド ラ イ ブ を 使 う OLE DB プ ロ バ イ ダーの使 用」 (2-8 ページ) も 参照 し て く だ さ い。 2-4 排他的カ ー ソル 排他的カ ー ソ ル ほかの ク ラ イ ア ン ト が レ コ ー ド の ロ ッ ク に遭遇す る 可能性が高 く な る リ ス ク を負っ て も 、 作成する アプ リ ケーシ ョ ンで確実に更新を行 う こ と を優先 す る 必要があ る 場合は排他的カー ソ ルを使用 し ます。 以前のバージ ョ ン の 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 つのアルゴ リ ズ ム間の動作の違い について ま と めてい ます。 2-5 Pervasive OLE DB プ ロバイ ダーによ る プ ログ ラ ミ ング 表 2-1 読み取 り ロ ッ ク と 更新ロ ッ ク ロ ッ ク タ イプ 動作 読み取 り ロ ッ ク 読み取 る たびに行を ロ ッ ク し ます。 最初の Move メ ソ ッ ド で行の ロ ッ ク を解除 し ます。 次の行を ロ ッ ク し ます。 更新 ロ ッ ク デー タ が変更 さ れた と き に行を ロ ッ ク し ます。 Update メ ソ ッ ド を 呼び出 し た と き に行の ロ ッ ク を 解除 し ます。 読み取 り ロ ッ ク を使用する こ と で、 開発者は行を読み込んだ と き に並行性 エ ラ ーを懸念する こ と な く 確実に更新を行 う こ と がで き ます。 ただ し 、 こ れは読み取 る 行を常に ロ ッ ク し ます。 更新 ロ ッ ク ではデー タ が変更 さ れた 場合に行を ロ ッ ク する だけです。 ただ し 、 並行性エ ラ ーが発生す る のは よ り 遅 く な る 可能性があ り ます。 こ のアーキ テ ク チ ャ の変更の詳細については、「Pervasive OLE DB のアーキ テ ク チ ャ 」 (1-3 ページ) を参照 し て く だ さ い。 排他的カ ー ソ ルの構文 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 以前のバージ ョ ンのプ ロ バ イ ダーでは、 こ の接続文字列が自動的に正 し い デー タ ベース名に解決 さ れま し た。 現在のプ ロ バ イ ダーを使用す る と 、 こ の設定でア ク セ ス権の問題が発生する 可能性があ り ます。 接続文字列内で 新 し い 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 = ?" ' パ ラ メ ー タ ーを最新の情報に更新 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 LongVarWChar UserDefined Types GUID 2-11 Pervasive OLE DB プ ロバイ ダーによ る プ ログ ラ ミ ング デ フ ォル ト のロ ッ ク タ イ プ 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 Persist Security Info DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO User ID DBPROP_AUTH_USERID Pervasive OLE DB ド ラ イバーを使用する上での注意 以下のプ ロ パテ ィ を設定する こ と も で き ます。 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 rs.Index = "employeeID" 2-15 Pervasive OLE DB プ ロバイ ダーによ る プ ログ ラ ミ ング 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 の レ コ ー ド 数 バ ッ チ挿入、 更新および削除 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 に相当 し ます。 2-17 Pervasive OLE DB プ ロバイ ダーによ る プ ログ ラ ミ ング 例 - バ ッ チ更新 SQLst = "Update MyData set char_ = 'SampleTest' uinteger_ = 13" cmd.ActiveConnection = cn cmd.CommandText = SQLst cmd.Execute RecordsAffected where こ の場合、RecordsAffected は 13 と い う 値を持つすべての レ コ ー ド 数に相当 す る x にな り ます。 2-18 ADO/OLE DB リファレンス情報 3 Pervasive OLE DB プ ロ バ イ ダーを使用 し た一般的な操作の リ フ ァ レ ン ス こ の章では、 以下の項目について説明 し ます。 「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=d:\mydata\mydatabase", 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 メ ソ ッ ド を使用 し 、 一度に複数レ コ ー ド の変更処理を行 う コ ー ド を記述する こ と がで き ます。 こ れはパフ ォーマ ン ス の点か ら 見れば最良の ロ ッ ク タ イ プですが、 アプ リ ケーシ ョ ン設計で ADO が一度に複数行を キ ャ ッ シ ュ し て更新で き る よ う 3-13 ADO/OLE DB リ フ ァ レ ン ス情報 にす る 必要があ り ます。 こ の ロ ッ ク タ イ プが必ず し も 、 マルチユーザー、 スループ ッ ト の大き いアプ リ ケーシ ョ ンに適 し てい る と は限 り ません。 以 下に、 バ ッ チ更新モー ド を使用 し て レ コ ー ド セ ッ ト を開 く 例を示 し ます。 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 の機能 ( イ ンデ ッ ク ス サポー ト な ど) を使用 し ます (ま た、 こ れはデフ ォ ル ト の 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 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 PSQL OLE DB プ ロ バ イ ダーの実装 リ フ ァ レ ン ス」 (4-2 ペー ジ) 「ADOX 実装 リ フ ァ レ ン ス」 (4-8 ページ) 「Visual Studio.NET 実装 リ フ ァ レ ン ス」 (4-11 ページ) 4-1 Pervasive PSQL OLE DB プ ロバイ ダーの実装 Pervasive PSQL OLE DB プ ロバイ ダーの実装 リ フ ァ レ ン ス こ のセ ク シ ョ ンでは、 Pervasive の OLE DB プ ロ バ イ ダーの実装に関す る 詳 細を リ ス ト し ます。 メ モ 非同期のオペレーシ ョ ンはサポー ト さ れません。 Command メソッド サポー ト CreateParameter Execute 非サポー ト Cancel プ ロパテ ィ サポー ト Connection ActiveConnection CommandText CommandType Name Parameters Prepared Properties State メソッド サポー ト BeginTrans (ネ ス ト さ れた ト ラ ンザ ク シ ョ ン を含む) Close CommitTrans Execute Open 4-2 adConnectUnspecified Pervasive PSQL OLE DB プ ロバイ ダーの実装 リ フ ァ レ ン ス OpenSchema RollbackTrans 非サポー ト Cancel プ ロパテ ィ サポー ト 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 4-3 Pervasive PSQL OLE DB プ ロバイ ダーの実装 WillExecute WillChangeField WillConnect WillMove 非サポー ト Field InfoMessage メソッド サポー ト AppendChunk GetChunk プ ロパテ ィ サポー ト ActualSize デー タ ベース に保持する サ イ ズ を指定 し ます。 こ れは LongVarBinary と LongVarChar で 65K ま でのみ正確であ り 、 その後、 その長 さ は GetChunk を使っ た場合にのみ確認す る こ と がで き ます。 Attributes DataFormat DefinedSize Name NumericScale OriginalValue Precision Properties Status Type Value 非サポー ト 4-4 UnderlyingValue Pervasive PSQL OLE DB プ ロバイ ダーの実装 リ フ ァ レ ン ス Fields メソッド 非サポー ト Append CancelUpdate Delete Refresh Resynch Update プ ロパテ ィ サポー ト Parameter Count Item メソッド サポー ト AppendChunk プ ロパテ ィ サポー ト Record Attributes Direction Name NumericScale Precision Properties Size Type Value サポー ト さ れません 4-5 Pervasive PSQL OLE DB プ ロバイ ダーの実装 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 非サポー ト Requery プ ロパテ ィ サポー ト 4-6 AbsolutePage AbsolutePosition ActiveCommand ActiveConnection Pervasive PSQL OLE DB プ ロバイ ダーの実装 リ フ ァ レ ン ス 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 サポー ト さ れません 4-7 Pervasive PSQL OLE DB プ ロバイ ダーの実装 ADOX 実装 リ フ ァ レ ン ス こ のセ ク シ ョ ンでは、 Pervasive の ADOX のサポー ト について説明 し ます。 Catalog メソッド 非サポー ト Create GetObjectOwner SetObjectOwner プ ロパテ ィ サポー ト ActiveConnection Tables 非サポー ト Columns Groups Procedures Users Views Properties メソッド サポー ト Append Delete 非サポー ト Refresh プ ロパテ ィ サポー ト 4-8 Count Item ADOX 実装 リ フ ァ レ ン ス Column プ ロパテ ィ サポー ト Attributes DefinedSize Name NumericScale ParentCatalog Precision Properties Type 非サポー ト RelatedColumn SortOrder Group サポー ト さ れません Index プ ロパテ ィ サポー ト Columns IndexNulls Name Properties Unique 非サポー ト Indexes Clustered PrimaryKey メソッド サポー ト Append Delete 非サポー ト Refresh 4-9 Pervasive PSQL OLE DB プ ロバイ ダーの実装 プ ロパテ ィ サポー ト Count Item Connection 非サポー ト Procedure 非サポー ト Tables メソッド サポー ト Append Delete 非サポー ト Refresh プ ロパテ ィ サポー ト Table Count Item プ ロパテ ィ サポー ト Indexes Name ParentCatalog Type 非サポー ト 4-10 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 SingleResult SingleRow ExecuteScalar Prepare OleDbCommand のプ ロパテ ィ Connection CommandText CommandTimeout Transaction CommandType Text Stored Procedure TableDirect CommandUpdatedRowSource OleDbCommandBuilder すべてサポー ト さ れます。 4-11 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 UpdateCommand TableMappings Columns Table 4-12 Visual Studio.NET 実装 リ フ ァ レ ン ス 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 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 4-13 Pervasive PSQL OLE DB プ ロバイ ダーの実装 ColumnName DataType 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 OleDbDataReader のプ ロパテ ィ Depth Item FieldCount IsClosed RecordsAffected 4-14 Visual Studio.NET 実装 リ フ ァ レ ン ス 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 4-15 Pervasive PSQL OLE DB プ ロバイ ダーの実装 4-16 索引 A C ADO Field オブジ ェ ク .................................... 3-18 OLE DB でのオブジ ェ ク ト の使用...... 3-15 OLE DB の使用........................................ 3-1 イ ベン ト ................................................. 3-17 拡張 と OLE DB........................................ 1-7 実装 ........................................................... 4-1 接続文字列 ............................................... 3-5 即時更新モー ド ..................................... 3-13 デー タ 間の移動 ..................................... 3-10 デフ ォ ル ト の ロ ッ ク タ イ プ ................ 3-13 ト ラ ンザ ク シ ョ ン ................................. 3-19 バ ッ チ更新モー ド ................................. 3-13 ブ ッ ク マー ク ......................................... 3-16 レ コ ー ド セ ッ ト と Location パ ラ メ ー タ ー 3-8 レ コ ー ド セ ッ ト と 既存の接続............... 3-9 レ コ ー ド セ ッ ト と 名前付 き デー タ ベース 3-6 レ コ ー ド セ ッ ト と パ ス ........................... 3-7 レ コ ー ド の検索 ..................................... 3-12 レ コ ー ド の更新 ..................................... 3-11 レ コ ー ド の削除 ..................................... 3-11 レ コ ー ド の追加 ..................................... 3-10 ADO Refresh メ ソ ッ ド サポー ト ................................................... 1-4 例 ............................................................. 2-10 ADOX Catalog のプ ロ パテ ィ ............................. 4-8 Catalog の メ ソ ッ ド ................................. 4-8 Columns のプ ロ パテ ィ ........................... 4-8 Columns の メ ソ ッ ド ............................... 4-8 Column のプ ロ パテ ィ ............................. 4-9 Index のプ ロ パテ ィ ................................. 4-9 Index の メ ソ ッ ド ..................................... 4-9 Tables のプ ロ パテ ィ ............................. 4-10 Tables の メ ソ ッ ド ................................. 4-10 Table のプ ロ パテ ィ ............................... 4-10 実装 リ フ ァ レ ン ス ................................... 4-8 ASP.NET セキ ュ リ テ ィ Visual Studio.NET .................................... 1-8 COM+ サービ ス .......................................... 2-14 F Field オブジ ェ ク ADO で使用 ........................................... 3-18 I ISequentialStream OLE DB でサポー ト ................................ 1-7 M Microsoft Transaction Server ....................... 2-14 MTS .............................................................. 2-14 O OLE DB .......................................................... 1-1 ADO Refresh メ ソ ッ ド ............................ 2-8 ADO Refresh メ ソ ッ ド のサポー ト ........ 1-4 ADO 拡張 ................................................. 1-7 COM+ サービ ス ..................................... 2-14 Command のプ ロ パテ ィ ......................... 4-2 Command の メ ソ ッ ド ............................. 4-2 Connection の イ ベン ト ............................ 4-2 Connection のプ ロ パテ ィ ........................ 4-2 Connection の メ ソ ッ ド ............................ 4-2 Execute メ ソ ッ ド ................................... 2-17 Fields のプ ロ パテ ィ ......................... 4-4, 4-5 Fields の メ ソ ッ ド .................................... 4-5 Field の メ ソ ッ ド ...................................... 4-4 ISequentialStream サポー ト .................... 1-7 Parameter のプ ロ パテ ィ .......................... 4-5 Parameter の メ ソ ッ ド .............................. 4-5 Recordset のプ ロ パテ ィ .......................... 4-6 Recordset の メ ソ ッ ド .............................. 4-6 SELECT オペレーシ ョ ン ..................... 2-17 UNC パ ス ま たはマ ッ プ さ れた ド ラ イ ブの使 用 ........................................................... 2-8 Visual Basic のセ ッ ト ア ッ プ.................. 3-2 Visual Studio.NET のサポー ト ............... 1-8 索引 1 以前のプ ロ バ イ ダーの確認 ................... 1-4 キ ャ ッ シ ュ エン ジ ン .............................. 1-9 更新の表示 ............................................... 2-8 更新 ロ ッ ク ............................................... 2-6 実装 ........................................................... 4-1 初期化プ ロ パテ ィ ................................. 2-12 静的お よ び動的カー ソ ル ....................... 1-9 静的カー ソ ルを使用 し た Seek ............ 2-11 制約 ......................................................... 1-10 接続 ........................................................... 2-2 接続文字列の識別 ................................. 2-12 デー タ ベース に接続す る ....................... 2-2 デー タ ベースへの接続 ........................... 2-2 テーブル定義 ......................................... 2-11 デフ ォ ル ト の ロ ッ ク タ イ プ ................ 2-12 ナビ ゲーシ ョ ナル パフ ォーマ ン ス ...... 1-9 ナビヘーシ ョ ナル レ コ ー ド セ ッ ト ...... 1-7 排他的カー ソ ル ................................ 1-4, 2-5 排他的カー ソ ル構文 ............................... 2-6 排他的カー ソ ルの動作 ........................... 2-7 バ ッ チ挿入、 更新お よ び削除 ............. 2-17 パフ ォーマ ン ス に関す る 考慮点 ........... 1-9 未使用のサービ ス を使用不可にす る ... 1-9 読み取 り ロ ッ ク ....................................... 2-6 ラ ージ バ イ ナ リ オブジ ェ ク ト のサポー ト 17 リ モー ト 接続 .................................... 1-4, 2-3 リ モー ト 接続構文 ................................... 2-3 リ レーシ ョ ナル パフ ォーマ ン ス .......... 1-4 R Refresh メ ソ ッ ド , ADO OLE DB でサポー ト ................................ 1-4 例 ............................................................. 2-10 V Visual Basic コ ー ド サンプル 排他的カー ソ ルの使用 ........................... 2-7 Visual Studio.NET ASP.NET セキ ュ リ テ ィ .......................... 1-8 DataColumn のプ ロ パテ ィ .................... 4-13 DataRow の メ ソ ッ ド ............................. 4-15 DataSet のプ ロ パテ ィ ............................ 4-15 DataSet の メ ソ ッ ド ................................ 4-15 DataTable のプ ロ パテ ィ ........................ 4-15 DataTable の メ ソ ッ ド ............................ 4-15 2 索引 OleDbCommandBuilder.......................... 4-11 OleDbCommand のプ ロ パテ ィ ............. 4-11 OleDbCommand の メ ソ ッ ド ................. 4-11 OleDbConnection のプ ロ パテ ィ ........... 4-12 OleDbConnection の メ ソ ッ ド ............... 4-12 OleDbDataAdapter のプ ロ パテ ィ ......... 4-12 OleDbDataAdapter の メ ソ ッ ド ............. 4-12 OleDbDataReader のプ ロ パテ ィ .......... 4-14 OleDbDataReader の メ ソ ッ ド .............. 4-14 ウ ィ ザー ド ............................................... 1-8 サポー ト さ れ る オブジ ェ ク ト ............... 1-8 実装 リ フ ァ レ ン ス ................................. 4-10 い イ ベン ト ADO で使用 ........................................... 3-17 う ウ ィ ザー ド Visual Studio.NET .................................... 1-8 か カー ソ ル , 静的 OLE DB で................................................ 1-9 Seek 操作 ................................................ 2-11 カー ソ ル , 動的 OLE DB で................................................ 1-9 カー ソ ル , 排他的 .................................. 1-4, 2-5 VB サンプル コ ー ド ............................... 2-7 構文 ........................................................... 2-6 動作 ........................................................... 2-7 き キ ャ ッ シ ュ エン ジ ン OLE DB で................................................ 1-9 さ サービ ス , 未使用の も のを使用不可にす る OLE DB で................................................ 1-9 サポー ト さ れ る オブジ ェ ク ト Visual Studio.NET .................................... 1-8 サポー ト さ れ る 構文 OLE DB リ モー ト 接続用........................ 2-3 せ ら 静的カー ソ ル seek の使用............................................. 2-11 接続 OLE DB プ ロ バ イ ダーへ........................ 2-2 OLE DB プ ロ バ イ ダーを使用 し てデー タ ベースへ ............................................... 2-2 接続 , リ モー ト OLE DB で....................................... 1-4, 2-11 OLE DB を使用........................................ 2-3 以前のバージ ョ ン と の互換性............... 2-3 接続文字列の識別 OLE DB 用.............................................. 2-12 ラ ージ バ イ ナ リ オブジ ェ ク ト OLE DB でサポー ト ................................ 1-7 と れ ト ラ ンザ ク シ ョ ン ADO で使用 ........................................... 3-19 な ナビ ゲーシ ョ ナル パフ ォーマ ン ス OLE DB で................................................ 1-9 ナビヘーシ ョ ナル レ コ ー ド セ ッ ト OLE DB プ ロ バ イ ダー............................ 1-7 は 排他的カー ソ ル OLE DB で......................................... 1-4, 2-5 OLE DB での動作.................................... 2-7 VB サンプル コ ー ド ............................... 2-7 構文 ........................................................... 2-6 バ イ ナ リ オブジ ェ ク ト , ラ ージ OLE DB でサポー ト ................................ 1-7 パフ ォーマ ン ス , リ レーシ ョ ナル OLE DB プ ロ バ イ ダーの使用................ 1-4 り リ モー ト 接続 .............................................. 2-11 OLE DB で................................................ 1-4 OLE DB を使用........................................ 2-3 OLE DB を使用 し た新 し い構文............ 2-3 以前のバージ ョ ン と の互換性 ............... 2-3 リ レーシ ョ ナル OLE DB プ ロ バ イ ダーの使用に よ る パ フ ォーマ ン ス ....................................... 1-4 例 , ADO Refresh メ ソ ッ ド ........................ 2-10 レ コー ド セ ッ ト ADO で使用 ....................... 3-6, 3-7, 3-8, 3-9 ろ ロック 読み取 り と 更新 ....................................... 2-6 ロ ッ ク , 更新 OLE DB で................................................ 2-6 ロ ッ ク , 読み取 り OLE DB で................................................ 2-6 ロ ッ ク タ イプ ADO 用のデフ ォ ル ト ........................... 3-13 ふ ブ ッ ク マー ク ADO で使用 ........................................... 3-16 プ ロ バ イ ダー , OLE DB で 以前のプ ロ バ イ ダーの確認 ................... 1-4 み 未使用のサービ ス を使用不可にす る OLE DB で................................................ 1-9 索引 3 4 索引
© Copyright 2024 Paperzz