Oracle® Objects for OLE

開発者ガイド

11g リリース2(11.2)for Microsoft Windows

B58887-04(原本部品番号:E17727-04)

2013年8月

Oracle Objects for OLE開発者ガイド, 11g リリース2(11.2) for Microsoft Windows

B58887-04

Copyright © 1994, 2013, Oracle and/or its affiliates.All rights reserved.

原本著者: Janis Greenberg, Christian Shay

原本協力者: Riaz Ahmed, Kiminari Akiyama, Steven Caminez, Naveen Doraiswamy, Neeraj Gupta, Sinclair Hsu, Alex Keh, Chithra Ramamurthy, Ashish Shah, Martha Woo

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007).Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

このソフトウェアおよびドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

Oracle Objects for OLEの新機能

- Oracle Database 11g リリース1(11.1)およびリリース2(11.2)の新機能

- Oracle Database 10g リリース2(10.2)の新機能

- Oracle Database 10g リリース1(10.1)の新機能

1 Oracle Objects for OLEの紹介

- Oracle Objects for OLEの概要

- Oracle Objects for OLEインプロセス・オートメーション・サーバー

- Oracle Data Control

- Oracle Objects for OLE C++クラス・ライブラリ

- 必要な設定

- インストール

- システム要件

- その他の要件

- Oracle Objects for OLEファイルの場所

- コンポーネントの認証

- Oracle Objects for OLEの再配布可能ファイル

- 再配布可能ファイルの場所

- ファイルの更新と登録

2 オートメーション・クライアントでのOracle Objects for OLEの使用

- オートメーション・クライアントの使用に関する概要

- デモ・スキーマとサンプル・コード

- デモ・スキーマの作成

- デモ・スキーマ

- その他のスキーマ

- 関連ファイル

- Visual BasicでのOracle Objects for OLEオートメーションの使用

- Active Server Pages(ASP)でのOO4Oオートメーションの使用

- ExcelでのOracle Objects for OLEオートメーションの使用

- Microsoft C++の使用

- Visual BasicでのOracle Data Controlの使用

- 「Properties」ウィンドウでのOracle Data Controlのプロパティの設定

- プログラムによるOracle Data Controlのプロパティの設定

- MS Visual C++でのOracle Data Controlの使用

3 基本的な機能

- クライアント・アプリケーションの概要

- Oracle Objects for OLEオートメーション・サーバーへのアクセス

- OraSessionオブジェクトの取得

- OraServerオブジェクトの取得

- Oracle Databaseへの接続

- OraServerを使用した接続多重化

- 各種コマンドの実行

- 問合せ

- データ操作言語文

- データベース・レコードの更新

- 表からの行の削除

- 表への新しい行の挿入

- スレッド・セーフティ

- 接続プール管理機能の使用

- 接続プールの作成

- プールからのオブジェクトの取得と返却

- プールの破棄

- プール属性へのアクセス

- 接続プールのデータベースを使用したトランザクション処理

- 失われた接続の検出

- PL/SQLのサポート

- PL/SQLのOracle Objects for OLEとの統合

- ExecuteSQLとCreateSQLを使用したPL/SQLブロックの実行

- PL/SQLカーソル変数を戻す方法

- PL/SQL表を戻す方法

- データ定義言語文の実行

- トランザクション制御

- Microsoft Transaction Serverのサポート

- 非同期処理

- 非ブロック・モード

- 非ブロック操作の状態のチェック

- 非ブロック操作の取消し

- 非同期モードでの複数問合せの実行

- 非ブロック化に関する制約

4 OO4Oの拡張機能

- Oracleオブジェクト・リレーショナルとLOBデータ型のサポート

- Oracle LOB、オブジェクトおよびコレクションのインスタンス化

- Oracle LOB、オブジェクトおよびコレクション

- ラージ・オブジェクト(LOB)の使用

- LOBデータ型

- OraBLOBとOraCLOBの使用

- データベースからのLOBの取出し

- OraDynasetオブジェクトの使用

- パラメータ・オブジェクトの使用

- LOBの読取りと書込みに関するパフォーマンス上の考慮

- 単一ピース操作

- 複数ピース操作

- LOBバッファリング・オプション

- LOBデータの書込み

- 単一ピース書込み操作

- 複数ピース書込み操作

- LOBデータの読込み

- 単一ピース読込み操作

- 複数ピース読込み操作

- Oracleオブジェクト・データ型

- OraObjectインタフェースの概要

- OraObjectインタフェースの使用

- データベースからの埋込み/値インスタンスの取出し

- 埋込み/値インスタンスの属性へのアクセス

- 埋込み/値インスタンスの属性の変更

- Oracleオブジェクト・インスタンスのメンバー・メソッドの実行

- OraRefインタフェースの概要

- OraRefインタフェースの使用

- データベースからのREFの取出し

- 参照可能なインスタンスの属性へのアクセス

- 参照可能なインスタンスの属性の変更

- Oracleコレクション

- OraCollectionインタフェースの概要

- データベースからのコレクション型インスタンスの取出し

- ダイナセット・オブジェクトの使用

- パラメータ・オブジェクトの使用

- コレクションの要素へのアクセス

- コレクションの要素の変更

- VARRAYコレクション型の作成

- OraCollectionオブジェクトからのダイナセットの作成

- アドバンスト・キューイング・インタフェース

- メッセージの監視

- データベース・イベント

- アプリケーション・フェイルオーバー通知

- フェイルオーバー通知の登録

- フェイルオーバーの有効化

- XMLの生成

- 日時および間隔のデータ型

- 日時および間隔のデータ型の取得

- 日時および間隔のデータ型の説明

- データベース・スキーマ・オブジェクト

5 チューニングと問題解決

- パフォーマンス・チューニングに関するヒントとテクニック

- OO4OオブジェクトのEarly Binding

- チューニングとカスタマイズ

- 複数オブジェクト参照の回避

- パラメータのバインド

- 配列処理

- 読取り専用、前方参照専用のダイナセットの使用

- PL/SQL一括収集機能の使用

- LONG RAWからLOBまたはBFILEへの移行

- 接続プールの使用

- Oracle Objects for OLEのエラー処理

- OLEオートメーション・エラー

- 非ブロック化エラー

- Findメソッドの解析機能エラー

- Findメソッド・ランタイム・エラー

- OraObjectインスタンス・エラー

- LOBエラー

- Oracle Streamsアドバンスト・キューイング・エラー

- OraCollectionエラー

- OraNumberエラー

- Oracleエラー

- Oracle Data Controlエラー

- 問題解決

- OLE初期化エラーまたはOLEオートメーション・エラー

- Oracleネットワークのエラー

- アクセス違反

6 Visual Basic用クイック・ツアー

- 概要

- 従業員データベース・アプリケーションの概要

- 従業員フォーム

- バッチ挿入フォーム

- 開始: Oracleデータへのアクセス手順

- Form_Loadプロシージャの完全サンプル・コード

- データ入力フォームのプログラミング

- 従業員フォームの概要

- データ間のナビゲート

- 最初または最後の行への移動

- 前の行への移動

- 次の行への移動

- レコードの追加

- 「Add」ボタンのコーディング

- 「Commit」ボタンのコーディング(追加)

- レコードの更新

- 「Update」ボタンのコーディング

- レコードを追加および更新する「Commit」ボタンのコーディング

- レコードの削除

- データベースの問合せ

- バッチ挿入の使用

- バッチ・フォームのプログラミング

- バッチ挿入フォームの概要

- バッチ挿入のForm_Load( )プロシージャのコーディング

- CmdAddtoGrid( )プロシージャのコーディング

- CommitGrid_Click( )プロシージャのコーディング

7 ストアド・プロシージャ用のコード・ウィザード

- Oracle Objects for OLEのコード・ウィザードのコンポーネント

- OO4Oコード・ウィザードでサポートされているデータ型

- OO4Oコード・ウィザードの使用方法

- OO4Oコード・ウィザードのコマンドライン・ユーティリティ

- OO4Oコード・ウィザードのVisual Basicウィザード・アドイン

- コード・ウィザードの例

- Visual BasicおよびActive Server PagesによるPL/SQLストアド・ファンクションへのアクセス

- Visual Basicによる、LOB型を使用したPL/SQLストアド・プロシージャへのアクセス

- Visual Basicによる、VARRAY型を使用したPL/SQLストアド・プロシージャへのアクセス

- Visual Basicによる、Oracleオブジェクト型を使用したPL/SQLストアド・プロシージャへのアクセス

8 オートメーション・オブジェクトの紹介

- オートメーション・オブジェクトの概要

- OraSessionオブジェクトの概要

- OraServerオブジェクトの概要

- OraDatabaseオブジェクトの概要

- OraDynasetオブジェクトの概要

- OraFieldオブジェクトの概要

- OraParametersオブジェクトの概要

- OraParameterオブジェクトの概要

- OraParamArrayオブジェクトの概要

- OraSQLStmtオブジェクトの概要

9 サーバー・オブジェクト

- OraAQオブジェクト

- OraAQAgentオブジェクト

- OraAQMsgオブジェクト

- OraAttributeオブジェクト

- OraBFILEオブジェクト

- OraBLOB、OraCLOBオブジェクト

- OraClientオブジェクト

- OraCollectionオブジェクト

- OraConnectionオブジェクト

- OraDatabaseオブジェクト

- OraDynasetオブジェクト

- OraFieldオブジェクト

- OraIntervalDSオブジェクト

- OraIntervalYMオブジェクト

- OraMDAttributeオブジェクト

- OraMetaDataオブジェクト

- OraNumberオブジェクト

- OraObjectオブジェクト

- OraParamArrayオブジェクト

- OraParameterオブジェクト

- OraRefオブジェクト

- OraServerオブジェクト

- OraSessionオブジェクト

- OraSQLStmtオブジェクト

- OraSubscriptionオブジェクト

- OraTimeStampオブジェクト

- OraTimeStampTZオブジェクト

- OraConnectionsコレクション

- OraFieldsコレクション

- OraParametersコレクション

- OraSessionsコレクション

- OraSubscriptionsコレクション

10 サーバー・メソッド

- Absメソッド

- Addメソッド

- Add(OraIntervalDS)メソッド

- Add(OraIntervalYM)メソッド

- Add(OraNumber)メソッド

- Add(OraSubscriptionsコレクション)メソッド

- AddIntervalDSメソッド

- AddIntervalYMメソッド

- AddNewメソッド

- AddTableメソッド

- Append(OraCollection)メソッド

- Append(OraLOB)メソッド

- AppendChunkメソッド

- AppendChunkByteメソッド

- AQAgent(OraAQMsg)メソッド

- AQMsg(OraAQ)メソッド

- ArcCos(OraNumber)メソッド

- ArcSin(OraNumber)メソッド

- ArcTan(OraNumber)メソッド

- ArcTan2(OraNumber)メソッド

- Attribute(OraMetaData)メソッド

- AutoBindDisableメソッド

- AutoBindEnableメソッド

- BeginTransメソッド

- Cancelメソッド

- CancelEdit(OraRef)メソッド

- Ceil(OraNumber)メソッド

- ChangePassword(OraServer)メソッド

- ChangePassword(OraSession)メソッド

- Cloneメソッド

- Clone(OraLOB/BFILE)メソッド

- Clone(OraCollection)メソッド

- Clone(OraIntervalDS)メソッド

- Clone(OraIntervalYM)メソッド

- Clone(OraNumber)メソッド

- Clone(OraObject/Ref)メソッド

- Clone(OraTimeStamp)メソッド

- Clone(OraTimeStampTZ)メソッド

- Closeメソッド

- Close(OraBFILE)メソッド

- CloseAll(OraBFILE)メソッド

- CommitTransメソッド

- Compare(OraLOB)メソッド

- ConnectSessionメソッド

- CopyToClipboardメソッド

- Copy(OraLOB)メソッド

- CopyFromFile(OraLOB)メソッド

- CopyFromBFILE(OraLOB)メソッド

- CopyToFile(OraLOB/BFILE)メソッド

- Cos(OraNumber)メソッド

- CreateAQメソッド

- CreateCustomDynasetメソッド

- CreateDatabasePoolメソッド

- CreateDynasetメソッド

- CreateIteratorメソッド

- CreateNamedSessionメソッド

- CreateOraIntervalDSメソッド

- CreateOraIntervalYMメソッド

- CreateOraNumberメソッド

- CreateOraObject(OraDatabase)メソッド

- CreateOraTimeStampメソッド

- CreateOraTimeStampTZメソッド

- CreatePLSQLCustomDynasetメソッド

- CreatePLSQLDynasetメソッド

- CreateSessionメソッド

- CreateSQLメソッド

- CreateTempBLOB/CLOBメソッド

- Deleteメソッド

- Delete(OraCollection)メソッド

- Delete(OraRef)メソッド

- DeleteIteratorメソッド

- Dequeue(OraAQ)メソッド

- Describeメソッド

- DestroyDatabasePoolメソッド

- DisableBuffering(OraLOB)メソッド

- Div(OraIntervalDS)メソッド

- Div(OraIntervalYM)メソッド

- Div(OraNumber)メソッド

- DynasetCacheParamsメソッド

- Editメソッド

- Edit(OraRef)メソッド

- ElementValueメソッド

- EnableBuffering(OraLOB)メソッド

- Enqueue(OraAQ)メソッド

- Erase(OraLOB)メソッド

- ExecuteSQLメソッド

- Exist(OraCollection)メソッド

- Exp(OraNumber)メソッド

- FetchOraRefメソッド

- FieldSizeメソッド

- FindFirst、FindLast、FindNextおよびFindPreviousメソッド

- Floor(OraNumber)メソッド

- FlushBuffer(OraLOB)メソッド

- GetDatabaseFromPoolメソッド

- GetChunkメソッド

- GetChunkByteメソッド

- GetChunkByteExメソッド

- GetXMLメソッド

- GetXMLToFileメソッド

- GetRowsメソッド

- Get_Valueメソッド

- HypCos(OraNumber)メソッド

- HypSin(OraNumber)メソッド

- HypTan(OraNumber)メソッド

- InitIteratorメソッド

- IsEqual(OraIntervalDS)メソッド

- IsEqual(OraIntervalYM)メソッド

- IsEqual(OraNumber)メソッド

- IsEqual(OraTimeStamp)メソッド

- IsEqual(OraTimeStampTZ)メソッド

- IsGreater(OraIntervalDS)メソッド

- IsGreater(OraIntervalYM)メソッド

- IsGreater(OraNumber)メソッド

- IsGreater(OraTimeStamp)メソッド

- IsGreater(OraTimeStampTZ)メソッド

- IsLess(OraIntervalDS)メソッド

- IsLess(OraIntervalYM)メソッド

- IsLess(OraNumber)メソッド

- IsLess(OraTimeStamp)メソッド

- IsLess(OraTimeStampTZ)メソッド

- IterNextメソッド

- IterPrevメソッド

- LastServerErrResetメソッド

- Ln(OraNumber)メソッド

- Log(OraNumber)メソッド

- MatchPos(OraLOB/BFILE)メソッド

- Mod(OraNumber)メソッド

- MonitorForFailoverメソッド

- MonitorStart(OraAQ)メソッド

- MonitorStop(OraAQ)メソッド

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- MovePreviousn、MoveNextn、MoveRelおよびMoveToメソッド

- Mul(OraIntervalDS)メソッド

- Mul(OraIntervalYM)メソッド

- Mul(OraNumber)メソッド

- Neg(OraIntervalDS)メソッド

- Neg(OraIntervalYM)メソッド

- Neg(OraNumber)メソッド

- Open(OraServer)メソッド

- Open(OraBFILE)メソッド

- OpenDatabaseメソッド

- OriginalItemメソッド

- OriginalName

- Power(OraNumber)メソッド

- Put_Valueメソッド

- Read(OraLOB/BFILE)メソッド

- ReadChunkメソッド

- Refreshメソッド

- Refresh(OraRef)メソッド

- Registerメソッド

- Removeメソッド

- Remove(OraSubscriptionsコレクション)メソッド

- RemoveFromPoolメソッド

- ResetTransメソッド

- Rollbackメソッド

- Round(OraNumber)メソッド

- SetPi(OraNumber)メソッド

- Sin(OraNumber)メソッド

- Sqrt(OraNumber)メソッド

- Sub(OraIntervalDS)メソッド

- Sub(OraIntervalYM)メソッド

- Sub(OraNumber)メソッド

- Tan(OraNumber)メソッド

- ToDateメソッド

- ToOraNumber(OraIntervalDS)メソッド

- ToOraTimeStampメソッド

- ToOraTimeStampLTZメソッド

- ToOraTimeStampTZメソッド

- ToUniversalTimeメソッド

- Trim(OraCollection)メソッド

- Trim(OraLOB)メソッド

- Trunc(OraNumber)メソッド

- Unregisterメソッド

- Updateメソッド

- Update(OraRef)メソッド

- Write(OraLOB)メソッド

11 サーバー・プロパティ

- Address(OraAQAgent)プロパティ

- ArraySizeプロパティ

- AutoCommitプロパティ

- BOCプロパティ

- BOFプロパティ

- Bookmarkプロパティ

- BookMarkableプロパティ

- CacheBlocksプロパティ

- CacheChangedプロパティ

- CacheMaximumSizeプロパティ

- CacheOptimalSizeプロパティ

- CacheSliceSizeプロパティ

- CacheSlicesPerBlockプロパティ

- Clientプロパティ

- Connectプロパティ

- Connectionプロパティ

- ConnectionOKプロパティ

- Connectionsプロパティ

- Consumer(OraAQ)プロパティ

- Correlate(OraAQ)プロパティ

- Correlation(OraAQMsg)プロパティ

- Countプロパティ

- Count(OraMetaData)プロパティ

- Count(OraObject/Ref)プロパティ

- Databaseプロパティ

- DatabaseNameプロパティ

- Databasesプロパティ

- Day(OraTimeStamp)プロパティ

- Day(OraTimeStampTZ)プロパティ

- Daysプロパティ

- DbPoolCurrentSizeプロパティ

- DbPoolInitialSizeプロパティ

- DbPoolMaxSizeプロパティ

- Delay(OraAQMsg)プロパティ

- DequeueMode(OraAQ)プロパティ

- DequeueMsgId(OraAQ)プロパティ

- DirectoryNameプロパティ

- DynasetOptionプロパティ

- EditModeプロパティ

- EditOption(OraRef)プロパティ

- ElementTypeプロパティ

- EOCプロパティ

- EOFプロパティ

- ExceptionQueueプロパティ

- Existsプロパティ

- Expiration(OraAQMsg)プロパティ

- FetchLimitプロパティ

- FetchSizeプロパティ

- FieldIndexプロパティ

- FieldNameプロパティ

- FieldOriginalNameプロパティ

- FieldOriginalNameIndexプロパティ

- Fieldsプロパティ

- FileNameプロパティ

- Filterプロパティ

- Format(OraNumber)プロパティ

- Format(OraTimeStamp)プロパティ

- Format(OraTimeStampTZ)プロパティ

- HexValue(OraRef)プロパティ

- Hour(OraTimeStamp)プロパティ

- Hour(OraTimeStampTZ)プロパティ

- Hoursプロパティ

- IsLocator(OraCollection)プロパティ

- IsMDObjectプロパティ

- IsNull(OraCollection)プロパティ

- IsNull(OraLOB/BFILE)プロパティ

- IsNull(OraObject)プロパティ

- IsOpen(OraBFILE)プロパティ

- IsRefNull(OraRef)プロパティ

- LastErrorTextプロパティ

- LastModifiedプロパティ

- LastServerErrプロパティ

- LastServerErrPosプロパティ

- LastServerErrTextプロパティ

- MaxSize(OraCollection)プロパティ

- MinimumSizeプロパティ

- Minute(OraTimeStamp)プロパティ

- Minute(OraTimeStampTZ)プロパティ

- Minutesプロパティ

- Month(OraTimeStamp)プロパティ

- Month(OraTimeStampTZ)プロパティ

- Monthsプロパティ

- Nameプロパティ

- Name(AQAgent)プロパティ

- Name(OraAttribute)プロパティ

- Name(OraMDAttribute)プロパティ

- Nanosecond(OraTimeStamp)プロパティ

- Nanonsecond(OraTimeStampTZ)プロパティ

- Nanonsecondsプロパティ

- Navigation(OraAQ)プロパティ

- NoMatchプロパティ

- NonBlockingStateプロパティ

- Offset(OraLOB/BFILE)プロパティ

- OIPVersionNumberプロパティ

- Optionsプロパティ

- OraIDataTypeプロパティ

- OraMaxDSizeプロパティ

- OraMaxSizeプロパティ

- OraNullOKプロパティ

- OraPrecisionプロパティ

- OraScaleプロパティ

- Parametersプロパティ

- PinOption(OraRef)プロパティ

- PollingAmountプロパティ

- Priority(OraAQMsg)プロパティ

- RDMSVersionプロパティ

- RecordCountプロパティ

- RelMsgId(OraAQ)プロパティ

- RowPositionプロパティ

- SafeArray(OraCollection)プロパティ

- Second(OraTimeStamp)プロパティ

- Second(OraTimeStampTZ)プロパティ

- Secondsプロパティ

- Serverプロパティ

- ServerTypeプロパティ

- Sessionプロパティ

- Sessionsプロパティ

- Sizeプロパティ

- Size(OraCollection)プロパティ

- Size(OraLOBおよびOraBFILE)プロパティ

- SnapShotプロパティ

- Sortプロパティ

- SQLプロパティ

- Statusプロパティ

- Status(OraLOB/BFILE)プロパティ

- Subscriptionsプロパティ

- TableName(OraRef)プロパティ

- TableSize(OraCollection)プロパティ

- TimeZone(OraTimeStampTZ)プロパティ

- TotalDaysプロパティ

- TotalYearsプロパティ

- Transactionsプロパティ

- Truncatedプロパティ

- Typeプロパティ

- Type(OraAttribute)プロパティ

- Type(OraCollection)プロパティ

- Type(OraMetaData)プロパティ

- TypeName(OraObjectおよびOraRef)プロパティ

- Updatableプロパティ

- Valueプロパティ

- Value(OraAttribute)プロパティ

- Value(OraAQMsg)プロパティ

- Value(OraIntervalDS)プロパティ

- Value(OraIntervalYM)プロパティ

- Value(OraMDAttribute)プロパティ

- Value(OraNumber)プロパティ

- Value(OraTimeStamp)プロパティ

- Value(OraTimeStampTZ)プロパティ

- Version(OraObjectおよびRef)プロパティ

- Visible(OraAQ)プロパティ

- Wait(OraAQ)プロパティ

- XMLAsAttributeプロパティ

- XMLCollIDプロパティ

- XMLEncodingTagプロパティ

- XMLNullIndicatorプロパティ

- XMLOmitEncodingTagプロパティ

- XMLRowIDプロパティ

- XMLRowsetTagプロパティ

- XMLRowTagプロパティ

- XMLTagNameプロパティ

- XMLUpperCaseプロパティ

- Year(OraTimeStamp)プロパティ

- Year(OraTimeStampTZ)プロパティ

- Yearsプロパティ

12 データ・コントロール・イベント

- DragDropイベント

- DragOverイベント

- Errorイベント

- MouseDownイベント

- MouseMoveイベント

- MouseUpイベント

- Repositionイベント

- Validateイベント

13 データ・コントロール・メソッド

- Dragメソッド

- Moveメソッド

- Refreshメソッド

- UpdateControlsメソッド

- UpdateRecordメソッド

- ZOrderメソッド

14 データ・コントロール・プロパティ

- AllowMoveLastプロパティ

- AutoBindingプロパティ

- BackColorプロパティ

- Captionプロパティ

- Connectプロパティ

- Databaseプロパティ

- DatabaseNameプロパティ

- DirtyWriteプロパティ

- DragIconプロパティ

- DragModeプロパティ

- EditModeプロパティ

- Enabledプロパティ

- Fontプロパティ

- ForeColorプロパティ

- Heightプロパティ

- Indexプロパティ

- Leftプロパティ

- MousePointerプロパティ

- Nameプロパティ

- NoRefetchプロパティ

- Optionsプロパティ

- OracleModeプロパティ

- ReadOnlyプロパティ

- Recordsetプロパティ

- RecordSourceプロパティ

- Sessionプロパティ

- Tagプロパティ

- Topプロパティ

- TrailingBlanksプロパティ

- Visibleプロパティ

- Widthプロパティ

A 付録A

- Oracleデータ型

- 追加のスキーマ

- OraMetaDataの例で使用されているスキーマ・オブジェクト

- LOBデータ型の例で使用されているスキーマ・オブジェクト

- OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト

- OraCollectionの例で使用されているスキーマ・オブジェクト

用語集

索引

はじめに

このドキュメントでは、Oracle Objects for OLE(OO4O)をインストール、構成および使用する方法について説明します。ここでは、Microsoft Windowsオペレーティング・システムに適用されるOracle Databaseの機能について説明します。

Oracle Objects for OLE(OO4O)を使用すると、Microsoft COMオートメーションをサポートするプログラミングまたはスクリプト言語を介して、Oracleデータベースのデータに簡単にアクセスできます。

注意:
Oracle Database 11gリリース2(11.2)は、Oracle Objects for OLEをサポートする最後のデータベース・バージョンです。Oracle Database 11gリリース2(11.2)の後にリリースされるOracle Databaseバージョンでは、Oracle Objects for OLEはサポートされません。オラクル社のライフタイム・サポート・ポリシーの対象となっている既存のOracle Databaseバージョンでは、Oracle Objects for OLEを引き続き使用できます。

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

対象読者

『Oracle Objects for OLE開発者ガイド』は、Oracle Objects for OLEを使用してOracle Databaseにアクセスするアプリケーションを開発するプログラマを対象としています。このマニュアルは、データベース・アプリケーションの開発に関心があるシステム・アナリスト、プロジェクト・マネージャ、その他の担当者にとっても有用です。

このマニュアルを使用するには、Visual BasicまたはMicrosoft C/C++を使用したアプリケーション・プログラミングの実践的な知識、およびComponent Object Model(COM)の概念に関する知識が必要です。

また、リレーショナル・データベース・システムの情報にアクセスする構造化問合せ言語(SQL)を理解している必要があります。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracleサポートへのアクセス

Oracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=accid=infoまたはhttp://www.oracle.com/pls/topic/lookup?ctx=accid=trs (聴覚障害者向け)を参照してください。

関連ドキュメント

詳細は、次のOracleドキュメントを参照してください。

- オンライン・ヘルプとして利用できるOracle Objects for OLE C++クラス・ライブラリ開発者ガイド

- 『Oracle Services for Microsoft Transaction Server開発者ガイド』

- 『Oracle Databaseプラットフォーム・ガイド』

- 『Oracle Database概要』

- 『Oracle Databaseパフォーマンス・チューニング・ガイド』

- 『Oracle Databaseリファレンス』

- 『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』

- 『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』

- 『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』

- 『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』

- 『Oracle XML DB開発者ガイド』

- 『Oracle XML Developer's Kitプログラマーズ・ガイド』

- 『Oracle Database PL/SQLユーザーズ・ガイドおよびリファレンス』

- 『Oracle Net Servicesリファレンス・ガイド』

- 『Oracle Databaseグローバリゼーション・サポート・ガイド』

- 『Oracle Database Oracle Real Application Clusters管理およびデプロイメント・ガイド』

このマニュアルに記載されている例の多くは、Oracle Databaseのインストール時に「基本インストール」オプションを選択するとデフォルトでインストールされるサンプル・スキーマを使用しています。これらのスキーマがどのように作成されているか、およびその使用方法については、『Oracle Databaseサンプル・スキーマ』を参照してください。

リリース・ノート、インストール関連ドキュメント、ホワイト・ペーパーまたはその他の関連ドキュメントは、OTN-J(Oracle Technology Network Japan)から、無償でダウンロードできます。OTN-Jを使用するには、オンラインでの登録が必要です。登録は、次のWebサイトから無償で行えます。

http://www.oracle.com/technetwork/index.html

すでにOTNのユーザー名およびパスワードを取得している場合は、次のURLでOTN Webサイトのドキュメントのセクションに直接接続できます。

http://www.oracle.com/technetwork/documentation/index.html

その他の情報については、次のサイトを参照してください。

http://www.microsoft.com

表記規則

このマニュアルでは、次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ドキュメントのタイトル、強調またはユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

Oracle Objects for OLEの新機能

この項では、Oracle Database 11g リリース2(11.2)の新機能について説明し、追加情報の参照先を示します。このリリースに移行したユーザー向けに、以前のリリースでの新機能情報も掲載しています。

次の各項では、Oracle Oracle Objects for OLEの新機能について説明します。

- Oracle Database 11g リリース1(11.1)およびリリース2(11.2)の新機能

- Oracle Database 10g リリース2(10.2)の新機能

- Oracle Database 10g リリース1(10.1)の新機能

Oracle Database 11g リリース1(11.1)およびリリース2(11.2)の新機能

これらのリリースには、新機能はありません。

Oracle Database 10g リリース2(10.2)の新機能

このリリースには、新機能はありません。

Oracle Objects for OLEのドキュメントは改善されて再編成されていますが、追加された内容はありません。ドキュメントは、印刷可能なPDF形式に書式設定されています。ドキュメント・ライブラリにはPDF形式とHTML形式のドキュメントが用意されています。WinHelp形式のオンライン・ヘルプは提供されていません。

Oracle Database 10g リリース1(10.1)の新機能

- Oracleグリッド・コンピューティングのサポート
Oracle Objects for OLEはグリッド対応であるため、開発者はアプリケーション・コードを変更せずに、Oracleデータベースのグリッド・サポートを利用できます。

- 新しいデータ型のサポート
Oracle Objects for OLEでは、Oracle Database 10gで導入されたBINARY_DOUBLEおよびBINARY_FLOATデータ型がサポートされるようになりました。これらの型のインスタンスは、データベースからフェッチするか、またはストアド・プロシージャとファンクションを含めて、SQL文とPL/SQLブロックへの入力または出力変数として渡すことができます。

BINARY_DOUBLEおよびBINARY_FLOATデータ型をバインドするために、次の定数がoraconst.txtに追加されました。

- ORATYPE_BDOUBLE、Oracleデータ型BINARY_DOUBLE、値101

- ORATYPE_BFLOAT、Oracleデータ型BINARY_FLOAT、値100

- 複数のOracleホームのサポート
リリース1(10.1)から、Oracle Objects for OLEを複数のOracleホームにインストールできるようになりました。ただし、Component Object Model(COM)コンポーネントであるため、コンピュータ上でアクティブにできるのは1つのインスタンスのみです。つまり、前のインストールは、現在(最新)のインストールによって非アクティブにされます。

複数のホームを使用できるようにするには、KEY_HOMENAMEの使用が必須になりました。また、一部のOracle Objects for OLEファイルにはバージョン番号が含まれます。

関連項目:

- インストール

- Oracle Objects for OLEの再配布可能ファイル

- Windowsのレジストリ・サブキーについては、「チューニングとカスタマイズ」を参照してください。

1 Oracle Objects for OLEの紹介

この章では、Oracle Objects for OLE(OO4O)を紹介します。

注意:
Oracle Database 11gリリース2(11.2)は、Oracle Objects for OLEをサポートする最後のデータベース・バージョンです。Oracle Database 11gリリース2(11.2)の後にリリースされるOracle Databaseバージョンでは、Oracle Objects for OLEはサポートされません。オラクル社のライフタイム・サポート・ポリシーの対象となっている既存のOracle Databaseバージョンでは、Oracle Objects for OLEを引き続き使用できます。

内容は次のとおりです。

- Oracle Objects for OLEの概要

- Oracle Objects for OLEインプロセス・オートメーション・サーバー

- Oracle Data Control

- Oracle Objects for OLE C++クラス・ライブラリ

- 必要な設定

- Oracle Objects for OLEファイルの場所

- コンポーネントの認証

- Oracle Objects for OLEの再配布可能ファイル

Oracle Objects for OLEの概要

Oracle Objects for OLE(OO4O)を使用すると、Microsoft COMオートメーションおよびActiveXテクノロジをサポートするプログラミングまたはスクリプト言語を介して、Oracleデータベースに格納されたデータにアクセスできます。これには、Visual Basic、Visual C++、Visual Basic for Applications(VBA)、IIS Active Server Pages(VBScriptおよびJavaScript)などが含まれます。

図1-1に、OO4O製品を構成するソフトウェア・レイヤーを示します。

図1-1 OO4Oのソフトウェア・レイヤー

OO4Oでは、次の内容が提供されます。

- Oracle Objects for OLEインプロセス・オートメーション・サーバー

- Oracle Data Control

- Oracle Objects for OLE C++クラス・ライブラリ

Oracle Objects for OLEインプロセス・オートメーション・サーバー

OO4Oインプロセス・オートメーション・サーバーは、Oracleデータベースへの接続、SQL文やPL/SQLブロックの実行、および結果へのアクセスのための一連のCOMオートメーション・オブジェクトです。

図1-2に、OO4O製品を構成するオブジェクト・モデルを示します。

図1-2 オートメーション・オブジェクト

Microsoft ActiveX Data Objects(ADO)などのCOMベースのデータベース接続APIとは異なり、OO4Oオートメーション・サーバーは、特にOracle Databaseを対象に作成されたものです。これは、Oracle Database固有の機能にアクセスするために最適化されたAPIを提供し、このAPIを使用せずにODBCまたはOLE DBコンポーネントからアクセスすると、煩雑であったり機能を利用できません。

OO4Oは、Visual BasicやExcelなどで開発された典型的な2層クライアント/サーバー・アプリケーションから、Microsoft Internet Information Server(IIS)やMicrosoft Transaction Server(MTS)におけるWebサーバー・アプリケーションなど複数層アプリケーション・サーバー環境に配置されたアプリケーション・サーバーまで、様々な環境でOracleデータベースに効率的かつ簡単にアクセスするための主機能を備えています。

関連項目:
オートメーション・オブジェクトの紹介

次の機能があります。

- Oracle 11gはグリッド対応であるため、開発者は既存コードを変更せずにグリッド・サポートをフルに活用できます。

- 問合せの結果セットに簡単かつ効率的にアクセスするための、スクロール可能で更新可能なクライアント側カーソル(調整可)。

- PL/SQLの無名ブロックおよびストアド・プロシージャを実行するためのPL/SQLのサポート。これには、PL/SQLストアド・プロシージャのパラメータに必要なOracleデータ型(PL/SQLカーソルなど)のサポートも含まれます。

- 配列のフェッチ、更新および挿入に対するサポート。これによって、ネットワーク・ラウンドトリップの回数が減少します。

- Oracleデータベースに格納されている動的コンテンツを使用し処理するスケーラブルな中間層アプリケーション・コンポーネント(IIS Active Server Pagesなど)の開発を可能にする接続プール。

- COM+およびMicrosoft Transaction Server(MTS)が管理するトランザクションのサポート。

- 次に示す拡張Oracleデータ型のインスタンスへのシームレスなアクセス。

- オブジェクト参照(REF)

- オブジェクト・インスタンス(オブジェクト)

- ネストした表

- VARRAY

- BLOB、CLOB、NCLOBおよびBFILE

- XMLの生成。

- アドバンスト・キューイングの完全なサポート。

- データベース・イベントの公開、検出およびサブスクライブのサポート。

- SQL文とPL/SQLブロックの非同期処理のサポート。

- スキーマ・オブジェクトを記述するための使いやすいインタフェース。

- ストアド・プロシージャ用のOracleコード・ウィザード。このウィザードは、PL/SQLまたはJavaストアド・プロシージャを実行するOO4Oコードを自動的に生成します。

- マルチスレッド環境におけるオートメーション・オブジェクトへの安全なアクセスを可能にするスレッド・セーフティ。

関連項目:

- 第9章「サーバー・オブジェクト」

- 第11章「サーバー・プロパティ」

- 第10章「サーバー・メソッド」

- 第4章「OO4Oの拡張機能」

Oracle Data Control

Oracle Data Controlは、Oracleデータベースとビジュアル・コントロールとの間のデータ交換を簡素化するために設計されたActiveXコントロールです。このビジュアル・コントロールには、Visual Basicやカスタム・コントロールをサポートする他の開発ツールの編集、テキスト、リストおよびグリッドのコントロールなどがあります。

データ・コントロールによって、コードの記述なしに、ほとんどのデータ・アクセス操作を実行できます。データ・コントロール付きのダイナセットを作成するには、Connect、DatabaseNameおよびRecordSourceの各プロパティを設定して、Refreshコマンドを実行します。

データ・コントロールは、基礎となるダイナセットの1フィールド、1レコードまたは複数レコードを表示する他のコントロールにバインドできます。レコードの移動が発生すると、バインド済コントロール内のデータはダイナセットのカレント・レコードと同期します。データ・コントロールにバインドされているコントロールのデータをユーザーが変更した場合、その変更内容は基礎となるダイナセットとデータベースに自動的に反映されます。

Oracle Data Controlは、Visual Basicに含まれているMicrosoftデータ・コントロールと互換性があります。Visual Basicのデータ・コントロールに習熟している場合は、Oracle Data Controlの使用方法をすぐに理解できます。データ認識コントロールとData Controlとの間の通信は、Microsoftが指定したプロトコルによって制御されます。

関連項目:

- 「Properties」ウィンドウを使用したOracle Data Controlのプロパティの設定

- プログラムによるOracle Data Controlのプロパティの設定

- データ・コントロール・イベント

Oracle Objects for OLE C++クラス・ライブラリ

Oracle Objects for OLE C++クラス・ライブラリは、OO4Oオートメーション・サーバーへのプログラム的なアクセスを提供するC++クラスのコレクションです。このクラス・ライブラリはOLEオートメーションを使用して実装されますが、使用するためにOLE開発キットやOLE開発の知識は必要ありません。このライブラリを使用すると、C++開発者はOO4OインタフェースにアクセスするためのCOMクライアント・コードを記述する必要がありません。

オブジェクト・クラスに加え、このクラス・ライブラリもバインド済クラスを提供し、これにより、テキスト・ボックスやリスト・ボックスなどのコントロールをダイナセット(データベース内の表の列)のフィールドに直接リンクできます。このバインド済クラスは、Visual Basicと同様に、遅延実行時バインディングをサポートします。Oracle Objects for OLE C++クラス・ライブラリは、バインド済クラスに関してMicrosoft Visual C++およびMicrosoft Foundation Classesでサポートされています。

関連項目:
オンライン・ヘルプとして利用できるOracle Objects for OLE C++クラス・ライブラリ開発者ガイド

必要な設定

この項では、Oracle Objects for OLEを使用するために必要な設定を説明します。

インストール

Oracle Database 10gからは、Oracle Objects for OLEを複数のOracleホームにインストールできるようになりました。ただし、COMコンポーネントであるため、コンピュータ上でアクティブにできるのは1つのインスタンスのみです。つまり、前のインストールは、現在(最新)のインストールによって非アクティブにされます。OracleホームはOracleインストーラを使用して切り替えることができます。

システム要件

注意:
Oracle Objects for OLEは、Windows x64オペレーティング・システムでサポートされていません。

Oracle Objects for OLEをインストールするには、次のシステム要件が必要です。

- Windowsオペレーティング・システム。

- 32-bit: Windows 7(Professional、EnterpriseおよびUltimate Edition)、Windows Vista(Business、EnterpriseおよびUltimate Edition)、Windows Server 2008(Standard、Enterprise、Datacenter、WebおよびFoundation Edition)、Windows Server 2003 R2(すべてのエディション)、Windows Server 2003(すべてのエディション)、またはWindows XP Professional Edition。
Oracleは、これらのオペレーティング・システム上で32-bitのOracle Objects for OLE x86版、AMD64およびIntel EM64Tプロセッサをサポートしています。

- ローカルまたはリモートのOracleデータベース(Oracle9i リリース2以上)。

- Oracle Client。Oracle Universal Installerは、RSFがOO4Oインストールの一部としてインストールされていることを確認します。

- OO4Oオートメーション・サーバーには、COMオートメーションをサポートする次のようなアプリケーションが必要です。

- Microsoft Visual Basic

- Microsoft Excel

- Microsoft Access

- Microsoft Internet Information Server(IIS)

- Borland Delphi

その他の要件

次の要件が必要になる場合があります。

- Oracle Data ControlにはVisual Basicが必要です。

- Oracle Objects for OLE C++クラス・ライブラリにはMicrosoft Visual C++ Version 6.0以上が必要です。

- OO4Oコード・ウィザードにはVisual Basic 6が必要です。Visual Basic 6は、コード・ウィザードをインストールする前にインストールする必要があります。

- OO4O Visual Basicプロジェクトを開発する際は、Oracleインプロセス・サーバー・タイプ・ライブラリ(oipVER.tlb)を参照する必要があります。
参照するには、「Project」メニュー(VB 5.0/6.0)から「References」を選択し、ORACLE_BASE\\ORACLE_HOME\bin\oipVER.tlbファイルを指しているOracle In-Process Server 5.0 Type Libraryの横にあるボックスを選択します。詳細は、「Visual BasicでのOracle Objects for OLEオートメーションの使用」参照してください。

関連項目:
Oracle Objects for OLEの要件の詳細は、「Oracle Objects for OLEの再配布可能ファイル」および「問題解決」を参照してください。

Oracle Objects for OLEファイルの場所

OO4Oのインストールの一部として次のディレクトリが作成され、対応するファイルが格納されます。

- ORACLE_BASE\ORACLE_HOME\OO4O - SQLスクリプトおよび定数ファイル

- ORACLE_BASE\ORACLE_HOME\OO4O\CPP - ライブラリ、インクルード・ファイル、DLL、クラス・ライブラリのソース

- ORACLE_BASE\ORACLE_HOME\OO4O\CPP\MFC - ライブラリ、インクルード・ファイル、MFCバインド済クラス・ライブラリのソース

- ORACLE_BASE\ORACLE_HOME\OO4O\EXCEL\SAMPLES - Excelのサンプル

- ORACLE_BASE\ORACLE_HOMEOO4O\VB\SAMPLES - Visual Basicのサンプル

- ORACLE_BASE\ORACLE_HOME\OO4O\VB\SAMPLES\QT - Visual Basicクイック・ツアー・ガイド

- ORACLE_BASE\ORACLE_HOME\OO4O\IIS\SAMPLES - IISのサンプル

- ORACLE_BASE\ORACLE_HOME\OO4O\codewiz - OO4Oコード・ウィザードのサンプル

コンポーネントの認証

最新の動作保証情報は、My Oracle Support(以前のOracleMetaLink)を参照してください。

http://metalink.oracle.com/

My Oracle Supportを使用する前にオンライン登録を行う必要があります。My Oracle Supportにログインした後、左側の列から「製品ライフサイクル」を選択します。「製品ライフサイクル」ページから、「動作保証」をクリックします。その他の「製品ライフサイクル」オプションには、「製品アベイラビリティ」、「サポート終了日のご案内」および「アラート」があります。

Oracle Objects for OLEの再配布可能ファイル

この項では、エンド・ユーザーまたは開発者が使用するコンピュータで再配布または更新できるファイルについて説明します。

エンド・ユーザーが現行リリースのOracle Objects for OLEをコンピュータにインストールしているかどうかが明確ではない場合は、Oracle Objects for OLEに含まれるOO4Oアプリケーション固有のファイルを再配布する必要があります。典型的な例は、OO4OがOracle Universal Installerを使用せずにパッチとしてインストールされた場合です。

再配布可能ファイルの場所

表1-1に、再配布可能ファイルの場所、コメントおよび必要な動作を示します。

表1-1 再配布可能ファイルの場所

ファイル

ディレクトリの場所

必要な処理

備考

oipVER.dll

ORACLE_BASE\ ORACLE_HOME\bin

コマンド・プロンプトで次のコマンドを実行します。

drive:\path>

regsvr32.exe oipVER.dll

なし

oipVER.tlb

ORACLE_BASE\ ORACLE_HOME\bin

なし

なし

oraansiVER.dll

ORACLE_BASE\ ORACLE_HOME\bin

なし

VERは現行バージョンに変更してください。

oo4oparm.reg

ORACLE_BASE\ ORACLE_HOME\oo4o

ご使用のコンピュータの正しいORACLE_HOMEの位置とHOMEIDに編集します。コマンド・プロンプトで次のコマンドを実行します。drive:\path>

oo4oparm.reg

OO4O構成情報を登録するためのファイルです。

oiplang.msb

ORACLE_BASE\ ORACLE_HOME \oo4o\mesg

なし

このメッセージ・ファイルは、言語ごとに異なります。oipus.msbは英語版、oipja.msbは日本語版です。

oraclm32.dll

(Microsoft

VC++用)

または

oradc.ocx

ORACLE_BASE\ ORACLE_HOME\bin

oradc.ocxの場合は、次のコマンドを実行します。

regsvr32.exe oradc.ocx drive:\path>

アプリケーションで使用した開発ソフトウエアに対応するファイルを配布してください。

さらに、「Oracle Objects for OLEの概要」で説明したシステム要件を満たしていることを確認してください。

アプリケーションの構築に使用した開発ソフトウエアに対応して、次のリストにあるファイルを配布する必要があります。

- oraclm32.dll(Microsoft Visual C++用)

- oradc.ocx

ファイルの更新と登録

OO4O構成情報を登録するためのoo4oparm.regファイルが用意されています。このファイルを確認し、必要に応じて編集して、正しいORACLE_HOMEの位置とHOMEIDをご使用のコンピュータに反映してください。oipVER.dllを登録し、レジストリのoo4oparm.regにOO4O構成情報を入力するには、コマンド・プロンプトで次のコマンドを実行してください。

drive:\path> regsvr32.exe oipVER.dll

drive:\path> oo4oparm.reg

メッセージ・ファイルoiplang.msbも用意して、ORACLE_BASE\ORACLE_HOME\oo4o\mesgディレクトリにコピーする必要があります。このメッセージ・ファイルは、言語ごとに異なります。たとえば、oipus.msbは英語版、oipja.msbは日本語版です。

注意:
これが機能するためには、Oracle Data Control(oradc.ocx)を登録する必要があります。OLE Control Extension(OCX)は、コマンド・プロンプトで次のコマンドを実行することによって登録できます。
drive:\path> regsvr32.exe oradc.ocx

関連項目:
Oracle Data Control

2 オートメーション・クライアントでのOracle Objects for OLEの使用

この章では、オートメーション・クライアントを使用してOracleデータにアクセスする方法を説明します。

内容は次のとおりです。

- オートメーション・クライアントの使用に関する概要

- デモ・スキーマとサンプル・コード

- Visual BasicでのOracle Objects for OLEオートメーションの使用

- Active Server Pages(ASP)でのOO4Oオートメーションの使用

- ExcelでのOracle Objects for OLEオートメーションの使用

- Microsoft C++の使用

- Visual BasicでのOracle Data Controlの使用

- MS Visual C++でのOracle Data Controlの使用

オートメーション・クライアントの使用に関する概要

Oracle Objects for OLE(OO4O)は、各種プログラミングまたはスクリプト言語を使用して、Oracleデータベースのデータにすばやく効率的にアクセスできるように設計されています。

OO4Oは、Visual Basic、Excel、Active Server Pages、Internet Information Server(IIS)およびその他開発ツールとともに簡単に使用できます。

Visual BasicでOracle Data Controlを使用すると、Oracleデータにアクセスする別のメソッドを使用できます。

この開発者ガイドには、特定のメソッドとプロパティに関する例が記載されています。さらに、サンプル・プログラムがOracle Objects for OLEとともにインストールされ、ORACLE_BASE\\ORACLE_HOME\oo4o\ディレクトリ内のVB、EXCEL、IIS、CPPなどの下に置かれます。

Visual BasicのOO4Oのクイック・ツアーも用意されています。

関連項目:
第6章「Visual Basic用クイック・ツアー」

デモ・スキーマとサンプル・コード

この開発者ガイドに含まれているサンプル・コード、およびOracle Objects for OLEに同梱されているサンプル・アプリケーションは、デモ・スキーマ(データベース表およびその他のオブジェクト)およびデモ用のユーザー/パスワード(scott/tiger)とともに使用できるように設計されています。サンプル・コードはORACLE_BASE\\ORACLE_HOME\oo4oディレクトリにあります。

デモ・スキーマの作成

ORACLE_BASE\\ORACLE_HOME\oo4oディレクトリにあるdemobld7.sqlスクリプトで、OO4Oデモ・スキーマを作成できます。デモ・スキーマは、demodrp7.sqlスクリプトで削除できます。

デモ・スキーマ

デモ・スキーマには次の参照が含まれます。

- デモ表EMPおよびDEPT

- ユーザーscottとパスワードtiger(scott/tiger)

- ネットワーク別名ExampleDb
ネットワーク・サービス(データベース)の別名およびtnsnames.oraファイルの設定の詳細は、『Oracle Net Services管理者ガイド』を参照してください。

多くの例では、ネットワーク別名に" "(NULL文字列)を使用することによって、ローカル・データベースにアクセスできます。

その他のスキーマ

例を実行するために他のスキーマが必要な場合があります。このガイドの付録では、例の説明の中でスキーマの名前と場所を示しています。

関連項目:
追加のスキーマ

関連ファイル

ORACLE_BASE\\ORACLE_HOME\oo4oディレクトリには、次の項目が含まれています。

- OO4Oのサンプル・プログラム。
サブディレクトリには、C++とVisual Basicの両方のサンプルがあります。

- ストアド・プロシージャの作成に使用されるoraexamp.sqlスクリプト。multicur.sqlやempcur.sqlなどの追加スクリプトが、他のサンプル・プログラムを設定するために用意されています。

- オプション・フラグおよびプロパティ値に使用される定数の値が含まれる、Oracle Objects for OLEのグローバル定数ファイルoraconst.txt。これらの定数はOracleインプロセス・サーバーのタイプ・ライブラリにも含まれているため、通常、このファイルは必要ありません。

Visual BasicでのOracle Objects for OLEオートメーションの使用

この例で示すコード部分は、ダイナセットに必要なオブジェクトをすべて作成してからダイナセット自体を作成する方法を示します。

1. Visual Basicを起動して新規プロジェクトを作成します。「Project」メニューから「References」を選択し、「InProcServer 5.0 Type Library」をチェックします。

2. Visual Basicを起動して新規プロジェクトを作成します。次に、フォームの宣言セクションに次のコードを追加します。

...
' Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim OraFields As OraFields

3. Oracleデータを表示するフォームに関連付けられているLoadプロシージャに、次のコードを追加します。

' Create the OraSession Object. The argument to CreateObject is the
' name by which the OraSession object is known to the OLE system.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

' Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

' Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

' You can now display or manipulate the data in the dynaset. For example:
Set OraFields = OraDynaset.fields
OraDynaset.movefirst
Do While Not OraDynaset.EOF
MsgBox OraFields("ename").Value
OraDynaset.movenext
Loop
End Sub

4. フォームを実行し、結果を表示します。

関連項目:

- Visual BasicでのOO4Oの使用については、「オートメーション・クライアントでのOracle Objects for OLEの使用」を参照してください。

- OraClientオブジェクト

- OraDatabaseオブジェクト

- OraDynasetオブジェクト

- OraFieldオブジェクト

- OraParameterオブジェクト

- OraSessionオブジェクト

Active Server Pages(ASP)でのOO4Oオートメーションの使用

この例では、Microsoft Internet Information Server(IIS)のActive Server Pages(ASP)を使用して、Oracle Objects for OLEの接続プール機能について説明します。サンプル・コードでは、SQL SELECT問合せを実行し、その結果をHTML表として戻します。このスクリプトで使用されているデータベース接続は、global.asaファイルの実行時に作成されたプールから取得されています。

Oracle Objects for OLEをOLEオートメーションとIISで使用するためには、すべてのASP拡張機能を含めて、IIS 3.0以上をインストールする必要があります。IISを実行しているコンピュータで、Oracleデータベースにアクセス可能であることも必要です。

注意:
この例のサンプル・コードは、ORACLE_BASE\\ORACLE_HOME\oo4o\iis\samples\asp\connpoolディレクトリから入手できます。

1. SQL*Plusを起動し、scott/tigerでOracleデータベースにログインします。
次のPL/SQLプロシージャを作成します。

-- creates PL/SQL package to be used in ASP demos
create or replace package ASP_demo as
--cursor c1 is select * from emp;
type empCur is ref cursor;
PROCEDURE GetCursor(p_cursor1 in out empCur, indeptno IN NUMBER,
p_errorcode OUT NUMBER);
END ASP_demo;
/

ASP_demoパッケージ本体を次のように作成または置換します。

PROCEDURE GetCursor(p_cursor1 in out empCur, indeptno IN NUMBER,
p_errorcode OUT NUMBER) is
BEGIN
p_errorcode:= 0;
open p_cursor1 for select * from emp where deptno = indeptno;
EXCEPTION
When others then
p_errorcode:= SQLCODE;
END GetCursor;
...

END ASP_demo;
/

2. Active Server Pages(ASP)のサンプル・コードを作成します。OO4Oに関係のあるコードは太字になっています。

'GLOBAL.ASA

<OBJECT RUNAT=Server SCOPE=Application ID=OraSession
PROGID="OracleInProcServer.XOraSession"></OBJECT>
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart

'Get an instance of the Connection Pooling object and
'create a pool of OraDatabase
OraSession.CreateDatabasePool 1,40,200,"exampledb", "scott/tiger",  0
End Sub

'OO4ODEMO.ASP

<html>
<head>
<title>Oracle Objects For OLE (OO4O) </title>
</head>
<body BGCOLOR="#FFFFFF">
<font FACE="ARIAL,HELVETICA">
<h2 align="center">Oracle Objects For OLE (OO4O) </h2>
<form ACTION="OO4ODEMO.asp" METHOD="POST">
<%
SqlQuery = Request.Form("sqlquery")
%>
<p>This sample executes a SQL SELECT query and returns the result as an HTML table. The database connection used in this script is obtained from a pool that is created when the <strong>global.asa</strong> is executed. </p>
<p>SQL Select Query: <input SIZE="48" NAME="sqlquery"> </p>
<p><input TYPE="SUBMIT"> <input TYPE="RESET"> <input LANGUAGE="VBScript" TYPE="button" VALUE="Show ASP Source" ONCLICK="Window.location.href = &quot;oo4oasp.htm&quot;"

NAME="ShowSrc"></p>
</form>
<%
If SqlQuery = "" Then
%>
<% Else %>
<table BORDER="1">
<%
Set OraDatabase = OraSession.GetDatabaseFromPool(10)
Set OraDynaset = OraDatabase.CreateDynaset(SqlQuery,0)
Set Columns = OraDynaset.Fields
%>
<tr>
<td><table BORDER="1">
<tr>
<% For i = 0 to Columns.Count - 1 %>
<td><b><% = Columns(i).Name %></b></td>
<% Next %>
</tr>
<% while NOT OraDynaset.EOF %>
<tr>
<% For col = 0 to Columns.Count - 1 %>
<td><% = Columns(col) %>
</td>
<% Next %>
</tr>
<% OraDynaset.MoveNext %>
<% WEnd %>
</table>

<p></font><%End If%> </p>
<hr>
</td>
</tr>
</table>
</body>
</html>

3. 読込みと実行のアクセスが可能なMicrosoft Internet Service Managerから仮想ディレクトリを作成し、すべての.aspおよび.asaファイルをそのディレクトリに格納します。

4. oo4odemo.aspファイルを起動するHTMLページを作成します。次のように、リンクをそのページに追加します。

<a href="/<your_path>/OO4ODEMO.ASP">This link launches the demo!</a>

5. Webブラウザにページをロードし、デモへのリンクをクリックします。

6. 「SQL SELECT Query」フィールドにSELECT * FROM EMPなどの問合せを入力し、「Submit Query」ボタンを選択します。問合せの最後にセミコロン(;)を含めないでください。

ExcelでのOracle Objects for OLEオートメーションの使用

このサンプルでは、OracleデータをExcelワークシートに挿入する方法を示します。

注意:
この例のサンプル・コードは、ORACLE_BASE\\ORACLE_HOME\oo4o\excel\samples\ディレクトリから入手できます。

Microsoft ExcelでOLEオートメーションを使用してOracleデータをワークシートに挿入する手順は、次のとおりです。

1. Excelを起動して新しいワークシートを作成します。

2. 「ツール」メニューの「マクロ」オプションを使用してOracleデータを操作するための新しいマクロを作成して編集します。

3. マクロ用のVisual Basicコードを入力し、Oracleダイナセットを作成してアクセスします。たとえば、次のEmpData()およびClearData()プロシージャ(マクロ)を参照してください。

Sub EmpData()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim EmpDynaset As OraDynaset
Dim flds() As OraField
Dim fldcount As Integer
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("ExampleDB", "scott/tiger", 0&)
Set EmpDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)
Range("A1:H15").Select
Selection.ClearContents

'Declare and create an object for each column.
'This will reduce objects references and speed up your application.
fldcount = EmpDynaset.Fields.Count
ReDim flds(0 To fldcount - 1)
For Colnum = 0 To fldcount - 1
Set flds(Colnum) = EmpDynaset.Fields(Colnum)
Next

'Insert Column Headings
For Colnum = 0 To EmpDynaset.Fields.Count - 1
ActiveSheet.Cells(1, Colnum + 1) = flds(Colnum).Name
Next

'Display Data
For Rownum = 2 To EmpDynaset.RecordCount + 1
For Colnum = 0 To fldcount - 1
ActiveSheet.Cells(Rownum, Colnum + 1) = flds(Colnum).Value
Next
EmpDynaset.MoveNext
Next

Range("A1:A1").Select

End Sub

Sub ClearData()
Range("A1:H15").Select
Selection.ClearContents
Range("A1:A1").Select
End Sub

4. 簡単にアクセスできるように、EmpData()やClearData()などの作成されたプロシージャ(マクロ)をワークシート上のコマンド・ボタンに割り当てます。このボタンを選択すると、ワークシートのデータを消去してリフレッシュできます。次のスクリーンショットでは、ClearData()が「Clear」ボタンに、EmpData()が「Refresh」ボタンに割り当てられています。

Microsoft C++の使用

Visual C++でのOracle Objects for OLEの詳細は、オンライン・ヘルプとして利用できるOracle Objects for OLE C++クラス・ライブラリ開発者ガイドを参照してください。

Visual BasicでのOracle Data Controlの使用

Oracle Data Controlがリフレッシュされると、クライアント(必要な場合)、セッション、データベースおよびダイナセットが自動的に作成されます。基本的なアプリケーションの場合、コードは不要かほとんど必要ありません。

この項では、Oracle Data Controlのプロパティを設定する方法を2つ示します。

- Visual Basicの「Properties」ウィンドウを使用する方法

- プロパティをプログラミングする方法

「Properties」ウィンドウでのOracle Data Controlのプロパティの設定

1. Visual Basicを起動して新規プロジェクトを作成します。

2. 「Project」メニューの「Components」オプションで、プロジェクトに「Oracle Data Control」を追加します。

Visual Basicのツール・パレットにOracle Data Controlが追加され、次のように表示されます。

3. Oracle Data Controlをプロジェクトに追加するために、そのコントロールをフォーム上にドラッグ・アンド・ドロップします。コントロールのサイズと位置を調整してください。

4. コントロールの名前をOraDataControlに変更します。Oracleデータベースにアクセスするために、Connect、DatabaseNameおよびRecordSourceプロパティを次のように設定します。

5. Oracle Data Controlが設定されると、Visual Basicコントロールを同じフォームにドラッグ・アンド・ドロップして、コントロール内のデータにアクセスできます。希望するデータ・フィールドとデータ・ソースにアクセスするには、「Data」にあるプロパティを設定します。次の図は、従業員番号の表示を設定するTextBoxコントロールを示します。

6. プロジェクトが実行されると、Oracle Data Controlを使用して、RecordSourceプロパティによって識別されたデータが表示されます。

Microsoft Grid Controlを使用して、表内の全データを表示することもできます。「Project」メニューの「Components」オプションで、グリッド・コントロールを追加する必要があります。

プログラムによるOracle Data Controlのプロパティの設定

次に示すコード部分では、ダイナセットの作成に必要なOracle Data Controlのプロパティをプログラムで設定する方法を示します。これらは、Visual Basicの「Properties」ウィンドウで設定できるプロパティと同じです。

1. 新しいプロジェクトを作成し、「Project」メニューの「Components」オプションでプロジェクトに「Oracle Data Control」を追加します。

2. Oracle Data Controlをフォーム上にドラッグ・アンド・ドロップします。コントロールの名前をOraDataControlに変更します。

3. フォームにOracle Data Controlを挿入した後、フォームに関連付けられているLoadプロシージャに次のコードを追加します。

...

'Set the username and password.
OraDataControl.Connect = "scott/tiger"

'Set the database name.
OraDataControl.DatabaseName = "ExampleDb"

'Set the record source.
OraDataControl.RecordSource = "select * from emp"

'Refresh the data control.
OraDataControl.Refresh
...

これで、次のように、参照できる有効なセッション、データベースおよびダイナセットが作成されました。

オブジェクト

参照

orasession

oradatacontrol.oradatabase.orasession

oradatabase

oradatacontrol.oradatabase

oradynaset

oradatacontrol.recordset

4. 前の例に示したように、TextBoxなどのVisual Basicコントロールを使用して、RecordSourceプロパティのデータにアクセスできます。

MS Visual C++でのOracle Data Controlの使用

この例では、Oracle Data Controlを伴った簡単なWin32アプリケーションをMS Visual C++を使用して作成する方法を示します。この例では、Oracleデータ・コントロールとDBグリッド・コントロールの両方がシステムに登録されていると仮定しています。

1. Microsoft Visual C++プログラムを起動します。

2. 「File」メニューから「New」を選択します。

3. 「New Window」の「Projects」タブで、「MFC AppWizard.exe」を選択します。OO4Oなどのプロジェクト名を入力し、プロジェクトの位置を決定します。「OK」をクリックします。

4. 「MFC AppWizard」のステップ1で、「Dialog based application」を選択してから「Next」をクリックします。

5. ウィザードのステップ2で、「ActiveX Controls」ボックスがチェックされていることを確認してデフォルトを受け入れ、ダイアログ・ボックスのタイトルを入力します。「Next」をクリックします。

6. ウィザードのステップ3で、デフォルトを受け入れます。「Next」をクリックします。

7. ステップ4で、「Finish」をクリックします。「New Project Information」画面で「OK」をクリックします。

8. 「Project Workspace」ダイアログ・ボックスで、「ResourceView」タブを選択します。「Resources」フォルダを拡張してから「Dialog」フォルダを拡張します。

9. ダイアログ・ボックスを編集できるように、メイン・プロジェクトのダイアログ・ボックスをダブルクリックします。
注意: OO4Oをプロジェクト名として使用していた場合は、IDD_OO4O_DIALOGとなります。

10. ダイアログ・ボックスにあるデフォルトのコントロールを削除します。サイズを調整してダイアログ・ボックスを拡大します。

11. 選択したダイアログ・ボックスで、マウスの右ボタンをクリックしてメニューを表示します。メニューから「Properties」を選択します。「Properties」ウィンドウの「General」タブで、キャプションを「Oracle Data Control Example」に変更します。「Properties」ウィンドウをクローズします。

12. 選択したダイアログ・ボックスで、マウスの右ボタンをクリックしてメニューを表示します。メニューから「Insert ActiveX Control...」を選択します。このウィンドウで「ORADC Control」を選択し、「OK」をクリックします。

13. ダイアログ・ボックスの下部に「ORADC Control」を配置します。選択したデータ・コントロールで、マウスの右ボタンをクリックしてメニューを表示します。メニューから「Properties」を選択します。

14. 「Properties」ウィンドウの「General」タブで、IDをIDC_ ORADATACONTROLに変更します。アプリケーションの実行時にコントロールが非表示になるように、「Visible」のチェック・マークを解除します。

15. 「Properties」ウィンドウの「All」タブを表示し、次のプロパティを設定します。

Connect: scott/tiger
DatabaseName: exampledb
RecordSource: select * from emp

16. 選択したダイアログ・ボックスで、マウスの右ボタンをクリックしてメニューを表示します。メニューから「Insert ActiveX」コントロールを選択します。「DBGrid Control」を配置して「OK」をクリックします。

17. 「DBGrid Control」をダイアログ・ボックスの上部に配置してサイズを調整します。コントロールに対するプロパティを表示します。「Properties」ウィンドウの「All」タブで、DataSourceプロパティにOracle Data Control(IDC_ORADATACONTROL)を設定します。その他のプロパティに関しては、デフォルトを受け入れます。これらのデフォルトは後で変更できます。

18. 「File」メニューから「Save All」を選択します。

19. プロジェクトをビルドして実行します。

20. 次の図のように、emp表からのレコードがDBGrid Controlに表示されます。

3 基本的な機能

この章では、Oracle Objects for OLEの基本的な機能について説明します。

内容は次のとおりです。

- クライアント・アプリケーションの概要

- Oracle Objects for OLEオートメーション・サーバーへのアクセス

- Oracle Databaseへの接続

- 各種コマンドの実行

- スレッド・セーフティ

- 接続プール管理機能の使用

- 失われた接続の検出

- PL/SQLのサポート

- トランザクション制御

- Microsoft Transaction Serverのサポート

- 非同期処理

クライアント・アプリケーションの概要

Oracle Objects for OLEを使用すると、クライアント・アプリケーションでは、Oracleデータベースに接続して各種コマンドを実行し、戻された結果にアクセスして操作できます。特定のタスクの実行順序には多少の柔軟性はありますが、OO4Oのオートメーション・オブジェクトを使用する各アプリケーションでは、次の基本的な手順を実行します。

- Oracle Objects for OLEオートメーション・サーバーへのアクセス

- Oracle Databaseへの接続

- 各種コマンドの実行

- サーバーからの切断および使用したOO4Oオブジェクトの解放

Oracle Objects for OLEオートメーション・サーバーへのアクセス

OO4Oオートメーション・サーバーを使用してOracleデータベースに接続するには、最初にサーバーのインスタンスを作成する必要があります。Visual Basic(VB)の場合、NEWキーワードを使用することもできますが、通常はCreateObjectメソッドをコールすることでインスタンスを作成します。

Visual BasicのCreateObjectメソッドは、次の2つのOO4Oサーバー・オブジェクトとともに使用できます。次のいずれかのオブジェクトのインタフェースによって、OO4Oへのアクセスが提供され、Oracle Databaseへの接続が可能になります。

- OraSession
アプリケーションの最高レベルのオブジェクトです。これは、OraDatabase、OraConnectionおよびOraDynasetオブジェクトのコレクションを管理します。

- OraServer
データベース・インスタンスへの物理的な接続を表し、接続多重化の使用が可能になります。

CreateObjectメソッドは、コンポーネントとオブジェクトのIDを引数として使用します。

OraSessionオブジェクトの取得

次のスクリプトでは、Visual BasicでのOraSessionオブジェクトの取得方法を示します。OO4OSessionは、OraSessionオブジェクトのインスタンスを保持するオブジェクト変数です。

Dim OO4OSession as Object
Set OO4OSession = CreateObject(“OracleInProcServer.XOraSession")

または

Dim OO4OSession as OraSession
Set OO4OSession = New OraSessionClass

または

Dim OO4OSession as New OraSessionClass

次の例では、IIS Active Server PagesでのOraSessionオブジェクトの取得方法を示します。

<OBJECT RUNAT=Server SCOPE=APPLICATION ID=OO4OSession
PROGID="OracleInProcServer.XOraSession">
</OBJECT>

OracleInProcServer.XOraSessionは、Oracleクライアント・インストール・プログラムがWindowsレジストリに登録する、バージョンに依存しないOO4OのプログラムIDです。これは、OO4Oコンポーネントを識別するグローバル一意識別子(CLSID)のシンボリック名です。

OraServerオブジェクトの取得

OO4Oオートメーション・サーバーへのアクセスには、OraServerオブジェクトのインタフェースも使用できます。

Dim OO4OServer as Object
Set OO4OServer = CreateObject("OracleInProcServer.XOraServer")

これで、Oracle Databaseに接続できます。

関連項目:
Oracle Databaseへの接続

Oracle Databaseへの接続

インタフェースを取得した後は、そのインタフェースを使用してOpenDatabaseメソッドをコールし、Oracleデータベースにユーザー・セッションを確立できます。

Set EmpDb= OO4OSession.OpenDatabase("ExampleDb", "Scott/Tiger", 0)

または

Set EmpDb= OO4OServer.OpenDatabase("Scott/Tiger")

変数EmpDbはユーザー・セッションを表します。これはOraDatabaseインタフェースを保持し、ネットワーク接続別名にExampleDbを使用し、ユーザー名とパスワードにscott/tigerを使用して、Oracle Databaseにコマンドを送信します。

関連項目:
OpenDatabaseメソッド

OraServerを使用した接続多重化

OraServerインタフェースを使用すると、複数のユーザー・セッションでデータベースへの物理的なネットワーク接続を共有できます。これによって、ネットワークとデータベースのリソース使用量が削減されるため、サーバーの拡張性が向上します。ただし、複数のユーザー・セッションによるコマンド実行は、接続上でシリアル化されます。したがって、この機能は、パフォーマンス上の理由からコマンドのパラレル実行が必要なマルチスレッド・アプリケーションで使用することはお薦めしません。

次のコード例では、OraServerインタフェースを使用して2つのユーザー・セッションを確立する方法を示します。

Set OO4OServer = CreateObject("OracleInProcServer.XOraServer")
OO4OServer.Open("ExampleDb")
Set EmpDb1 = OO4OServer.OpenDatabase("Scott/Tiger")
Set EmpDb2 = OO4OServer.OpenDatabase("Scott/Tiger")

ユーザー・セッションは、以前に作成したオブジェクトのプールから取得することもできます。

関連項目:
接続プール管理機能の使用

各種コマンドの実行

OO4Oオートメーション・オブジェクトを使用して、Oracleデータベースに送信できるコマンドは、次のカテゴリに分類されます。

- 問合せ

- データ操作言語文

問合せ

問合せとは、データベースからデータを取り出す文です。1つの問合せで、0行、1行または複数行のデータを戻すことができます。すべての問合せは、次の例のようにSQLキーワードのSELECTで始まります。

SELECT ename, empno FROM emp

OO4Oでは、このようなSELECT文は、OraDatabaseインタフェースのCreateDynasetメソッドと一緒に使用されることで問合せを実行します。このメソッドは、戻された行セットにアクセスして操作するために使用されるOraDynasetオブジェクトを戻します。OraDynasetオブジェクトは、実行した問合せによって戻された行セットの参照を可能にする、(前方および後方に)スクロール可能なクライアント側カーソルの機能をカプセル化します。

注意:
後方へのスクロールが不要な場合は、クライアントのローカル・ディスクにおける結果セットのキャッシュを使用禁止にできます。パフォーマンスの大幅な向上につながるため使用禁止にすることをお薦めします。CreateDynasetメソッドにORADYN_NOCACHEオプションを渡すと、キャッシュが使用禁止になります。この定数は、oraconst.txtファイルに定義されており、OO4Oがインストールされているルート・ディレクトリORACLE_BASE\\ORACLE_HOME\OO4Oにあります。

関連項目:

- OraDynasetオブジェクト

- CreateDynasetメソッド

次のコード例では、ExampleDbデータベースに接続して問合せを実行し、行の結果セットを移動して、単純なメッセージ・ボックスに各行の列値を表示する方法を示します。

Set OO4OSession = CreateObject(“OracleInProcServer.XOraSession")
Set EmpDb = OO4OSession.OpenDatabase("ExampleDb", "Scott/Tiger", 0 )

' SELECT query described above used in next line
Set Employees = EmpDb.CreateDynaset("SELECT ename, empno FROM" & _
"emp",ORADYN_NOCACHE)
While NOT Employees.EOF
MsgBox "Name: " & Employees("ENAME").value & "Employee #: " & _
Employees("EMPNO").value
Employees.MoveNext
Wend

この例にあるEmployees("ENAME")とEmployees("EMPNO")は、結果セットの現在の行からENAME列とEMPNO列の値をそれぞれ戻します。列値にアクセスする他の方法は、ENAME列にEmployees(0)、EMPNO列にEmployee(1)のように、列の位置を使用する方法です。この方法によって、名前で列を参照するよりも速く列の値を取得できます。

この例のEmployees.MoveNext文は、結果セットの現在の行を次の行に設定します。結果セットの最終行より後ろに移動しようとすると、OraDynasetのEOFプロパティがTRUEに設定されます。

MoveNextメソッドは、OraDynasetインタフェース内のナビゲーショナル・メソッドの1つです。ナビゲーショナル・メソッドには、MoveFirst、MoveLast、MoveNext、MovePrevious、MoveNextn、MovePreviousn、MoveRelおよびMoveToがあります。

OraDynasetオブジェクトは、更新可能な実表またはビューから取り出した行を更新および削除するメソッドも提供しています。さらに、新しい行を挿入する方法も提供しています。「OraDynasetオブジェクト」を参照してください。

問合せでは、次の例のように、入力(バインド)変数を使用して、データベースにデータを提供するプログラムも要求できます。

SELECT name, empno
FROM employees
WHERE ename = :ENAME

このSQL文で、:ENAMEはアプリケーションが提供する変数のプレースホルダです。

OO4Oでは、OraParameterオブジェクトを使用して、プレースホルダにデータ値を提供します。

パラメータを定義するには、OraParametersコレクション・オブジェクトを使用します。このオブジェクトは、OraDatabaseインタフェースのParametersプロパティを参照することによって取得します。OraParametersコレクションは、OraParameterオブジェクトへの参照を追加、削除および取得するためのメソッドを提供します。

次の文は、EmpDbオブジェクト内のOraParametersコレクションに入力パラメータのORAPARM_INPUTを追加します。

EmpDb.Parameters.Add "ENAME", "JONES", ORAPARM_INPUT

ENAMEはパラメータ名で、SQL文のプレースホルダの名前と同じ(前述のサンプル・コードの:ENAME)であることが必要です。初期値としてJONESが指定され、ORAPARM_INPUTはINPUTパラメータとして使用されたことをOO4Oに通知します。

次の例では、'JONES'という名前の従業員を含んだ1行のみのOraDynasetオブジェクトを作成します。

Set OO4OSession = CreateObject(“OracleInProcServer.XOraSession")
Set EmpDb = OO4OSession.OpenDatabase("ExampleDb", "Scott/Tiger", 0 )
EmpDb.Parameters.Add "ENAME", "JONES", ORAPARM_INPUT
Set Employees = EmpDb.CreateDynaset("SELECT ename, empno FROM emp" & _
"WHERE ename = :ENAME",ORADYN_NOCACHE)

While NOT Employees.EOF
MsgBox "Name: " & Employees("ename").value & "Employee #: " & _
Employees("empno").value
Employees.MoveNext
Wend

関連項目:

- OraParameterオブジェクト

- OraParametersコレクション

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- MovePreviousn、MoveNextn、MoveRelおよびMoveToメソッド

- OraDatabaseオブジェクト

データ操作言語文

データ操作言語(DML)文では、データベース表のデータを変更できます。たとえば、次のような操作にDML文が使用されます。

- データベース・レコードの更新

- 表からの行の削除

- 表への新しい行の挿入

OO4OのOraDatabaseインタフェースは、DML文を実行するための2つのメソッド、ExecuteSQLとCreateSQLを提供します。次の説明には、これらのメソッドを様々なタイプのDML文の実行に使用する方法が記載されています。

関連項目:

- ExecuteSQLメソッド

- CreateSQLメソッド

データベース・レコードの更新

次の例では、ExecuteSQLメソッドを使用してUPDATE文を実行します。

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set EmpDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
EmpDb.Parameters.Add "ENAME", "JONES", ORAPARM_INPUT
EmpDb.ExecuteSQL ("UPDATE emp SET sal = sal + 1000 WHERE ename = :ENAME")

UPDATE文の実行には、CreateSQLメソッドを使用する方法もあります。

Set sqlStatement = EmpDb.CreateSQL("UPDATE emp SET sal = sal + 1000" & _
"WHERE ename = :ENAME", 0&)

ExecuteSQLとCreateSQLメソッドは両方とも、提供されたUPDATE文を実行します。異なる点は、CreateSQLメソッドでは文の実行に加えOraSQLStmtインタフェースへの参照を戻すことです。このインタフェースは、後でRefreshメソッドを使用して同じ問合せを実行するときに使用できます。この問合せはすでにデータベースで解析されているため、後に続く同じ問合せの実行が、特にバインド・パラメータを使用した場合に高速化されます。

たとえば、名前がKINGという従業員の給与を1000増加するには、プレースホルダの値を変更し、sqlStatementオブジェクトを次のようにリフレッシュします。

EmpDb.Parameters("ENAME").Value = "KING" sqlStatement.Refresh

頻繁に実行されるDML文の場合は、ExecuteSql文を反復して使用するよりも、OraSqlStmtオブジェクトにパラメータを使用する方が効率的です。OraSQLStmtのRefreshメソッドが実行されると、データベースによる文の解析は不要になります。異なるパラメータ値を持つ同じ問合せが頻繁に実行される、Webサーバーなどのアプリケーション・サーバーでは、前述の方法によってOracle Databaseの処理を大幅に軽減できます。

関連項目:

- ExecuteSQLメソッド

- CreateSQLメソッド

- OraSQLStmtオブジェクト

表からの行の削除

次の例では、CreateSQLメソッドを使用してemp表から行を削除します。

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set EmpDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
EmpDb.Parameters.Add "ENAME", "JONES", ORAPARM_INPUT
Set sqlStatement = EmpDb.CreateSQL ("DELETE from emp WHERE ename = :ENAME")

emp表から別の行を削除するには、パラメータの値を変更してsqlStatementオブジェクトをリフレッシュします。

EmpDb.Parameters("ENAME").Value = "KING" sqlStatement.Refresh

表への新しい行の挿入

次の例では、表に新しい行を追加します。

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set EmpDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
EmpDb.ExecuteSQL ("INSERT INTO emp (empno, ename, job, mgr, deptno)" & _
"VALUES (1233,'OERTEL', 'WRITER', 7839, 30) ")

パラメータ配列を使用した複数行の挿入

パラメータ配列を使用すると、表内の複数行をフェッチ、更新、挿入または削除できます。パラメータ配列を使用した複数行の操作は、行を個別に操作する文を複数回にわたって実行するより効率的です。

次の例では、パラメータ配列の作成にOraDatabaseインタフェースのAddTableメソッドを使用する方法を示します。配列には値が移入されており、emp表に2つの行を挿入するINSERT文の実行ではプレースホルダとして使用されます。

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set EmpDb = OO4OSession.OpenDatabase("Exampledb", "scott/tiger", 0)

'Creates parameter arrays for the empno, ename, job, and salary columns
EmpDb.Parameters.AddTable "EMPNO_ARRAY", ORAPARM_INPUT, ORATYPE_NUMBER, 2
EmpDb.Parameters.AddTable "ENAME_ARRAY", ORAPARM_INPUT, ORATYPE_VARCHAR2, 2, 10
EmpDb.Parameters.AddTable "JOB_ARRAY", ORAPARM_INPUT, ORATYPE_VARCHAR2, 2, 9
EmpDb.Parameters.AddTable "MGR_ARRAY", ORAPARM_INPUT, ORATYPE_NUMBER, 2
EmpDb.Parameters.AddTable "DEPT_ARRAY", ORAPARM_INPUT, ORATYPE_VARCHAR2, 2, 10
Set EmpnoArray = EmpDb.Parameters("EMPNO_ARRAY")
Set EnameArray = EmpDb.Parameters("ENAME_ARRAY")
Set JobArray = EmpDb.Parameters("JOB_ARRAY")
Set MgrArray = EmpDb.Parameters("MGR_ARRAY")
Set DeptArray = EmpDb.Parameters("DEPT_ARRAY")

'Populate the arrays with values
EmpnoArray(0) = 1234
EnameArray(0) = "JORDAN"
JobArray(0) = "SALESMAN"
MgrArray(0) = 7839
DeptArray(0) = 30
EmpnoArray(1) = 1235
EnameArray(1) = "YOUNG"
JobArray(1) = "SALESMAN"
MgrArray(1) = 7839
DeptArray(1) = 30

'Insert two rows
EmpDb.ExecuteSQL ("INSERT INTO emp (empno, ename, job, mgr, deptno) VALUES" & _
"(:EMPNO_ARRAY,:ENAME_ARRAY, :JOB_ARRAY,:MGR_ARRAY, :DEPT_ARRAY)")

関連項目:
AddTableメソッド

スレッド・セーフティ

OO4Oはスレッド・セーフであるため、マルチスレッドのアプリケーションおよびMicrosoft Internet Information Server(IIS)などの環境で効果的に使用できます。OO4Oは、COM/DCOM環境でのフリー・スレッドとアパートメント・スレッドの両モデルをサポートします。

OO4Oオブジェクト属性へのアクセスは、複数のスレッドを使用して実行されるとシリアル化されます。マルチスレッド・アプリケーションでの問合せ実行で最大の並列性をOO4Oで達成するには、複数スレッドでのオブジェクト共有を回避してください。

複数のスレッド間で共有されているセッション・オブジェクトで、コミット操作およびロールバック操作を使用することを避けてください(そのセッションと関連付けられているすべての接続がコミットまたはロールバックされるため)。セッション・オブジェクトでコミット操作およびロールバック操作を実行するには、使用するデータベース・オブジェクトごとに一意のセッション・オブジェクトを作成します。

接続プール管理機能の使用

OO4Oの接続プールは、OraDatabaseオブジェクトのプールです。OO4Oの接続プールは、(多くの場合)すでに接続しているOraDatabaseオブジェクトのグループです。データベースとの間で接続と切断を繰り返す必要のあるアプリケーション(ASP Webアプリケーションなど)の場合は、接続プールを使用するとパフォーマンスが向上します。

接続プールの作成

接続プールは、OraSessionインタフェースのCreateDatabasePoolメソッドをコールすることによって作成されます。OraDatabaseオブジェクトは、Oracleデータベースへの接続を表し、SQL文とPL/SQLブロックを実行するためのメソッドを含んでいます。

関連項目:
CreateDatabasePoolメソッド

プールからのオブジェクトの取得と返却

プールからOraDatabaseオブジェクトを取リ出すには、GetDatabaseFromPoolメソッドをコールします。このファンクションは、OraDatabaseオブジェクトへの参照を戻します。

関連項目:
GetDatabaseFromPoolメソッド

プールの破棄

プールが属している親セッション・オブジェクトが破棄されると、そのプールも暗黙的に破棄されます。DestroyDatabasePoolメソッドをコールすることにより、いつでも明示的に破棄できます。

関連項目:
DestroyDatabasePoolメソッド

プール属性へのアクセス

データベース・プールのプロパティは、次のとおりです。これらのプロパティは読取り専用です。

- DbPoolMaxSize - 最大プール・サイズ

- DbPoolCurrentSize - プールの現在のサイズ

- DbPoolInitialSize - プールの初期サイズ

接続プールのデータベースを使用したトランザクション処理

次の例では、推奨するトランザクションの処理方法を示します。

set Odb = OraSession.GetDatabaseFromPool(0)
Odb.Connection.BeginTrans
…

Odb.Connection.CommitTrans

失われた接続の検出

リリース8.1.6以上のクライアントにリンクされたOO4Oは、失われた接続の検出をサポートします。

OraDatabaseオブジェクトのConnectionOKプロパティをコールすることで、データベース接続の状態をアプリケーションで検証できます。OraSession.GetDatabaseFromPoolメソッドは、アプリケーションにOraDatabaseを戻す前に、接続を検証するようになりました。

接続が失われている場合、GetDatabaseFromPoolメソッドはその接続を削除し、新しい接続をフェッチします。

Dim MyDatabase As OraDatabase
Set MySession = CreateObject("OracleInProcServer.XOraSession")
Set MyDatabase = MySession.OpenDatabase("ora90", "scott/tiger", 0&)

' Other code
...
' Check if the database connection has not timed out
if MyDatabase.ConnectionOK
MsgBox " The database connection is valid"
endif

関連項目:

- ConnectionOKプロパティ

- OraDatabaseオブジェクト

- GetDatabaseFromPoolメソッド

PL/SQLのサポート

PL/SQLは、SQLを拡張したOracleの手続き型言語です。PL/SQLは、単純な問合せやSQLのデータ操作言語文では実行できない複雑なタスクを処理します。PL/SQLがない場合、Oracle Databaseでは、SQL文を1回に1文ずつ処理する必要があります。各SQL文ではデータベースに対して別のコールが発生するため、パフォーマンス上のオーバーヘッドが高くなります。ネットワーク環境では、このオーバーヘッドが大きな負担となる可能性があります。SQL文が発行されるたびに、ネットワークを介してSQL文を送信する必要があるため、通信量が増加します。PL/SQLでは、複数文のブロック全体をデータベースに1回で送信できます。これによって、アプリケーションとデータベース間での通信量を大幅に削減できます。

PL/SQLでは、多数の構造体を1ブロックにグループ化し、1つの単位として実行できます。次の内容が含まれています。

- 1つ以上のSQL文

- 変数宣言

- 代入文

- プロシージャ制御文(IF...THEN...ELSE文とループ)

- 例外処理文

- 他のOracleのストアド・プロシージャとストアド・ファンクションへのコール

- レコード、表およびカーソルのFORループなどの特別なPL/SQL機能

- カーソル変数

PL/SQLのOracle Objects for OLEとの統合

Oracle Objects for OLE(OO4O)は、PL/SQLのストアド・プロシージャとの緊密な統合を提供します。OO4Oは、PL/SQLストアド・プロシージャ、PL/SQL表およびPL/SQLカーソルなどをサポートします。PL/SQLバインド変数は、OraParameterのAddメソッドを介してサポートされます。

ストアド・プロシージャ・ブロックは、CreateSQLメソッドまたはExecuteSQLメソッドのいずれかを使用して実行されます。

Oracle Objects for OLEは、ストアド・プロシージャまたはPL/SQLの無名ブロックで作成されたカーソルを、READONLYダイナセット・オブジェクトとして戻すことができます。このためには、カーソル変数をORATYPE_CURSOR型のOraParameterオブジェクトとして割り当てる必要があります。

ストアド・プロシージャを実行した後、このOraParameterオブジェクトのValueプロパティは、読取り専用のダイナセット・オブジェクトを戻します。

このダイナセット・オブジェクトは、他のダイナセット・オブジェクトと同様に処理できます。

関連項目:

- AddTableメソッド

- Addメソッド

- ExecuteSQLメソッド

- CreateSQLメソッド

- Valueプロパティ

- OraParameterオブジェクト

ExecuteSQLとCreateSQLを使用したPL/SQLブロックの実行

OO4Oでは、次の例に示すように、OraDatabaseオブジェクトのExecuteSQLまたはCreateSQLメソッドを使用して、PL/SQLブロックを実行できます。

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set EmpDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)

'Add EMPNO as an Input parameter and set its initial value.
EmpDb.Parameters.Add "EMPNO", 7369, ORAPARM_INPUT
EmpDb.Parameters("EMPNO").ServerType = ORATYPE_NUMBER

'Add ENAME as an Output parameter and set its initial value.
EmpDb.Parameters.Add "ENAME", 0, ORAPARM_OUTPUT
EmpDb.Parameters("ENAME").ServerType = ORATYPE_VARCHAR2

'Add SAL as an Output parameter
EmpDb.Parameters.Add "SAL", 0, ORAPARM_OUTPUT
EmpDb.Parameters("SAL").ServerType = ORATYPE_NUMBER

'Add COMMISSION as an Output parameter and set its initial value.
EmpDb.Parameters.Add "COMMISSION", 0, ORAPARM_OUTPUT
EmpDb.Parameters("COMMISSION").ServerType = ORATYPE_NUMBER
EmpDb.ExecuteSQL ("BEGIN SELECT ename, sal, comm INTO :ENAME, :SAL," & _
":COMMISSION FROM emp WHERE empno = :EMPNO; END;")

'display the values of Ename, Sal, Commission parameters
MsgBox "Name: " & EmpDb.Parameters("ENAME").Value
MsgBox "Salary " & EmpDb.Parameters("SAL").Value
MsgBox "Commission: " & EmpDb.Parameters("COMMISSION").Value

次の例では、OO4OのCreateSQLメソッドを使用してストアド・プロシージャをコールするPL/SQLブロックを実行します。このプロシージャは、入力情報として部門番号を使用し、部門の名前と所在地を戻します。

この例は、従業員データベースにストアド・プロシージャを作成するために使用されます。

CREATE OR REPLACE PACKAGE Department as
PROCEDURE GetDeptName (inDeptNo IN NUMBER, outDeptName OUT VARCHAR2,
outDeptLoc OUT VARCHAR2);
END Department;
/

CREATE OR REPLACE PACKAGE BODY Department as
PROCEDURE GetDeptName(inDeptNo IN NUMBER, outDeptName OUT VARCHAR2,
outDeptLoc OUT VARCHAR2) is
BEGIN
SELECT dname, loc into outDeptName, outDeptLoc from DEPT
WHERE deptno = inDeptNo;
END;
END Department;
/

次の例では、前述のプロシージャを実行して、deptnoが10である部門の名前と所在地を取得します。

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set EmpDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
empDb.Parameters.Add "DEPTNO", 10, ORAPARM_INPUT
empDb.Parameters("DEPTNO").ServerType = ORATYPE_NUMBER
empDb.Parameters.Add "DNAME", 0, ORAPARM_OUTPUT
empDb.Parameters("DNAME").ServerType = ORATYPE_VARCHAR2
empDb.Parameters.Add "DLOC", 0, ORAPARM_OUTPUT
empDb.Parameters("DLOC").ServerType = ORATYPE_VARCHAR2
Set PlSqlStmt = empDb.CreateSQL("Begin Department.GetDeptname" & _
"(:DEPTNO, :DNAME, :DLOC); end;", 0&)

'Display Department name and location
MsgBox empDb.Parameters("DNAME").Value & empDb.Parameters("DLOC").Value

関連項目:

- ExecuteSQLメソッド

- CreateSQLメソッド

PL/SQLカーソル変数を戻す方法

PL/SQLカーソル変数は主に、PL/SQLブロックからの1つ以上の問合せ結果セット、ストアド・プロシージャおよびファンクションにアクセスするために使用されます。OO4OのOraParameterオブジェクトは、PL/SQLカーソル変数を保持するために使用できます。

カーソル変数を表すOraParameterオブジェクトは、ORATYPE_CURSOR型である必要があり、出力変数としてのみ定義できます。PL/SQLブロックを実行した後、OraParameterオブジェクトのValueプロパティには、読取り専用のOraDynasetオブジェクトが含まれます。このOraDynasetオブジェクトを使用すると、戻された行をスクロールできます。

場合によっては、PL/SQLプロシージャの実行には、ExecuteSQLメソッドよりもCreateSQLメソッドの使用が適切です。OraSQLStmtオブジェクトのRefreshメソッドを実行すると、PL/SQLカーソルの状態が変化する場合があります。CreateSQLメソッドを使用した場合、変化したカーソルは既存のダイナセット・オブジェクトに自動的に関連付けられ、新しいダイナセット・オブジェクトは作成されません。

関連項目:
ExecuteSQLとCreateSQLを使用したPL/SQLブロックの実行

ダイナセット・オブジェクトのSQLプロパティは設定できません。設定しようとするとエラーになります。

注意:
テーブル・パラメータとしてカーソルを含んだPL/SQLストアド・プロシージャはサポートされていません。

パラメータ・オブジェクトのRemoveメソッドをコールしてください。このメソッドは、ダイナセット・オブジェクトおよびローカル一時キャッシュ・ファイルの廃棄に便利です。

次の例では、empとdept表のカーソルを取得するストアド・プロシージャとこのプロシージャを実行する小規模なアプリケーションを示します。

ストアド・プロシージャ

CREATE PACKAGE EmpAndDept AS
cursor emp is select * from emp;
cursor dept is select * from dept;
TYPE EmpCurTyp IS REF CURSOR RETURN emp%ROWTYPE;
TYPE DeptCurTyp IS REF CURSOR RETURN dept%ROWTYPE;
PROCEDURE GetEmpAndDeptData (emp_cv OUT EmpCurTyp,
dept_cv OUT DeptCurTyp);
END EmpAndDept;/

CREATE PACKAGE BODY EmpAndDept AS
PROCEDURE GetEmpAndDeptData (emp_cv OUT EmpCurTyp,
dept_cv OUT DeptCurTyp) IS
BEGIN
OPEN emp_cv FOR SELECT * FROM emp;
OPEN dept_cv FOR SELECT * FROM dept; END GetEmpAndDeptData;
END EmpAndDept;
/

アプリケーション

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set EmpDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
empDb.Parameters.Add "EMPCUR", 0, ORAPARM_OUTPUT
empDb.Parameters("EMPCUR").serverType = ORATYPE_CURSOR
empDb.Parameters.Add "DEPTCUR", 0, ORAPARM_OUTPUT
empDb.Parameters("DEPTCUR").serverType = ORATYPE_CURSOR
Set PlSqlStmt = empDb.CreateSql("Begin EmpAndDept.GetEmpAndDeptData (:EMPCUR," & _
":DEPTCUR); end;", 0)
Set EmpDynaset = empDb.Parameters("EmpCur").Value
Set DeptDynaset = empDb.Parameters("DeptCur").Value
MsgBox EmpDynaset.Fields("ENAME").Value
MsgBox DeptDynaset.Fields("DNAME").Value

関連項目:

- OraParameterオブジェクト

- ServerTypeプロパティ

- Valueプロパティ

- OraDynasetオブジェクト

- OraSQLStmtオブジェクト

- DynasetOptionプロパティ

- CreateSQLメソッド

- Refreshメソッド

- Removeメソッド

- DynasetCacheParamsメソッド

- Recordsetプロパティ

PL/SQL表を戻す方法

PL/SQL表は、主としてPL/SQLデータの配列にアクセスするために使用されます。OO4OのOraParamArrayオブジェクトは、PL/SQLカーソル変数を保持するために使用できます。

表の変数を表すOraParamArrayオブジェクトは、AddTableメソッドを使用して最初に作成する必要があります。表の値は、OraParamArrayオブジェクトのGet_ValueとPut_Valueメソッドを使用して、アクセスまたは設定します。

PL/SQLプロシージャのGetEmpNamesInArrayは、EMPNOの配列に対するENAME値の配列を戻します。

CREATE PACKAGE EmpNames AS
type NUMARRAY is table of NUMBER index by
BINARY_INTEGER; --Define EMPNOS array
type VCHAR2ARRAY is table of VARCHAR2(10) index by
BINARY_INTEGER; --Define ENAMES array
PROCEDURE GetEmpNamesInArray (ArraySize IN INTEGER,
inEmpnos IN NUMARRAY, outEmpNames OUT VCHAR2ARRAY);
END EmpNames; /

CREATE PACKAGE BODY EmpNames AS
PROCEDURE GetEmpNamesInArray (ArraySize IN INTEGER,
inEmpnos IN NUMARRAY, outEmpNames OUT VCHAR2ARRAY) is
BEGIN
FOR I in 1..ArraySize loop
SELECT ENAME into outEmpNames(I) from EMP
WHERE EMPNO = inEmpNos(I);
END LOOP;
END;

END EmpNames; /

次の例では、前述のプロシージャを実行してename表を取得します。

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set Empdb = OO4OSession.OpenDatabase("Exampledb", "scott/tiger", 0)
Empdb.Parameters.Add "ArraySize", 3, ORAPARM_INPUT
Empdb.Parameters.AddTable "EMPNOS", ORAPARM_INPUT, ORATYPE_NUMBER, 3, 22
Empdb.Parameters.AddTable "ENAMES", ORAPARM_OUTPUT, ORATYPE_VARCHAR2, 3, 10
Set EmpnoArray = Empdb.Parameters("EMPNOS")
Set EnameArray = Empdb.Parameters("ENAMES")

'Initialize the newly created input parameter table EMPNOS
EmpnoArray(0) = 7698
EmpnoArray(1) = 7782
EmpnoArray(2) = 7654
Empdb.ExecuteSQL ("Begin EmpNames.GetEmpNamesInArray(:ArraySize," & _
":EMPNOS, :ENAMES); End;")
MsgBox EnameArray(0)
MsgBox EnameArray(1)
MsgBox EnameArray(2)

関連項目:

- Get_Valueメソッド

- Put_Valueメソッド

データ定義言語文の実行

データ定義言語(DDL)文は、データベースのスキーマ・オブジェクトを管理します。DDL文は、新しい表の作成、古い表の削除、および他のスキーマ・オブジェクトの確立を実行します。また、スキーマ・オブジェクトへのアクセスも制御します。次に、例を示します。

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set EmpDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
EmpDb.ExecuteSQL("create table employees (name VARCHAR2(20)," & _
"ssn VARCHAR2(12), empno NUMBER(6), mgr NUMBER(6), salary NUMBER(6)")

EmpDb.ExecuteSQL("GRANT UPDATE, INSERT, DELETE ON employees TO donna")
EmpDb.ExecuteSQL("REVOKE UPDATE ON employees FROM jamie")

DDL文を使用すると、Oracle Databaseのオブジェクトも処理できます。次に例を示します。

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set EmpDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
EmpDb.ExecuteSQL("create type person_t as object (name VARCHAR2(30)," & _
"ssn VARCHAR2(12),address VARCHAR2(50))")
EmpDb.ExecuteSQL("create table person_tab OF person_t")

トランザクション制御

トランザクションは論理的な作業単位で、1人のユーザーが実行する1つ以上のSQL文で構成されています。一般的な例は、ある銀行口座から別の銀行口座への送金です。これには2つの操作が発生します。

1. 口座から金額が引き落とされます。

2. 別の口座にその金額が入金されます。

この2つの操作は一緒に実行する必要があります。(ネットワークの接続故障などで)片方の操作が実行され、他方の操作が実行されないと、銀行帳簿は正しく貸借一致しません。

通常、ダイナセットでUpdateメソッドを実行すると、変更内容はデータベースにただちにコミットされます。各操作は個別のトランザクションとして扱われます。OraSessionオブジェクトのBeginTrans、CommitTransおよびRollbackトランザクション制御メソッドを使用すると、複数の操作を1つの大きいトランザクションにグループ化できます。

BeginTransメソッドは、操作グループの開始をセッションに通知します。CommitTransメソッドは、操作グループ全体を確定します。Rollbackメソッドは、グループ全体を取り消します。CommitTransおよびRollbackメソッドがトランザクションを終了すると、プログラムは1つの操作につき1つのトランザクションという通常の操作に戻ります。経験のあるOracle Databaseユーザーは、次に示すOracle Objects for OLEの操作とOracle Databaseのツール製品との違いに注意してください。

- SQL*PlusなどのOracle Databaseのツール製品は、そのツールの起動時にBeginTransメソッドがコールされたものとして実行されます。これは、更新はただちにはコミットされず、コミットまたはロールバックの実行まで保留されることを意味します。

- SQL*Plusは、コミットまたはロールバックが実行されるたびに、新しいトランザクションを開始します。

- UPDATEまたはDELETE文に失敗した場合、SQL*Plusは行をロックしません。ただし、OO4Oの場合、グローバル・トランザクション内のダイナセットの指定行でUPDATEまたはDELETEメソッドに失敗した場合(BeginTransメソッドを発行した場合など)は、これらの指定行がロックされたままになることに注意してください。このロックは、CommitTransまたはRollbackメソッドをコールするまで解除されません。

複数のデータベースに接続してトランザクション・メソッドを使用する場合、Oracle Objects for OLEでは各データベースが個別にコミットされることに注意してください。これは、Oracle Databaseが提供する2フェーズ・コミットとは異なります。データベース間のデータ整合をアプリケーションで保証する必要がある場合は、1つのデータベースに接続した状態で、Oracle Databaseのリンク機能を使用して他のデータベースにアクセスしてください。この方法によって、Oracle Databaseの2フェーズ・コミットの利点を利用できます。2フェーズ・コミット、データベース・リンクおよび分散トランザクションの詳細は、Oracle Databaseのドキュメントを参照してください。

トランザクションは、SQL言語のデータ操作言語(DML)部分(INSERT、UPDATEおよびDELETE文など)にのみ適用されます。トランザクションは、SQL言語のデータ制御言語(DCL)部分やデータ定義言語(DDL)部分(CREATE、DROP、ALTER文など)には適用されません。DCLおよびDDLコマンドは常にコミットを強制し、前に処理したすべてを順にコミットします。

関連項目:

- BeginTransメソッド

- CommitTransメソッド

- OraConnectionオブジェクト

- OraSessionオブジェクト

- ResetTransメソッド

- Rollbackメソッド

Microsoft Transaction Serverのサポート

Oracle Objects for OLE(OO4O)で開始したOracleデータベース・トランザクションは、次のすべての条件が満たされた場合、Microsoft Transaction Server(MTS)のMicrosoft Distributed Transaction Coordinator(DTC)によって調整されたグローバル・トランザクションに自動的に関与します。

- OraSessionのOpenDatabaseメソッドがORADB_ENLIST_IN_MTSオプションを使用していること

- OO4OがMTSのグローバル・トランザクションのコンテキスト内で実行されていることが確認されていること

- Oracle Services for Microsoft Transaction Serverがインストールされ、実行中であること

関連項目:

- 『Oracle Services for Microsoft Transaction Server開発者ガイド』

- OpenDatabaseメソッド

非同期処理

OO4Oオートメーションでは、非同期処理を使用してコマンドを実行できます。これによって、SQL文とPL/SQLブロックを非ブロック・モードで実行できます。非ブロック・モードは、CreateSQLメソッドのオプションです。

関連項目:
CreateSQLメソッド

非ブロック・モード

非ブロック・モードでは、実行が完了していない場合でも、制御がアプリケーションにただちに戻されます。このため、アプリケーションでは最後の実行結果に依存しない他のタスクを実行できます。

非ブロック・モードを有効にするには、OraSQLStmtオブジェクトの作成時に、CreateSQLメソッドにORASQL_NONBLKオプションを渡します。このモードを指定しないと、OraSQLStmtオブジェクトはブロック・モードで実行されます(デフォルト動作)。

'Create the statement in NON-BLOCKING mode
OraSQL = Oradb.CreateSQL("delete from emp",ORASQL_NONBLK)

非ブロック・モードで作成されたOraSQLStmtオブジェクトは、そのオブジェクトが有効な間、非ブロック・モードで実行されます。

関連項目:
OraSQLStmtオブジェクト

この項の内容は次のとおりです。

- 非ブロック操作の状態のチェック

- 非ブロック操作の取消し

- 非同期モードでの複数問合せの実行

- 非ブロック化に関する制約

非ブロック操作の状態のチェック

非同期で実行されているOraSQLStmtオブジェクトの状態を判断するには、アプリケーションでNonBlockingStateプロパティのポーリングを行う必要があります。実行が保留されている場合、NonBlockingStateプロパティはORASQL_STILL_EXECUTINGを戻し、実行が正常に完了した場合はORASQL_SUCCESSを戻します。

エラーは、例外として発生します。

正常に完了したときに、出力パラメータがあれば、その内容がバインド・パラメータ・バッファに配置されます。アプリケーションは、ブロックの場合と同様にパラメータにアクセスできます。

次の例では、NonBlockingStateプロパティの使用方法を示します。

Dim OraDatabase as OraDatabase
Dim OraStmt as OraSQLStmt
Dim stat as long
Dim OraSess as OraSession
Set OraSess = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase =OraSess.OpenDatabase("ExampleDb", "scott/tiger", 0)

'execute the select statement with NONBLOCKING mode on
set OraStmt = OraDatabase.CreateSQL ("update emp set sal = sal + 1000", _
ORASQL_NONBLK)

'Check if the call has completed
stat = OraStmt.NonBlockingState
while stat = ORASQL_STILL_EXECUTING
MsgBox "Asynchronous Operation under progress"
stat = OraStmt.NonBlockingState
wend
MsgBox "Asynchronous Operation completed successfully"

関連項目:
NonBlockingStateプロパティ

非ブロック操作の取消し

実行中の非ブロック操作は、非同期コールを実行しているOraSQLStmtオブジェクトに対してCancelメソッドをコールすることによって取り消すことができます。

Dim OraDatabase as OraDatabase
Dim OraStmt as OraSQLStmt
Dim stat as long
Dim OraSess as OraSession
Set OraSess = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase =OraSess.OpenDatabase("ExampleDb", "scott/tiger", 0)

'execute the select statement with NONBLOCKING mode on
set OraStmt = OraDatabase.CreateSQL ("update emp set sal = sal + 1000", _
ORASQL_NONBLK)

'Check if the call has completed
stat = OraStmt.NonBlockingState
if stat = ORASQL_STILL_EXECUTING
MsgBox "Cancelling the asynchronous operation that is underway"
OraStmt.Cancel
End if

関連項目:
Cancelメソッド

非同期モードでの複数問合せの実行

非同期モードでは、複数の問合せを実行できます。この例では、最初の接続が非ブロック・コールを実行している間に、2番目の接続がSQL文をブロック・モードで実行します。

Dim OraSess as OraSession
Dim OraServ as OraServer
Dim OraDb1 as OraDatabase
Dim OraDb2 as OraDatabase
Dim OraStmtnonblk as OraSQLStmt
Dim OraStmtblk as OraSQLStmt
Dim stat as long
set OraSess = CreateObject("OracleInProcServer.XOraSession")
set OraDb1 = OraSess.OpenDatabase("exampledb","scott/tiger",0&)
Set OraServ = CreateObject("OracleInProcServer.XOraServer")
set OraDb2 = OraServ.OpenDatabase("Exampledb","scott/tiger",0&)

'execute the select statement with NONBLOCKING mode on
set OraStmtnonblk = OraDb1.CreateSQL ("update emp set sal = sal + 1000", _
ORASQL_NONBLK)

'Check if the call has completed
stat = OraStmt.NonBlockingState
while stat = ORASQL_STILL_EXECUTING
MsgBox "Asynchronous Operation under progress"
stat = OraStmt.NonBlockingState
wend
MsgBox "Asynchronous Operation completed successfully"

'execute on the second connection in BLOCKING mode
set OraStmtblk = OraDb2.CreateSQL ("update emp set sal = sal + 500",0&)

非ブロック化に関する制約

非ブロック・モードには次のような制約があります。

- OraSQLStmtオブジェクトで非ブロック操作を実行している場合、そのオブジェクトのプロパティまたは属性は変更できません。これは、進行中の実行に影響を与える可能性があるためです。

- すでにインスタンス化されている他のオブジェクトが接続上に存在する場合は、非ブロック・モードでOraSQLStmtオブジェクトを作成することはできません。つまり、非ブロック・モードでOraSQLStmtオブジェクトを作成して実行できるのは、OraDynasetやOraAQなどの他のオブジェクトが、同じデータベース・セッションで現在アクティブでない場合のみです。OraParameterとOraObjectオブジェクトは例外です。これらのオブジェクトは非ブロック化の実行に必要な場合があるため、許可されています。

関連項目:
非同期モードでの複数問合せの実行

4 OO4Oの拡張機能

この章では、Oracle Objects for OLEの拡張機能について説明します。内容は次のとおりです。

- Oracleオブジェクト・リレーショナルとLOBデータ型のサポート

- Oracle LOB、オブジェクトおよびコレクションのインスタンス化

- ラージ・オブジェクト(LOB)の使用

- Oracleオブジェクト・データ型

- Oracleコレクション

- アドバンスト・キューイング・インタフェース

- データベース・イベント

- アプリケーション・フェイルオーバー通知

- XMLの生成

- 日時および間隔のデータ型

- データベース・スキーマ・オブジェクト

Oracleオブジェクト・リレーショナルとLOBデータ型のサポート

Oracle Objects for OLEは、REFのインスタンス、値インスタンス、可変長配列(VARRAY)、ネストした表およびOracleデータベースのラージ・オブジェクト(LOB)へのアクセスと操作をサポートしています。

表4-0に、Oracle Objects for OLEにおけるインスタンスのすべての型を示した階層図を示します。

図4-1 オブジェクト・リレーショナルとLOBデータ型のダイアグラム

これらの型のインスタンスは、データベースからフェッチするか、またはストアド・プロシージャとファンクションを含めて、SQL文とPL/SQLブロックへの入力または出力変数として渡すことができます。すべてのインスタンスは、動的な属性アクセスと操作のためのメソッドを提供するCOMオートメーション・インタフェースにマップされます。これらのインタフェースの取得元は、次のとおりです。

- ダイナセット内のOraFieldオブジェクトのValueプロパティ

- SQL文またはPL/SQLブロックの入力または出力パラメータとして使用するOraParameterオブジェクトのValueプロパティ

- 別のオブジェクト/REFインスタンスの属性

- コレクション(VARRAYまたはネストした表)の要素

Oracle LOB、オブジェクトおよびコレクションのインスタンス化

Oracle Objects for OLEは、LOB、Oracleオブジェクトおよびコレクション型での作業用にCOMオートメーション・インタフェースを提供します。これらのインタフェースは、LOB、Oracleオブジェクトおよびコレクションのインスタンスに関連付けられているデータにアクセスするためのメソッドとプロパティを提供します。

Oracle LOB、オブジェクトおよびコレクション

表4-1に、OO4Oインタフェースに関連付けられているOracle LOB、オブジェクトおよびコレクション型を示します。

表4-1 Oracle LOB、オブジェクトおよびコレクション

型

OO4Oインタフェース

Object

OraObject

REF

OraRef

VARRAYとネストした表

OraCollection

BLOB

OraBlob

CLOB

OraClob

BFILE

OraBFile

前述のインタフェースがOO4Oで取り出される方法は、データベースに格納されている方法またはSQL文でアクセスされる方法によって異なります。可能な使用例を次に示します。

- 表の列
表に、LOB、オブジェクト型およびコレクションが列として含まれており、ダイナセットのSELECT文がこの表に基づいている場合、その列を表すOraFieldオブジェクトのValueプロパティは、その型に対応したOO4Oインタフェースを戻します。

- SQL文またはPL/SQLブロックのバインド変数
SQL文またはPL/SQLブロックに、バインド変数としてLOB、オブジェクト型およびコレクションがある場合は、Addメソッドを使用して対応するサーバー型でOraParameterオブジェクトを作成する必要があります。そのバインド変数を表すOraParameterオブジェクトのValueプロパティは、その型に対応したOO4Oインタフェースを戻します。

- Oracleオブジェクト・インスタンスの属性
Oracleオブジェクト・インスタンスにその属性としてLOB、オブジェクト型またはコレクションがある場合は、属性に対応するOO4Oインタフェースが、添字または属性の名前を使用してOraObjectまたはOraRefから取り出されるか、またはOraAttributeオブジェクトのValueプロパティを使用して取り出されます。

- VARRAYとネストした表の要素
OracleのVARRAYとネストした表に要素としてオブジェクト型とREFがある場合は、OraCollectionオブジェクトから要素の索引を添字として使用して、対応するOO4Oインタフェースが取り出されます。

これらの型に対するOO4Oインタフェースがダイナセットの一部として取り出される場合、OO4Oインタフェースは、そのダイナセットの現在の行のLOB、オブジェクトおよびコレクション型のインスタンスを表します。移動操作のために現在の行が変更されると、OO4Oインタフェースは、新しい現在の行のLOB、オブジェクトおよびコレクション型のインスタンスを表します。OraParameterの一部として前述の型のOO4Oインタフェースが取り出され、OraSQLStmtのRefreshメソッドのためにOraParameterの値が変更されると、OO4Oインタフェースは、そのOraParameterに対する新しいインスタンスのLOB、オブジェクトおよびコレクション型を表します。

内部的には、OO4Oが各OraField、OraParameterおよびOraAttributeオブジェクトに対して1つのOO4Oインタフェースを保持します。ダイナセットの移動操作、またはOraSQLStmtのリフレッシュ操作から独立して、LOB、オブジェクトおよびコレクション型のインスタンスを保持するには、対応するOO4OインタフェースでCloneメソッドを使用します。このメソッドは、LOB、オブジェクトおよびコレクション型インスタンスのコピーを作成し、そのコピーに関連付けられている対応のOO4Oインタフェースを戻します。

ラージ・オブジェクト(LOB)の使用

ラージ・オブジェクト(LOB)データ型(BLOB、CLOB、NCLOBおよびBFILE)によって、テキスト、イメージ、ビデオ・クリップおよびサウンドなどの非構造化データの大きなブロックを最高4GBまで格納できます。これらのデータ型は、効率のよいランダムでピース単位のデータ・アクセスを提供します。Oracle Objects for OLEでは、LOBデータ型のインスタンスはインタフェースとして表されます。

関連項目:

- OraBLOB、OraCLOBオブジェクト

- OraBFILEオブジェクト

- OraLOBとBFILEの例で使用されているスキーマ・オブジェクトについては、「LOBデータ型の例で使用されているスキーマ・オブジェクト」を参照してください。

この項の内容は次のとおりです。

- LOBデータ型

- OraBLOBとOraCLOBの使用

- データベースからのLOBの取出し

- LOBの読取りと書込みに関するパフォーマンス上の考慮

- LOBデータの書込み

- LOBデータの読込み

LOBデータ型

表4-2に、4つのLOBデータ型とそれに対応するOO4Oインタフェースを示します。

表4-2 LOBデータ型

LOBデータ型

LOBの値の構成データ

対応するOO4Oインタフェース

BLOB

非構造化バイナリ(RAW)データ。

OraBLOB

CLOB

シングルバイトの固定幅文字データ。Oracle Database用に定義されたデータベース・キャラクタ・セットに対応しています。

OraCLOB

NCLOB

マルチバイトの固定幅文字データ。Oracle Database用に定義された各国語キャラクタ・セットに対応しています。

OraCLOB

BFILE

ラージ・バイナリ・データがデータベース表領域以外のオペレーティング・システム・ファイルに格納されているLOB。BFILEは、ハード・ディスク、CD-ROM、Photo CD、DVDなどの3次的な記憶デバイスに配置することもできます。

OraBFILE

次の例では、OraDatabaseオブジェクトのExecuteSQLメソッドを使用して、BLOB列とCLOB列を保有する表を作成し、その表にいくつかの行を挿入します。

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")

Set InvDb = OO4OSession.OpenDatabase("INVDB", "scott/tiger", 0)
InvDb.ExecuteSQL("create table part(part_id NUMBER, part_name
VARCHAR2(20),part_image BLOB, part_desc CLOB)")
InvDb.ExecuteSQL ("insert into part values (1,'ORACLE NETWORK',EMPTY_BLOB()," & _
"EMPTY_CLOB())")
InvDb.ExecuteSQL ("insert into part values (2,'ORACLE SERVER', EMPTY_BLOB()," & _
"EMPTY_CLOB())")

EMPTY_BLOB()とEMPTY_CLOB()は、LOB列に空のLOBを挿入するPL/SQLファンクションです。

関連項目:
ExecuteSQLメソッド

OraBLOBとOraCLOBの使用

OO4OのOraBLOBとOraCLOBインタフェースは、BLOB、CLOB、NCLOBおよびBFILEのデータ型を含むデータベース内のラージ・オブジェクトに関する操作を実行するためのメソッドを提供します。

次のVisual Basicの例では、part表からPartImageを読み込む方法を示します。

Dim Buffer as Variant
Set Part = OraDatabase.CreateDynaset("select * from part", 0&)
set PartImage = OraDynaset.Fields("part_image").Value

'read the data into the buffer
amount_read = PartImage.Read(buffer)

'copy the image content into the file
PartImage.CopyToFile "d:\image\partimage.jpg"

関連項目:
OraBLOB、OraCLOBオブジェクト

データベースからのLOBの取出し

OraBlob、OraClobおよびOraBFileオブジェクトは、OraDynasetオブジェクトまたはパラメータ・オブジェクトを使用して、取り出すことができます。

OraDynasetオブジェクトの使用

表にLOB列があり、ダイナセットの問合せがそのLOB列を選択している場合、OraFieldオブジェクトのValueプロパティは、OraBlob、OraClobまたはOraBFileオブジェクトを戻します。次の例では、part表からLOB列を選択します。PartDescとPartImageは、OraFieldオブジェクトから取り出したOraBlobとOraClobオブジェクトです。

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set InvDb = OO4OSession.OpenDatabase("INVDB", "scott/tiger", 0)
Set Part = InvDb.CreateDynaset("select * from part", 0&)
Set PartDesc = Part.Fields("part_desc").Value
Set PartImage = Part.Fields("part_image").Value

パラメータ・オブジェクトの使用

SQL文またはPL/SQLブロックにLOB型のバインド変数がある場合は、OraParametersのAddメソッドを使用してOraParameterオブジェクトを作成します。そのバインド変数に対するOraParameterオブジェクトのValueプロパティは、OraBlob、OraClobまたはOraBFileオブジェクトを戻します。

次の例では、LOBデータ型をPL/SQLの無名ブロック内のバインド変数として使用する方法を示します。このブロックは、データベースからLOB列を選択します。

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set InvDb = OO4OSession.OpenDatabase("INVDB", "scott/tiger", 0)
InvDb.Parameters.Add "PartDesc", Null, ORAPARM_OUTPUT,ORATYPE_CLOB
InvDb.Parameters.Add "PartImage", Null, ORAPARM_OUTPUT,ORATYPE_BLOB
InvDb.ExecuteSQL ("BEGIN select part_desc, part_image into :PARTDESC," & _
":PARTIMAGE from part where part_id = 1 for update NOWAIT; END;") & _
"for update NOWAIT; END;")
Set PartDesc = InvDb.Parameters("PartDesc").Value
Set PartImage = InvDb.Parameters("PartImage").Value

LOBの読取りと書込みに関するパフォーマンス上の考慮

アプリケーションのメモリー使用量を最適化してネットワーク・ラウンドトリップの回数を削減するために、LOBの読取りと書込みに関するオプションがいくつかあります。

単一ピース操作

1回のラウンドトリップで、バッファの内容がデータベースに読み書きされます。

複数ピース操作

複数のコールに対して1つの小さいバッファが使用され、メソッドが読み書きされます。このモードでは、読取りまたは書込みコールごとに1回のラウンドトリップが必要となるのではなく、データはストリーム化されます。この方法は、小規模な単一操作を複数回行うよりも高速です。これには、データを順に読み書きする必要があるため、各読取りまたは書込みに伴ってオフセットが自動的に増加するという制約があります。書込み前に合計量を知っておく必要があり、完了前に操作を中断することはできません。

関連項目:

- OraBLOB、OraCLOBオブジェクト

- Read(OraLOB/BFILE)メソッド

- Write(OraLOB)メソッド

LOBバッファリング・オプション

LOBバッファリング・オプションは、すべての読み書き操作を自動的にバッファリングします。ネットワーク・ラウンドトリップが発生するのは、FlushBufferメソッドがコールされた場合のみです。LOB全体にわたって小規模な書込みが多数発生する場合は、このオプションが最も有効です。このメソッドには大きな制限があります。

関連項目:
EnableBuffering(OraLOB)メソッド

LOBデータの書込み

OraBlobとOraClobオブジェクトのWriteメソッドは、ローカル・バッファからデータベースのLOBにデータを書き込みます。CopyFromFile(OraLOB)メソッドは、ローカル・ファイルの内容をデータベースのLOBに書き込みます。

Writeメソッドも含めてLOBの値を変更するすべての操作は、そのLOBに関連付けられている行がロックされているときにのみ発生します。また、LOBフィールドがNULLの場合は、メソッドが書き込む前にLOBフィールドを空のLOBで更新しておく必要があります。

次の各項で説明するように、LOBデータは、単一ピースまたは一連の複数ピースで書き込むことができます。

- 単一ピース書込み操作

- 複数ピース書込み操作

関連項目:

- Write(OraLOB)メソッド

- CopyFromFile(OraLOB)メソッド

単一ピース書込み操作

1回のネットワーク・ラウンドトリップで、バッファの内容全体を単一ピースとして書き込むことができます。次の例では、ローカル・ファイルpartimage.datから10KBのデータをpart_image列のオフセット1000に書き込みます。

Dim buffer() as byte
ReDim buffer(10000)
Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set InvDb = OO4OSession.OpenDatabase("INVDB", "scott/tiger", 0)
Set Part = InvDb.CreateDynaset("select * from part", 0&)
Set PartImage = Part.Fields("part_image").Value
PartImage.Offset = 1000
FNum = FreeFile
Open "PartImage.Dat" For Binary As #FNum
Get #FNum, , buffer
Part.Edit

amount_written = PartImage.Write(buffer)
Part.Update
Close FNum

CopyFromFile(OraLOB)メソッドは、ローカル・ファイルからLOBに直接データを書き込みます。次のコードは、前述のコードと同じ機能を果たします。

Part.Edit
PartImage.CopyFromFile "PartImage.dat" , 10000, 1000
Part.Update

関連項目:
CopyFromFile(OraLOB)メソッド

複数ピース書込み操作

このメカニズムは、使用できるバッファのサイズが書込みデータ量の合計に満たない場合に使用します。書込みデータの合計量は、PollingAmount(OraLOB/BFILE)プロパティを使用して設定します。

Offset(OraLOB/BFILE)プロパティが使用されるのは、Write操作の最初のピースに対するオフセットを設定する際の1回のみです。1回目以降のオフセットは、前のピースのサイズ分だけ自動的に増分されます。各ピースのWrite操作が正常に終了したことをStatus(OraLOB/BFILE)プロパティで確認する必要があります。StatusプロパティがORALOB_NEED_DATAを戻した場合は、Writeメソッドを再度コールする必要があります。これは、PollingAmountプロパティで指定された量が送信されるまで継続する必要があります。

最初に送信するピースについてはWriteメソッドのpiecetype引数がORALOB_FIRST_PIECEに設定され、Write操作の最後のピースについてはpiecetype引数がORALOB_LAST_PIECEに設定されている必要があります。複数ピース操作の終了時点で、StatusプロパティはORALOB_NO_DATAを戻します。

次の例では、ローカル・ファイルpartimage.datから、102KBのデータを10KBのチャンクでpart_image列のオフセット1000に書き込みます。

Dim buffer() as byte
chunksize = 10000
ReDim buffer(chunksize)
Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set InvDb = OO4OSession.OpenDatabase("INVDB", "scott/tiger", 0)
Set Part = InvDb.CreateDynaset("select * from part", 0&)
Set PartImage = Part.Fields("part_image").Value

FNum = FreeFile
Open "PartImage.Dat" For Binary As #FNum
PartImage.Offset = 1000
PartImage.PollingAmount =102000
remainder = 102000
Part.Edit
Get #FNum, , buffer
amount_written = PartImage.Write(buffer, chunksize, ORALOB_FIRST_PIECE)

While PartImage.Status = ORALOB_NEED_DATA
remainder = remainder - chunksize
If remainder < chunksize Then
piecetype = ORALOB_LAST_PIECE
chunksize = remainder

Else
piecetype = ORALOB_NEXT_PIECE
End If
Get #FNum, , buffer
amount_written = PartImage.Write(buffer, chunksize, piecetype)
Wend
Close FNum
Part.Update

関連項目:

- PollingAmountプロパティ

- Offset(OraLOB/BFILE)プロパティ

- Status(OraLOB/BFILE)プロパティ

LOBデータの読込み

OraBlobとOraClobのReadメソッドは、データベースのLOBからローカル・バッファにデータを読み込みます。CopyFromFileメソッドは、LOBの内容をローカル・ファイルに読み込みます。

次の各項で説明するように、LOBデータは、単一ピースまたは一連の複数ピースで読み込むことができます。

- 単一ピース読込み操作

- 複数ピース読込み操作

関連項目:
Read(OraLOB/BFILE)メソッド

単一ピース読込み操作

1回のネットワーク・ラウンドトリップで、バッファの内容全体を単一ピースとして読み込むことができます。次の例では、10KBのデータをpart_image列のオフセット1000からローカル・ファイルimage.datに読み込みます。

Dim buffer as Variant
Dim buf() As Byte
chunksize = 10000
Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set InvDb = OO4OSession.OpenDatabase("INVDB", "scott/tiger", 0)
Set Part = InvDb.CreateDynaset("select * from part", 0&)
Set PartImage = Part.Fields("part_image").Value
FNum = FreeFile
Open "image.dat" For Binary As #FNum
PartImage.Offset = 1000
amount_read = PartImage.Read(buffer,10000)
buf = buffer
Put #FNum, , buf
Close FNum

CopyToFile(OraLOB/BFILE)メソッドは、LOBからローカル・ファイルに直接データを書き込みます。次のコードは、前述のコードと同じ機能を果たします。

PartImage.CopyToFile "image.dat" , 10000, 1000

関連項目:
CopyToFile(OraLOB/BFILE)メソッド

複数ピース読込み操作

このメカニズムは、使用できるバッファのサイズが読込みデータ量の合計に満たない場合に使用します。読込みデータの合計量は、PollingAmount(OraLOB/BFILE)プロパティを使用して設定します。Offset(OraLOB/BFILE)プロパティが使用されるのは、Read操作の最初のピースに対するオフセットを設定する際の1回のみです。1回目以降のオフセットは、前のピースのサイズ分だけ自動的に増分されます。

各ピースのRead操作が正常に終了したことをStatus(OraLOB/BFILE)プロパティで確認する必要があります。StatusプロパティがORALOB_NEED_DATAを戻した場合は、Readメソッドを再度コールする必要があります。これは、PollingAmountプロパティで指定された量が読み込まれるまで継続する必要があります。複数ピース操作の終了時点で、StatusプロパティはORALOB_NO_DATAを戻します。

次の例では、part_image列のオフセット1000から、102KBのデータを10KBのチャンクでローカル・ファイルimage.datに読み込みます。

Dim buffer as Variant
Dim buf() As Byte
Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set InvDb = OO4OSession.OpenDatabase("INVDB", "scott/tiger", 0)
Set Part = InvDb.CreateDynaset("select * from part", 0&)
Set PartImage = Part.Fields("part_image").Value
FNum = FreeFile
Open "image.dat" For Binary As #FNum
PartImage.offset = 1000
PartImage.PollingAmount = 102000
amount_read = PartImage.Read(buffer, chunksize)
buf = buffer
Put #FNum, , buf
While PartImage.Status = ORALOB_NEED_DATA
amount_read = PartImage.Read(buffer, chunksize)
buf = buffer
Put #FNum, , buf
Wend
Close FNum

関連項目:

- PollingAmountプロパティ

- Offset(OraLOB/BFILE)プロパティ

- Status(OraLOB/BFILE)プロパティ

Oracleオブジェクト・データ型

オブジェクト型は、データベースに作成されるユーザー定義による複合データ型です。オブジェクト型は列または行によって表すことができます。Object型のインスタンスは、データベースに格納できます。このオブジェクト・インスタンスは、クライアント側にフェッチし、Oracle Objects for OLEを使用して変更できます。

関連項目:
『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』

オブジェクト・インスタンスには2つの型があります。

- OraObjectオブジェクト
列がオブジェクト型を表す場合、このオブジェクト型のインスタンスは、埋込みインスタンスまたは値インスタンスとして参照されます。OO4Oでは、この型がOraObjectオブジェクトによって示されます。たとえば、ADDRESSオブジェクト型はPERSON表の列として格納されます。OraObjectオブジェクトは、他の構造体に埋め込むことができます。埋込みインスタンスまたは値インスタンスは、他のオブジェクト・インスタンスの属性となることもできます。

関連項目:
OraObjectインタフェースの概要

- OraRefオブジェクト
オブジェクト表にある行がオブジェクト型を表す場合、この型のインスタンスは参照可能オブジェクトとして参照されます。OO4Oでは、この型がOraRefオブジェクトによって示されます。内部的に参照可能なオブジェクトには、REFデータ型によって示される固有のオブジェクト識別子があります。REF列は、参照可能なオブジェクトへのポインタと考えることができます。OO4Oアプリケーションは、参照可能オブジェクトからREFデータ型を取り出し、関連付けられた参照可能オブジェクトをクライアント側にフェッチ(確保)し、変更済の参照可能オブジェクトをデータベースに更新(フラッシュ)できます。

関連項目:
OraRefインタフェースの概要

OraObjectインタフェースの概要

OraObjectインタフェースは、Oracle埋込みオブジェクトまたは値インスタンスの表現形式です。これには、値インスタンスの個々の属性にアクセスおよび操作(更新および挿入)するためのコレクション・インタフェース(OraAttributes)が含まれます。

添字または属性名を使用すると、OraAttributesコレクション・インタフェースの個々の属性にアクセスできます。

次のVisual Basicの例では、person_tab表にあるAddressオブジェクトの属性にアクセスする方法を示します。

Set Person = OraDatabase.CreateDynaset("select * from person_tab",0&)
set Address = Person.Fields("Addr").Value
msgbox Address.Zip
msgbox.Address.City

関連項目:
OraObjectオブジェクト

OraObjectインタフェースの使用

次の例では、属性として通り、市、州および郵便番号を持つADDRESSオブジェクト型と、ADDRESSオブジェクト型の列があるPERSON表を作成します。また、ここでは、OraDatabaseオブジェクトのExecuteSQLメソッドを使用してデータを挿入します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
HRDb.ExecuteSQL("create type ADDRESS as object ( street
VARCHAR2(200), city varchar2(20), state CHAR(2), zip varchar2(10) )")
HRDb.ExecuteSQL("create table person (name varchar2(20), age number," & _
"addr ADDRESS) ")
HRDb.ExecuteSQL("insert into person values('nasser',40, " & _
"address('Wine Blvd', 'Pleasanton', 'CA', '94065'))")
HRDb.ExecuteSQL("insert into person values('Maha', 25," & _
"address('Continental Way', 'Belmont', 'CA', '94002'))")
HRDb.ExecuteSQL("insert into person values('chris',30, address('First " & _
"Street', 'San Francisco', 'CA' ,'94123'))")

次の各項では、OraObjectインタフェースの操作について説明します。

- データベースからの埋込み/値インスタンスの取出し

- 埋込み/値インスタンスの属性へのアクセス

- 埋込み/値インスタンスの属性の変更

関連項目:
ExecuteSQLメソッド

データベースからの埋込み/値インスタンスの取出し

ダイナセットまたはパラメータ・オブジェクトを使用してOO4Oを使用すると、OraObjectオブジェクトを取り出すことができます。

ダイナセット・オブジェクトの使用

表にオブジェクト型の列があり、ダイナセットの問合せでその列が選択されると、OraFieldオブジェクトのValueプロパティはOraObjectを戻します。

次のコードは、person表からADDRESS列を選択し、OraFieldオブジェクトからAddressオブジェクトを取り出します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
set Person = hrDb.CreateDynaset("select * from person", 0&)
set Address = Person.Fields("Addr").Value

パラメータ・オブジェクトの使用

SQL文またはPL/SQLブロックにオブジェクト型のバインド変数がある場合は、OraParametersのAddメソッドを使用してOraParameterオブジェクトを作成します。そのバインド変数に対するOraParameterオブジェクトのValueプロパティは、OraObjectオブジェクトを戻します。

次の例では、オブジェクト・データ型をPL/SQLの無名ブロック内のバインド変数として使用します。このブロックは、データベースからオブジェクト列を選択します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
hrDb.Parameters.Add "ADDRESS", Null, ORAPARM_OUTPUT, ORATYPE_OBJECT, "ADDRESS"
'execute the sql statement which selects Address from the person_tab
hrDb.ExecuteSQL ("BEGIN select Addr into :ADDRESS from person where " & _
"age = 40; end;")
'retrieve Address object from the OraParameter
set address = hrDb.Parameters("ADDRESS").Value

関連項目:

- OraObjectオブジェクト

- OraFieldオブジェクト

- OraParameterオブジェクト

埋込み/値インスタンスの属性へのアクセス

添字または属性名を使用すると、個々の属性にアクセスできます。次の例では、ADDRESSオブジェクト・インスタンスの属性値にアクセスする方法を示します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
set Person = hrDb.CreateDynaset("select * from person", 0&)
set Address = Person.Fields("Addr").Value
msgbox Address.City
msgbox Address.Street
msgbox Address.State
msgbox Address.Zip

次のコードはすべての属性値にアクセスします。

For I=1 to Address.Count
msgbox Address(I)
Next I

埋込み/値インスタンスの属性の変更

オブジェクト・インスタンスがダイナセット・オブジェクトを使用して取り出された場合は、Dynaset Edit/Updateのペア間でその属性値を変更できます。次の例では、ADDRESSオブジェクト・インスタンスのstreetとcityの属性値を変更します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
set Person = hrDb.CreateDynaset("select * from person", 0&)
set Address = Person.Fields("Addr").Value
Person.Edit
Address.Street  =  "Oracle Parkway"
Address.City = "Redwood shores"
Person.Update

Oracleオブジェクト・インスタンスのメンバー・メソッドの実行

Oracleオブジェクト型のメンバー・メソッドは、型の作成中に作成されます。Oracleオブジェクト・インスタンスのメンバー・メソッドは、OO4OでPL/SQLプロシージャまたはファンクションとして実行されます。メンバー・メソッドに対する引数と戻り値は、OraParameterオブジェクトを使用してバインドされている必要があります。メンバー・メソッドに対する最初の引数は、常にオブジェクト・インスタンスです。このオブジェクト・インスタンスは、ORAPARM_INPUTまたはORAPARM_BOTHモードでバインドできます。メンバー・メソッドがオブジェクト・インスタンスの属性を変更する場合やOO4Oアプリケーションに新しいオブジェクト・インスタンスを取り出す必要がある場合、このオブジェクト・インスタンスは、ORAPARM_BOTHモードでバインドされる必要があります。

たとえば、bank_accountオブジェクト型にメンバー・メソッドとしてopen、closeおよびdepositがある場合、bank_accountオブジェクト型のスキーマは次のとおりです。

CREATE OR REPLACE TYPE bank_account AS OBJECT (
acct_number INTEGER(5),
balance REAL,
MEMBER PROCEDURE open (amount IN REAL),
MEMBER PROCEDURE close (num IN INTEGER, amount OUT REAL),
MEMBER PROCEDURE deposit (SELF IN OUT bank_bccount,num IN
INTEGER, amount IN REAL),
);

OO4Oでは、BankObjはデータベースからの有効なbankオブジェクト・インスタンスを表すOraObjectオブジェクトです。depositメソッドを実行するには、OraParameterオブジェクトを使用して、SELF、numおよびamount引数をバインドする必要があります。

Dim BankObj as OraObject
assumes that we have valid BankObj
set BankObj = .....

'create a OraParameter object for bank_account object and set it to BankObj
OraDatabase.Parameters.Add "BANK", BankObj, ORAPARM_BOTH, ORATYPE_OBJECT, _
"BANK_ACCOUNT"

'create a OraParameter object for num argument and set the value to 100
OraDatabase.Parameters.Add "ACCOUNT_NO", 100, ORAPARM_INPUT, ORATYPE_NUMBER

'create a OraParameter object for amount argument and set the value to 1200
OraDatabase.Parameters.Add "AMOUNT", 1200, ORAPARM_OUTPUT, ORATYPE_NUMBER

'display the balance from the bank object
Bankobj.balance

'now execute the PL/SQL block for member method execution
OraDatabase.ExecuteSQL ("BEGIN BANK_ACCOUNT.DEPOSIT :BANK," & _
(":ACCOUNT_NO,:AMOUNT); END;")

'get the modified bank object from the parameter
set Bankobj  = OraDatabase.Parameters("BANK").Value

'display the new balance
Bankobj.balance

OraRefインタフェースの概要

OraRefインタフェースは、クライアント・アプリケーション内の参照可能オブジェクト(REF)のインスタンスを表します。オブジェクトの属性は、OraObjectインタフェースが示すオブジェクトの属性にアクセスする場合と同じ方法でアクセスされます。OraRefインタフェースは、COMの包含機構を介してOraObjectインタフェースから導出されます。REFオブジェクトは、ダイナセットなど、その元のコンテキストとは関係なく更新および削除されます。また、OraRefインタフェースは、Oracle Call Interface(OCI)の複合オブジェクト検索機能(COR)を利用して、オブジェクトのグラフ全体をナビゲートする機能をカプセル化することもできます。

関連項目:
OraRefオブジェクト

OraRefインタフェースの使用

この項では、PERSON_TABという名前のオブジェクト表を作成します。このオブジェクト表はオブジェクト型PERSONOBJに基づいています。このオブジェクト表の行への各参照は、CUSTOMERS表のapersonというREF型の列に格納されています。次のコードは、データベース・スキーマを作成します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
HRDb.ExecuteSQL("create type PERSONOBJ  as object ( name varchar2(20), " & _
"age number, addr ADDRESS)")
HRDb.ExecuteSQL("create table person_tab of personobj")
HRDb.ExecuteSQL("insert into person_tab values('nasser',40," & _
"address('Wine Blvd', 'Pleasanton', 'CA', '94065'))")
HRDb.ExecuteSQL("insert into person_tab values('Maha', 25, " & _
"address('Continental Way', 'Belmont', 'CA', '94002'))")
HRDb.ExecuteSQL("insert into person_tab values('chris',30, " & _
"address('First Street', 'San Francisco', 'CA' , '94123'))")

次のコードは、オブジェクト表の行を参照するapersonというREF列を持つCUSTOMERS表を作成します。

HRDb.ExecuteSQL("create table CUSTOMERS (account number,
aperson REF personobj)")

HRDb.ExecuteSQL("insert into customers values(10, null)")
HRDb.ExecuteSQL("insert into customers values(20, null)")
HRDb.ExecuteSQL("insert into customers values(30, null)")
HRDb.ExecuteSQL("update customers set aperson = (select ref(p) from " & _
"person_tab p where p.name = 'nasser') where account = 10")
HRDb.ExecuteSQL("update customers set aperson = (select ref(p) from " & _
"person_tab p where p.name = 'Maha') where account = 20")
HRDb.ExecuteSQL("update customers set aperson = (select ref(p) from " & _
"person_tab p where p.name = 'chris') where account = 30")

次の各項では、OraRefインタフェースの操作について説明します。

- データベースからのREFの取出し

- 参照可能なインスタンスの属性へのアクセス

- 参照可能なインスタンスの属性の変更

関連項目:
OraRefオブジェクト

データベースからのREFの取出し

OO4Oを次のように使用すると、OraRefオブジェクトを取り出すことができます。

ダイナセット・オブジェクトの使用

表にREF型の列があり、ダイナセットの問合せでその列が選択されると、OraFieldオブジェクトのValueプロパティはOraREFを戻します。次の例では、person表からaperson列を選択し、OraFieldオブジェクトからapersonオブジェクトを取り出します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
set Customer = hrDb.CreateDynaset("select * from customers", 0&)
set Person = Customer.Fields("aperson").Value

OraParameterオブジェクトの使用

SQL文またはPL/SQLブロックにREF型のバインド変数がある場合は、OraParametersのAddメソッドを使用してOraParameterオブジェクトを作成します。そのバインド変数に対するOraParameterオブジェクトのValueプロパティは、OraREFを戻します。

次の例では、REFオブジェクト・データ型をPL/SQLの無名ブロック内のバインド変数として使用します。このブロックは、データベースからオブジェクト列を選択します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
hrDb.Parameters.Add "PERSON", Null, ORAPARM_OUTPUT, ORATYPE_REF,"PERSONOBJ"

'execute the sql statement which selects Address from the person_tab
hrDb.ExecuteSQL ("BEGIN select aperson into :PERSON from customers" & _
"where account = 10; end;")

'retrieve Person object from the OraParameter
set Person = hrDb.Parameters("PERSON").Value

関連項目:
OraRefオブジェクト

参照可能なインスタンスの属性へのアクセス

参照可能なインスタンスの属性は、アクセスする前にクライアント側でフェッチ(確保)する必要があります。OO4Oは、OraRefオブジェクトから属性値にアクセスするとき、暗黙的にREF値を確保します。PIN操作の後、参照可能なインスタンスの属性は、OraObjectオブジェクトが示す値インスタンスの属性にアクセスする場合と同じ方法でアクセスされます。

次の例では、APERSONというREF値を(暗黙的に)確保して、そのname属性とaddress属性にアクセスします。address属性にアクセスすると、AddressというOraObjectオブジェクトを戻すことに注意してください。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
set Customer = hrDb.CreateDynaset("select * from customers", 0&)
set Person = Customer.Fields("APERSON").Value
msgbox Person.Name
set Address = Person.Addr
msgbox Address.City

関連項目:
OraRefオブジェクト

参照可能なインスタンスの属性の変更

参照可能なインスタンスはオブジェクト表の行に格納されるため、参照可能なインスタンスの属性を変更するには、オブジェクト・ロックが必要です。そのため、オブジェクト表のオブジェクト・インスタンスに対応する行をロックする必要があり、これは、OraRefオブジェクトのEditメソッドをコールすることで実行できます。オブジェクト・ロックはOraRef Updateメソッドによって解除します。

次の例では、Personオブジェクトのage属性を変更します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
set Customer = hrDb.CreateDynaset("select * from customers", 0&)
set Person = Customer.Fields("APERSON").Value
Person.Edit
Person.Age = 45
Person.Update

関連項目:

- OraRefオブジェクト

- Update(OraRef)メソッド

- Edit(OraRef)メソッド

Oracleコレクション

コレクションとは、すべて同じ型の要素が順序付けされたグループです。各要素には、索引と呼ばれる固有の添字があり、コレクション内の位置を判断します。

注意:
OraCollection要素の索引は1から開始します。

コレクションは、次の型に細分化できます。

- NESTED TABLE型
データベース表の列に格納されている表として参照されます。ネストした表の行には、1で始まる連続した添字が割り当てられ、配列にアクセスする要領で、個々の行にアクセスして取り出します。

- VARRAY型
データベース表の列に格納されている配列として参照されます。VARRAY型の要素を参照するには、標準的な添字構文を使用できます。たとえば、Grade(3)は、Gradesという名前のVARRAYで第3番目の要素を参照します。

Oracle Objects for OLEでは、OraCollectionインタフェースがOracleコレクション型を示します。詳細は、次の各項を参照してください。

- OraCollectionインタフェースの概要

- データベースからのコレクション型インスタンスの取出し

- コレクションの要素へのアクセス

- コレクションの要素の変更

- VARRAYコレクション型の作成

- OraCollectionオブジェクトからのダイナセットの作成

関連項目:

- OraCollectionオブジェクト

- OraCollectionの例で使用されているスキーマ・オブジェクト

OraCollectionインタフェースの概要

OraCollectionインタフェースは、Oracleコレクション型、つまりOO4Oの可変長配列(VARRAY)とネストした表にアクセスして操作するためのメソッドを提供します。コレクションに含まれる要素へのアクセスには、添字を使用します。

次のVisual Basicの例では、department表にあるEnameListオブジェクトの属性にアクセスする方法を示します。

Set Person = OraDatabase.CreateDynaset("select * from department",0&)
set EnameList = Department.Fields("Enames").Value

'access all elements of the EnameList VArray
for I=1 to I=EnameList.Size
msgbox EnameList(I)
Next I

関連項目:
OraCollectionオブジェクト

データベースからのコレクション型インスタンスの取出し

OO4Oを次のように使用すると、コレクション型を取り出すことができます。

ダイナセット・オブジェクトの使用

表にコレクション型の列があり、ダイナセットの問合せでその列が選択されると、OraFieldオブジェクトのValueプロパティはOraCollectionオブジェクトを戻します。

次の例では、department表からENAMES列を選択し、OraFieldオブジェクトからEnameListオブジェクトを取り出します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
Set Dept = hrDb.CreateDynaset("select * from department", 0&)
Set EnameList = Dept.Fields("ENAMES").Value

パラメータ・オブジェクトの使用

SQL文またはPL/SQLブロックにコレクション型のバインド変数がある場合は、OraParametersのAddメソッドを使用してOraParameterオブジェクトを作成します。そのバインド変数に対するOraParameterオブジェクトのValueプロパティは、OraCollectionオブジェクトを戻します。

次の例では、コレクションのデータ型をPL/SQLの無名ブロック内のバインド変数として使用し、データベースからコレクション型を選択します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
hrDb.Parameters.Add "ENAMES", Null, ORAPARM_OUTPUT, ORATYPE_VARRAY, "ENAMELIST"
hrDb.ExecuteSQL ("BEGIN select enames into :ENAMES from department" & _
"where dept_id = 10; END;")
set EnameList = hrDb.Parameters("ENAMES").Value

関連項目:

- OraCollectionオブジェクト

- OraFieldオブジェクト

コレクションの要素へのアクセス

個々の要素の値には、添字を使用してアクセスします。たとえば、添字1に対してOraCollectionオブジェクトが戻すValueは、索引1にある要素の値です。添字の最大値は、削除した要素も含めたコレクションの要素の総数と同じです。OraCollectionの添字は、1から開始します。

次のコード例では、Enamelistコレクション・インスタンスを取り出し、第1索引と第2索引の要素にアクセスします。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
Set Dept = hrDb.CreateDynaset("select * from department", 0&)
Set EnameList = Dept.Fields("ENAMES").Value
msgbox EnameList(1)
msgbox EnameList(2)

次のコードは、EnameListコレクションの要素の値をすべて表示します。

For I = 1 to EnameList.Size
msgbox EnameList(I)
Next I

関連項目:
OraCollectionオブジェクト

コレクションの要素の変更

コレクション・インスタンスがダイナセット・オブジェクトを使用して取り出された場合は、Dynaset Edit/Updateのペア間で要素の値を変更できます。次のコード例では、Enamelistコレクション・インスタンスの2番目の要素値を変更します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)

Set OraDynaset = hrDb.CreateDynaset("select * from department", 0&)
Set EnameList = OraDynaset.Fields("ENAMES").Value

OraDynaset.Edit
EnameList(2) = "Chris"
OraDynaset.Update

VARRAYコレクション型の作成

次のコード例では、VARRAYコレクション型のENAMELISTと、ENAMELISTコレクション型の列を含んだdepartment表を作成します。

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set hrDb = OO4OSession.OpenDatabase("Exampledb", "scott/tiger", 0)
hrDb.ExecuteSQL("CREATE TYPE ENAMELIST AS VARRAY(20) OF VARCHAR2(30)")
hrDb.ExecuteSQL("CREATE TABLE department (dept_id NUMBER(2),name" & _
"VARCHAR2(15),ENAMES ENAMELIST)")

次のスクリプトは、department表にいくつかのコレクション・データを挿入します。

hrDb.ExecuteSQL("INSERT INTO department VALUES(10, 'ACCOUNTING'," & _
"ENAMELIST('KING','CLARK','MILLER') )")
hrDb.ExecuteSQL("INSERT INTO department VALUES(20, 'RESEARCH'," & _
"ENAMELIST('JONES','SCOTT','ADAMS','SMITH','FORD') )")
hrDb.ExecuteSQL("INSERT INTO department VALUES(30, 'SALES'," & _
"ENAMELIST('BLAKE','MARTIN','ALLEN','TURNER','JAMES') )")

関連項目:
OraCollectionオブジェクト

OraCollectionオブジェクトからのダイナセットの作成

SQLのTHEまたはTABLE演算子を使用すると、VARRAYおよびネストした表のコレクション型のインスタンスに対してSELECT問合せが発行され、個々の要素に行としてアクセスできます。これらのコレクション型の要素の型はオブジェクト型で、オブジェクト型の個々の属性は行のフィールドを示します。

たとえば、Xというオブジェクト型にa、bおよびcの属性があり、コレクションの要素の型がXというオブジェクト型の場合は、このコレクションのSELECT問合せによってa、bおよびcのフィールドが戻ります。

OO4Oでは、コレクションのSELECT問合せによって、読取り専用のダイナセット・オブジェクトが作成されます。個々の要素には、行ナビゲーションを使用してアクセスします。コレクション型にその要素の型としてオブジェクト型がある場合、そのオブジェクト型(要素)の属性には、OraFieldオブジェクトを使用してアクセスします。

たとえば、Courseというオブジェクト型があり、CourseListというネストした表のコレクション型にその要素の型としてCourseがある場合は、次のように記述します。

CREATE TYPE Course AS OBJECT (
course_no NUMBER(4),
title VARCHAR2(35),
credits NUMBER(1)
);
CREATE TYPE CourseList AS TABLE OF Course;

OO4Oでは、CourseListというOraCollectionは、CourseListコレクション型のインスタンスを表します。

Dim CourseList as OraCollection

有効なCourseListコレクション・インスタンスがあると仮定します。

set CourseList = ......

SQLのTHEまたはTABLE演算子には、バインド変数としてコレクション型が必要です。CourseListというOraCollectionに対するOraParameterオブジェクトを作成します。

OraDatabase.Parameters.Add "COURSELIST", CourseList, ORAPARM_INPUT, _
ORATYPE_TABLE, "COURSELIST"

SQLのTHE演算子を使用し、CourseListに基づいて読取り専用のダイナセットを作成します。

Set CourseListDyn = OraDatabase.CreateDynaset("select * from THE (select" & _
"CAST(:COURSELIST AS COURSELIST) from dual)", ORADYN_READONLY)

または、SQLのTABLE演算子を使用し、CourseListに基づいて読取り専用のダイナセットを作成します。この方法は、Oracle9i リリース以降のライブラリを使用するOO4Oでのみ使用できます。

Set CourseListDyn = OraDatabase.CreateDynaset("select * from" & _
"TABLE(CAST(:COURSELIST AS COURSELIST))", ORADYN_READONLY)

'display the course_no field
msgbox CourseListDyn.Fields("course_no").Value

'display the title field
msgbox CourseListDyn.Fields("title").Value

'move to next row
OraDynaset.MoveNext

関連項目:
OraCollectionオブジェクト

例: OraCollectionオブジェクトからのダイナセットの作成

次の例では、OraCollectionオブジェクトからダイナセットを作成する方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraCollectionの例で使用されているスキーマ・オブジェクト」を参照してください。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim CourseList as OraCollection
Dim Course as OraObject
Dim CourseListDyn as OraDynaset

'create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger",  0&)

'create a dynaset object from division
set OraDynaset = OraDatabase.CreateDynaset("select * from division", 0&)

'retrieve a Courses column from Division. Here Value property
'of OraField object 'returns CourseList OraCollection
set CourseList = OraDynaset.Fields("Courses").Value

'create a input parameter for CourseList for nested table dynaset
OraDatabase.Parameters.Add "COURSELIST", CourseList, ORAPARM_INPUT, _
ORATYPE_TABLE, "COURSELIST"

'create a read only dynaset based on the CourseList.
Set CourseListDyn = OraDatabase.CreateDynaset("select * from" & _
"THE(select CAST(:COURSELIST AS COURSELIST) from dual)", _
ORADYN_READONLY)

'dynaset can also be created from Oracle8 collection using the
'following statement
'Set CourseListDyn = OraDatabase.CreateDynaset("select * from
'TABLE(CAST(:COURSELIST AS COURSELIST))", ORADYN_READONLY)

'get the field values of the collection dynaset
msgbox CourseListDyn.Fields("title").Value
msgbox CourseListDyn.Fields("course_no").Value

'move the original dynaset to second row
Oradynaset.MoveNext

'set the new value of CourseList  collection from the second row
'of main dynaset to the "COURSELIST" parameter
OraDatabase.Parameters("COURSELIST").Value = CourseList

'refresh the collection dynaset. Now the collection dynaset values are refreshed
'with new collection value. CourseListDyn.Refresh
'get the field values of the collection dynaset
msgbox CourseListDyn.Fields("title").Value
msgbox CourseListDyn.Fields("course_no").Value

アドバンスト・キューイング・インタフェース

Oracle Objects for OLEは、OraAQオートメーション・インタフェースに、メッセージをキューおよびデキューするためのメソッドを提供します。OraAQMsgオブジェクトには、エンキューまたはデキューするメッセージが含まれます。このメッセージは、RAWメッセージまたはユーザー定義型の場合があります。

次の例では、DBQというキューからRAWメッセージをエンキューする方法を示します。DBQキューは、すでにデータベース内に作成済であることが必要です。

Dim Q as OraAQ
Dim Msg as OraAQMsg
set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set empDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
Set Q = empDb.CreateAQ("DBQ")
Retrieve the message object from the Q object.
set Msg = Q.AQMsg
Specify the message value.
Msg.Value = "This is the first Test message"
Enqueue the message.
Q.Enqueue

次の行は、優先順位の高いメッセージをエンキューします。

Msg.Priority = ORAQMSG_HIGH_PRIORITY
Msg.Delay = 5
Msg.Value = "Urgent message"
Q.Enqueue

次の例では、Oracle DatabaseからRAWメッセージをデキューしてメッセージの内容を表示します。

Q.Dequeue
MsgBox Msg.value
Dequeue and display the first high priority message
Msg.Priority = ORAQMSG_HIGH_PRIORITY
Q.Dequeue
MsgBox Msg.value

関連項目:
OraAQオブジェクト

メッセージの監視

OraAQの監視メソッド(MonitorStartおよびMonitorStop)は、通知による非同期デキューを提供します。これは、非ブロック・モードでメッセージを処理するアプリケーションに適しています。アプリケーションは、Monitorメソッドにオートメーション・オブジェクトを指定することによって、メッセージの到着通知を要求できます。このオブジェクトは、NotifyMeというメソッドを実装して通知を受信します。メッセージは、コンシューマ名、メッセージIDまたは相関に基づいて監視できます。

次のサンプル・コードでは、この機能の簡単な使用方法を示します。これは、指値注文で売買を実行する、コンピュータによる株取引システムを表します。

このサンプルでは、STOCKS_TO_TRADEキュー用のキュー・オブジェクトをインスタンス化し、コンシューマBROKER_AGENT向けのメッセージを監視します。STOCKS_TO_TRADEは、TRADEORDER_TYPEというユーザー定義型のメッセージをキューします。これによって、売買注文の開始に必要なすべての情報がカプセル化されます。宛先がBROKER_AGENTのメッセージがデキューされると、CallbackClientオブジェクトのNotifyMeメソッドがコールされ、株の売買が実行されます。

'First instantiate the CallbackClient. The queue monitor
' will invoke the NotifyMe on this class module.
Public CB_Client As New CallbackClient

Dim DB As OraDatabase
Dim Q as OraAQ
set Q = DB.CreateAQ("STOCKS_TO_TRADE")

'Notify by calling cbclient::NotifyMe when there are messages
' for consumer '"BROKER_AGENT"
Q.consumer = "BROKER_AGENT"

'Note that cbclient is a dispatch interface that supports the NotifyMe method.
Dim s as string
s = "BROKER_AGENT"
'Notify the client only when there are messages for "BROKER_AGENT"
Q.MonitorStart CB_Client, Q, s, 1
'other processing is performed here...

Q.MonitorStop
Return
'Now implement the NotifyMe method of the CallbackClient class module
'and the necessary arguments that will contain the dequeued message
'NotifyMe is the callback interface defined by user. Ctx here is the
'Q object passed in at the time of MontiorStart.
Public sub NotifyMe (ByVal Ctx As Variant, ByVal Msgid As Variant )
On Error GoTo NotifyMeErr
Dim tradingSignal as OraAQMsg
'Tradeorder contains details of the customer order
Dim tradeorder as OraObject
If IsNull(Msgid) Then
MsgBox "No Message"
'Get Error
MsgBox OraDatabase.LastServerErrText
Else
mvarMsgid = Msgid
Set tradingSignal = Ctx.AQMsg(1,"STOCK_TYPE","TRADER")
set tradeorder = tradingSignal.Value

'Tradeorder is the object of UDT "STOCK_TYPE"Access signal attribute
'of tradeorder as tradeorder("signal).Value or tradeorder!signal
if (tradeorder!signal = "SELL")
'Sell the stock
SellStock(tradeorder!NoOfShares, tradeorder!Ticker, _
tradeorder!Price,  tradeorder!ValidUntil)
else if (tradeorder!signal = "BUY")
'Buy the stock
BuyStock(tradeorder!NoOfShares,tradeorder!Ticker, _
tradeorder!Price,tradeorder!ValidUntil)
end if
End If
NotifyMeErr:
Call RaiseError(MyUnhandledError, "newcallback:NotifyMe Method")
End Sub

データベース・イベント

Oracle Databaseでは、データベース・イベントの検出および実行時の発行がサポートされています。

データベース・イベントの発行機能によって、他のアプリケーションからのメッセージをサブスクライブする場合と同じように、アプリケーションはデータベース・イベントをサブスクライブできます。

ユーザーは、次のイベントの発行を可能にできます。

- DMLイベント(DELETE、INSERT、UPDATE)

- DDLイベント(CREATE、ALTER、DROP)

- データベース・イベント(SERVERERROR、LOGON、LOGOFF、STARTUP、SHUTDOWN)

イベントの発行サブシステムは、AQのパブリッシュ/サブスクライブ・エンジンに統合されています。

関連項目:

データおよびシステム・イベントのトリガーの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

Oracle Objects for OLEには、COMユーザーによるOracle Databaseイベントのサブスクライブを可能にする機能が用意されています。

この機能では、関心のあるサブスクライバに対するデータベース・イベントの非同期通知がサポートされています。このモデルでは、クライアントは、サブスクリプションとして格納された各要求について、データベースまたはシステム・イベントが通知されるようにサブスクライブできます。

関心のあるデータベース・イベントが発生すると、データベース・イベント・ハンドラによってサブスクライバに通知されます。イベント・ハンドラは、イベントのサブスクリプション時に登録されています。

OO4Oでは、データベース・イベントへのサブスクリプションを表すOraSubscriptionオブジェクト、およびOraSubscriptionオブジェクトのリストを維持するOraSubscriptionsコレクションを提供しています。

データベース・イベントをサブスクライブするには、次の操作が必要です。

- 関心があるデータベース・イベントに基づいて、サブスクリプションを作成します。

- データベース・イベント・ハンドラを指定します。データベース・イベント・ハンドラは、NotifyDBEventsメソッドを実装するオートメーション・オブジェクトであることが必要です。NotifyDBEventsメソッドは、サブスクライブされたデータベース・イベントが発生すると、OO4Oによってコールされます。

- Registerメソッドを使用してサブスクリプションを登録します。

例: データベース・イベントが通知されるようにアプリケーションを登録する方法

次の例では、アプリケーションが、データベース・ログイン・イベント(データベースへのすべてのログインなど)の通知をサブスクライブします。ユーザーがデータベースにログインすると、サブスクリプション時に渡されたDBEventsHdlrのNotifyDBEventsメソッドがコールされます。コンテキスト依存の情報およびイベント固有の情報がNotifyDBEventsメソッドに渡されます。

この例のDBEventsHdlrは、後で定義されるDBEventClsです。

メイン・アプリケーションは次のとおりです。

' First instantiate the dbevent handler. The dbevent notification
' will fire the NotifyDBEvents on the callback handler.

Public DBEventsHdlr As New DBEventCls
Private Sub Form_Load()
Dim gOraSession As Object
Dim gOraSubscriptions As OraSubscriptions
Dim gOraDatabase As OraDatabase

'Create the OraSession Object
Set gOraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set gOraDatabase = gOraSession.DbOpenDatabase
("ora90.us.oracle.com", "pubsub/pubsub",
ORADB_ENLIST_FOR_CALLBACK)
Set gOraSubscriptions = gOraDatabase.Subscriptions
gOraSubscriptions.Add "PUBSUB.LOGON:ADMIN", DBEventsHdlr,
gOraDatabase
gOraSubscriptions(0).Register
MsgBox "OK"
End Sub

NotifyDBEventsメソッドを定義するデータベース・イベント・ハンドラ・クラスは次のとおりです。

Public countofMsgs as integer
Public Function NotifyDBEvents(Ctx As Variant, Payload As Variant )
On error goto NotifyMeErr

MsgBox "Retrieved payload " + Payload
' do something - here the subscription is unregistered after
' receiving 3 notifications
countofMsgs = countofMsgs + 1
If countofMsgs > 3 Then
Ctx.Subscriptions(0).UnRegister
End If
Exit Sub
NotifyMeErr:
Call RaiseError(MyUnhandledError, "newcallback:NotifyMe Method")

End Sub

関連項目:

- OraSubscriptionオブジェクト

- OraSubscriptionsコレクション

- Registerメソッド

- 『Oracle Database概要』のシステム・イベントとユーザー・イベントのトリガーに関する説明

アプリケーション・フェイルオーバー通知

一方のデータベース・インスタンスが失敗したためにもう一方のインスタンスにフェイルオーバーする場合は、アプリケーション・フェイルオーバー通知を使用できます。フェイルオーバー中に遅延が発生する可能性があるため、アプリケーション開発者は、ユーザーに対して、フェイルオーバーを実行中であることを知らせてスタンバイするように求める必要があります。また、初期インスタンスのセッションがALTER SESSIONコマンドを受け取っている可能性もあります。これらのコマンドは、2番目のインスタンスで自動的に再実行されるわけではありません。そのため、開発者はこれらのALTER SESSIONコマンドを2番目のインスタンスで再実行する必要があります。

フェイルオーバー通知の登録

前述の問題を解決するために、OO4Oはアプリケーション・フェイルオーバー通知をサポートしています。フェイルオーバー通知を受信するには、通知ハンドラがOraDatabaseオブジェクトのMonitorForFailoverメソッドに登録されている必要があります。通知ハンドラは、OnFailoverメソッドを実装するオートメーション・オブジェクト(Visual Basicのクラス・モジュール)であることが必要です。フェイルオーバー通知の登録時に、このオートメーション・オブジェクトへのIDispatchポインタをクライアント固有のコンテキストとともに渡してください。

フェイルオーバーの際には、ユーザー・セッションを再度確立する過程でOnFailoverメソッドが何度かコールされます。通知ハンドラのOnFailoverメソッドが最初にコールされるのは、インスタンスの接続が失われていることをデータベースが最初に検出したときです。これは、遅延の発生をアプリケーションからユーザーに伝えることができるようにするためです。フェイルオーバーが成功した場合は、接続が再度確立されて使用可能になると、OnFailoverメソッドの2回目のコールが発生します。このときに、クライアントはALTER SESSIONコマンドを再実行し、フェイルオーバーが行われたことをユーザーに知らせる必要があります。

フェイルオーバーに失敗した場合は、OnFailoverメソッドがコールされ、フェイルオーバーが行われないことをアプリケーションに知らせます。

フェイルオーバーの登録の例は、次の項にある例に含まれています。

関連項目:

- MonitorForFailoverメソッド

- OraDatabaseオブジェクト

- アプリケーション・フェイルオーバーの詳細は、『Oracle Net Services管理者ガイド』を参照してください。

フェイルオーバーの有効化

フェイルオーバー通知を有効にするには、OpenDatabaseメソッドのコールに、ORADB_ENLIST_FOR_CALLBACKを渡す必要があります。

関連項目:
OpenDatabaseメソッド

例: フェイルオーバー通知

次のサンプルでは、開発者が定義した一般的なOnFailover実装を示し、アプリケーションの登録方法を説明します。

'Implement the OnFailover method of the FailoverClient class module and the
' necessary arguments that will contain the dequeued message. Ctx  here is
' the application-defined context sensitive object that was passed
' in while registering with MonitorForFailover.
' An error of OO4O_FO_ERROR indicates that failover was unsuccessful, but the
' application can handle the and retry failover by returning
' a value of OO4O_FO_RETRY

Public Function OnFailover(Ctx As Variant, fo_type As Variant,fo_event _
as variant, fo_OraDB as Variant)
Dim str As String

OnFailover=0
str = Switch(fo_type = 1&, "NONE", fo_type = 2&, "SESSION", fo_type = _
4&, "SELECT")
If IsNull(str) Then
str = "UNKNOWN!"
End If
If fo_event= OO4O_FO_ERROR Then
MsgBox "Failover error gotten. Retrying "
OnFailover = OO4O_FO_RETRY
End If
If fo_event = OO4O_FO_BEGIN Then
MsgBox " Failing Over .... with failover type : " & str
Else
MsgBox "Failover Called with event : " & fo_event
End If
End Function

フェイルオーバー通知を受信するためのアプリケーションの登録

' First instantiate the Failover_Client. The Failover notification
' will invoke the OnFailover on this class module

Public Failover_Client As New FailoverClient
Dim OraDatabase As OraDatabase
Dim OraSession As OraSession
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

' Pass in the entire database name (ie., the entire Tnsnames entry
' with the domain name)in the opendatabase call
Set OraDatabase = OraSession.DbOpenDatabase("Exampledb.us.oracle.com", _
"scott/tiger", ORADB_ENLIST_FOR_CALLBACK)
OraDatabase.MonitorForFailover Failover_Client, OraDatabase

XMLの生成

Oracle Objects for OLEのXMLのサポートによって、Oracleデータベースから、データをXML形式で抽出することが可能です。

XML形式のデータは、XMLをサポートする他のソフトウェアのコンポーネントに統合できます。XMLドキュメントはWebサーバーでスタイルシートとともに提供されるため、データの内容と表示を分離し、検索を容易にするためにデータをネイティブの構成で保つことができます。

eXtensible Stylesheet Language Transformations(XSLT)を使用して、開発者は他の業務から受け取ったXMLドキュメントを、各業務で必要なスタイルに再フォーマットできます。

XMLの詳細は、次のサイトを参照してください。

http://www.w3.org/XML/

XMLの生成の例

OO4Oでは、開始する行番号と、その後に続く指定の行数に基づいて、任意のOraDynasetメソッドの内容からXMLを表現します。次に、例を示します。

OO4Oコード

Dim XMLString As String
Dim startrow as Integer
Dim maxrows as Integer
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)
Set OraDynaset = OraDatabase.CreateDynaset("select EMPNO, ENAME, COMM, JOB " & _
"from  EMP", 0&)
startrow = 4
maxrows = 2

'Output at most 2 rows beginning at row 4
XMLString = OraDynaset.GetXML(startrow, maxrows)

XML出力

<?xml version = "1.0"?>
<ROWSET>
<ROW id="4">
<EMPNO>7566</EMPNO>
<ENAME>JONES</ENAME>
<JOB>MANAGER</JOB>
</ROW>
<ROW id="5">
<EMPNO>7654</EMPNO>
<ENAME>MARTIN</ENAME>
<COMM>1400</COMM>
<JOB>SALESMAN</JOB>
</ROW>
</ROWSET>

XMLの書式は、OraDynasetおよびOraFieldのメソッドを使用してカスタマイズできます。

Dim XMLString As String
Dim startrow as Integer
Dim maxrows as Integer
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)
Set OraDynaset = OraDatabase.CreateDynaset("select EMPNO, ENAME, COMM," & _
"JOB from EMP", 0&)

'Change the root tag of the XML document
OraDynaset.XMLRowsetTag = "ALL_EMPLOYEES"

'Change the row tag of the XML document
OraDynaset.XMLRowTag = "EMPLOYEE"

'Remove the rowid attribute
OraDynaset.XMLRowID = ""

'Turn on the null indicator
OraDynaset.XMLNullIndicator = True

'Change the EMPNO tag name
Set EmpnoField = OraDynaset.Fields("EMPNO")
EmpnoField.XMLTagName = "EMP_ID"

'and make it an attribute rather than an element
EmpnoField.XMLAsAttribute = True

'Change the ENAME tag name
Set EnameField = OraDynaset.Fields("ENAME")
EnameField.XMLTagName = "NAME"

'Change the COMM tag name
Set CommField = OraDynaset.Fields("COMM")
CommField.XMLTagName = "COMMISSION"

'Change the JOB tag name
Set JobField = OraDynaset.Fields("JOB")
JobField.XMLTagName = "JOB_TITLE"
startrow = 4
maxrows = 2

'Output at most 2 rows beginning at row 4
XMLString = OraDynaset.GetXML(startrow, maxrows)

出力

<?xml version = "1.0"?>
<ALL_EMPLOYEES>
<EMPLOYEE EMP_ID="7566">
<NAME>JONES</NAME>
<COMMISSION NULL="TRUE"></COMMISSION>
<JOB_TITLE>MANAGER</JOB_TITLE>
</EMPLOYEE>
<EMPLOYEE EMP_ID="7654">
<NAME NULL>MARTIN</NAME>
<COMMISSION>1400</COMMISSION>
<JOB_TITLE>SALESMAN</JOB_TITLE>
</EMPLOYEE>
</ALL_EMPLOYEES>

関連項目:
OraDynasetオブジェクト

日時および間隔のデータ型

リリース9.2.0.4以降では、OO4Oで提供される4つの新規オブジェクトを使用すると、開発者は、Oracle9iで導入された新規日時および期間データ型にアクセスしたり操作できます。表4-3に、OO4Oオブジェクトおよび対応するデータ型を説明します。

表4-3 日時および間隔のデータ型

OO4Oオブジェクト

Oracleデータ型

OraIntervalDS

INTERVAL DAY TO SECOND

OraIntervalYM

INTERVAL YEAR TO MONTH

OraTimeStamp

OraTimeStamp

TIMESTAMP

TIMESTAMP WITH LOCAL TIME ZONE

OraTimeStampTZ

TIME WITH TIME ZONE

これらの型のインスタンスは、データベースからフェッチするか、またはストアド・プロシージャとファンクションを含めて、SQL文とPL/SQLブロックへの入力または出力変数として渡すことができます。

これらの新しいデータ型は、PL/SQL索引付き表、VARRAY、ネストした表などのコレクションの要素としてはサポートされていません。

日時および間隔のデータ型の取得

OO4Oの日時および間隔のデータ型は、次の方法で取得できます。

- ダイナセット内のOraFieldオブジェクトのValueプロパティ

- SQL文またはPL/SQLブロックの入力または出力パラメータとして使用するOraParameterオブジェクトのValueプロパティ

- 別のオブジェクトまたはREFの属性

- 次のOraSessionメソッド

- CreateOraIntervalDS

- CreateOraIntervalYM

- CreateOraTimeStamp

- CreateOraTimeStampTZ

日時および間隔のデータ型の説明

- OraTimeStampオブジェクト
Oracle TIMESTAMPまたはTIMESTAMP WITH LOCAL TIME ZONEデータ型に関する操作を行うためのメソッドを提供します。操作には、日時値へのアクセスと日時操作の実行が含まれます。

- OraTimeStampTZオブジェクト
Oracle TIMESTAMP WITH TIME ZONEデータ型に関する操作を行うためのメソッドを提供します。操作には、日時やタイムゾーンの値へのアクセスと日時操作の実行が含まれます。

- OraIntervalDSオブジェクト
Oracle INTERVAL DAY TO SECONDに関する操作を行うためのメソッドを提供します。このデータ型は、期間を日数、時間、分、秒およびナノ秒で表します。

- OraIntervalYMオブジェクト
Oracle INTERVAL YEAR TO MONTHに関する操作を行うためのメソッドを提供します。このデータ型は、期間を年数および月数で表します。

データベース・スキーマ・オブジェクト

OraMetaDataインタフェースにより、データベース・オブジェクトのスキーマ情報にアクセスできます。これは、OraDatabaseインタフェースのDescribeメソッドを起動すると、戻されます。Describeメソッドは、emp表などのスキーマ・オブジェクトの名前を取得して、OraMetaDataオブジェクトを戻します。OraMetaDataオブジェクトは、記述されているスキーマ・オブジェクトのすべての属性(OraMDAttributeコレクション)に動的にナビゲートおよびアクセスするメソッドを提供します。

次のVisual Basicスクリプトは、OraMetaDataインタフェースの簡単な使用例です。ここでは、emp表のいくつかの属性を取り出して表示します。

Dim empMD as OraMetaData

set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
set empDb = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0)

'Add EMPNO as an Input parameter and set its initial value.
Set empMd = empDb.Describe("emp")

'Get the column attribute collections.
Set empColumnsMd = empMd("ColumnList").Value

'Display name, data type, and size of each column in the emp table.
For I = 0 To empColumnsMd.Count - 1
Set ColumnMd = empColumnsMd(I).Value
MsgBox ColumnMd("data type").Value
MsgBox ColumnMd("Name").Value
Next I

関連項目:

- OraMetaDataオブジェクト

- OraMDAttributeオブジェクト

5 チューニングと問題解決

この章では、Oracle Objects for OLE(OO4O)のチューニング、問題解決およびエラー処理について説明します。

内容は次のとおりです。

- パフォーマンス・チューニングに関するヒントとテクニック

- Oracle Objects for OLEのエラー処理

- 問題解決

パフォーマンス・チューニングに関するヒントとテクニック

次の各項は、Oracle Objects for OLEを使用するアプリケーションのパフォーマンス・チューニングに役立ちます。

この項の内容は次のとおりです。

- OO4OオブジェクトのEarly Binding

- チューニングとカスタマイズ

- 複数オブジェクト参照の回避

- パラメータのバインド

- 配列処理

- 読取り専用、前方参照専用のダイナセットの使用

- PL/SQL一括収集機能の使用

- LONG RAWからLOBまたはBFILEへの移行

- 接続プールの使用

OO4OオブジェクトのEarly Binding

Early Binding技法によって、OO4Oオブジェクトは(Visual Basicが提供する汎用的なオブジェクト型ではなく)本来のオブジェクト型に厳密に型変換されます。これらのオブジェクトは、後でOO4Oオブジェクトとして再分類された汎用的なオブジェクトとしてではなく、OO4Oオブジェクトとして直接宣言されます。Early Binding技法によってOO4Oのタイプ・ライブラリへの頻繁なアクセスが削減されるため、パフォーマンスが向上します。次に、例を示します。

'Early binding of OO4O objects
Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset

'Generic binding of OO4O objects

Dim OraSession as Object
Dim OraDatabase as Object
Dim OraDynaset as Object

OO4OオブジェクトのEarly Bindingを使用するには、Visual BasicプロジェクトのOracleインプロセス・サーバー・タイプ・ライブラリを参照する必要があります。

関連項目:
Visual BasicでのOracle Objects for OLEオートメーションの使用

チューニングとカスタマイズ

データ・アクセスは、ダイナセットのキャッシュ・パラメータとフェッチ・パラメータを変更することによって、チューニングおよびカスタマイズできます。FetchLimitパラメータを高い値に設定すると、各要求でフェッチされる行数が増えるため、Oracle Databaseへのネットワーク・トリップの回数が減少し、結果的にパフォーマンスが向上します。

FetchLimitパラメータのサイズを大きくすることによる弊害は、クライアント側のメモリーの必要量が増加すること、およびディスク上の一時キャッシュ・ファイルでのスワップ・データが増加することです。FetchLimitの値は、クライアント・コンピュータの構成と予測される問合せ結果のサイズに合わせて適切に設定する必要があります。

FetchLimitの値は、次の方法で設定できます。

- CreateCustomDynasetメソッドを使用する方法

- WindowsレジストリにあるOO4Oエントリのパラメータを変更する方法

Windowsでは、レジストリ・キーはHKEY_LOCAL_MACHINE、サブキーはsoftware\oracle\KEY_HOMENAME\oo4oです(ここで、HOMENAMEは適切なOracleホームです)。OO4Oをインストールすると、次のようなセクションがレジストリに作成されます。

"FetchLimit" = 100

関連項目:

- FetchLimitプロパティ

- CreateDynasetメソッド

- OraDynasetオブジェクト

複数オブジェクト参照の回避

不要なオブジェクト参照を使用した不適切なコーディング技法は、パフォーマンスに影響を与えます。ダイナセット・オブジェクトのナビゲーションでは、OraFieldsコレクションとOraFieldオブジェクトへの参照数を少なくしてください。次のコードは、効率的でない例です。

'Create the OraDynaset Object
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

'Traverse until EOF is reached
Do Until OraDynaset.EOF
msgbox OraDynaset.Fields("sal").value
OraDynaset.MoveNext
Loop

このコードでは、OraDynasetコレクション、OraFieldsコレクションおよびOraFieldオブジェクトがループのたびに参照されます。OO4Oではフィールド・コレクション・オブジェクトに関する処理が改善されていますが、オートメーション・オブジェクトへの複数の参照は、基礎となるOLE/COMオートメーションのレイヤーを介しているため、実行が遅れます。

次の例では、ダイナセットのフィールド・コレクションではなく、フィールド・オブジェクトを介してフィールドを参照する方法を示しています。テストでは、この少量の追加コードによってパフォーマンスが大幅に向上することが確認されています。

Dim flds() As OraField
Dim i, fldcount As Integer

' Create the OraDynaset Object
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)
' Get the field count, and output the names
fldcount = OraDynaset.Fields.Count
ReDim flds(0 To fldcount - 1)

For i = 0 To fldcount - 1
Set flds(i) = OraDynaset.Fields(i)
Next I
'Traverse until EOF is reached

Do Until OraDynaset.EOF
msgbox Flds(5).Value
msgbox Flds(6).Value
OraDynaset.MoveNext
Loop

複数のオブジェクトを介して参照されるメソッドまたはオブジェクトは非効率な場合がありますが、それを回避するためのコードの追加は、必ずしも確実に時間が節約されるとはかぎりません。フィールド参照は複数回発生する可能性が高いことから、最初はフィールド参照から着手することが効果的です。

パラメータのバインド

OO4Oは、SQL文の処理時に、パラメータ・オブジェクトのバインドを有効および無効にする方法を提供します。この方法は、OraParameterオブジェクトのAutoBindDisableとAutoBindEnableメソッドを介して実行されます。SQL文にパラメータ名が含まれていない場合は、OraParameterオブジェクトを無効にすることでパラメータ・オブジェクトへの不要な参照を回避できます。この方法は、主にPL/SQLプロシージャで記述されたアプリケーションに特に有効です。次に、例を示します。

Set OraDatabase = OraSession. OpenDatabase("Exampledb", "scott/tiger", 0&)

'Add the job input parameter with initial value MANAGER.
OraDatabase.Parameters.Add "job", "MANAGER", 1

'Add the deptno input parameter with initial value 10.
OraDatabase.Parameters.Add "deptno", 10, 1

'Add the job input parameter with initial value MANAGER.
OraDatabase.Parameters.Add "EmpCur", 0, 1
OraDatabase.Parameters("Empcur").ServerType = ORATYPE_CURSOR

'Disable the job parameter for now.
OraDatabase.Parameters("job").AutoBindDisable

set OraSqlStmt = CreateSQL("Begin GetEmpData(:Empcur, :deptno) End;",0&)

PL/SQL文の処理中は、jobパラメータ・オブジェクトが参照されていないことに注意してください。

関連項目:

- AutoBindDisableメソッド

- AutoBindEnableメソッド

配列処理

OO4Oは、OraParamArrayオブジェクトを介したOracleデータベースへの配列インタフェースをサポートしています。この配列インタフェースによって、大量のデータを1回のネットワーク・トリップで転送できます。これは、ExecuteSQLまたはCreateSQLメソッドを介してPL/SQL文またはSQL文を処理するときに特に役立ちます。たとえば、配列処理なしでリモート・データベースに100行を挿入するためには、ExecuteSQLまたはCreateSQLを100回コールする必要があり、100回のネットワーク・トリップが発生します。次に、例を示します。

For I = 1 to 100
OraParameter("EMPNO").Value = xxxx
OraParameter("ENAME").Value = 'yyyy'
OraParameter("DEPTNO").Value = zz
OraDatabase.ExecuteSql("insert into emp values (:EMPNO,:ENAME,:DEPTNO)");
Next I

次の例では、配列を使用し、ネットワーク・トリップは1回のみ行います。

'ENAMEARR,:EMPNOARR,:DEPTNOARR are parameter arrays

For I = 1 to 100
OraParameter("EMPNOARR").Put_Value xxxx, I
OraParameter("ENAMEARR").Put_Value 'yyyy' ,I
OraParameter("DEPTNOARR").Put_Value zz, I
Next I

'Now call the ExecuteSQL only once
OraDatabase.ExecuteSql("insert into emp values(:EMPNOARR," & _
":ENAMEARR, :DEPTNOARR)");

関連項目:
配列の使用方法の詳細は、「OraParamArrayオブジェクト」を参照してください。

読取り専用、前方参照専用のダイナセットの使用

アプリケーションでダイナセットを更新しない場合は、ORADYN_READONLY(H4)オプションを使用して読取り専用のダイナセットを作成できます。このオプションによって、SQL文をローカルで解析するためのオーバーヘッドとSQL文を実行するためのネットワーク・トリップ回数を削減し、パフォーマンスを向上させることができます。

アプリケーションでスクロール可能なダイナセットが不要な場合は、ORADYN_NOCACHE(H8)オプションを使用して前方参照専用のダイナセットを作成できます。このオプションによって、ローカル・キャッシュ・ファイルを作成するためのオーバーヘッドと、そのファイルからデータを読み書きするためのオーバーヘッドを削減し、パフォーマンスを向上させることができます。

PL/SQL一括収集機能の使用

このPL/SQL一括収集機能を使用すると、PL/SQLの無名ブロックを使用して、1回のネットワーク・トリップで大量のデータを選択できます。OO4OのOraDynasetオブジェクトは、SQL文の実行中にデータの配列を選択します。このため、ネットワーク・ラウンドトリップ回数の増加、キャッシュ・ファイルや内部オブジェクトの追加作成などのオーバーヘッドが生じます。このオーバーヘッドが理由でダイナセットを使用しない場合、この機能はデータ配列の選択に役立ちます。選択されるデータは、OraParamArrayオブジェクトまたはOraCollectionオブジェクトのいずれかとしてバインドできます。

次の例では、OraCollectionインタフェースを使用したPL/SQL一括収集機能を示します。ここでは、1回のネットワーク・ラウンドトリップにより、少ないオーバーヘッドでenamesの配列が選択される方法を示します。

Set OraDatabase = OraSession.OpenDatabase("Exampledb", "scott/tiger", 0&)

'create a VARRAY type ENAMELIST in the database
OraDatabase.ExecuteSQL ("create type ENAMELIST as VARRAY(50) OF VARCHAR2(20)")

'create a parameter for ENAMELIST VARRAY
OraDatabase.Parameters.Add "ENAMES", Null, ORAPARM_OUTPUT, 247,"ENAMELIST"

'execute the statement to select all the enames from ename column of emp table
OraDatabase.ExecuteSQL ("BEGIN select ENAME bulk collect into" & _
":ENAMES from emp; END;")

'here OraParameter object returns EnameList OraCollection
Set EnameList = OraDatabase.Parameters("ENAMES").Value

'display all the selected enames
FOR I = 1 to EnameList.Size
msgbox Enamelist(I)
NEXT I

関連項目:
OraDynasetオブジェクト

LONG RAWからLOBまたはBFILEへの移行

次の新しい型が、Oracle8iから導入されました(「ラージ・オブジェクト(LOB)の使用」を参照)。

- BLOB

- CLOB

- BFILE

こららの型の仕様により、OO4Oは、LONGまたはLONG RAW型を使用するよりもはるかに迅速にそれらにアクセスできます。そのため、既存のLONG RAWコードをBLOB、CLOBおよびBFILEに変換し、新しいアプリケーションではLOBおよびBFILEのみを使用するようにしてください。LOBおよびBFILE型にアクセスするには、下位互換性のためにのみ提供されているLONG RAWの大量処理メソッドのかわりに、OraLOBオブジェクトを使用することをお薦めします。OraLOBでは最大限のコントロールが可能であることに注意してください。

LOBデータ型は、いくつかの点でLONGやLONG RAWデータ型と異なります。

- 1つの表に複数のLOB列を含めることはできますが、LONG列は1つのみです。

- 1つ以上のLOB列を含んだ表はパーティション化できますが、LONG列を含む表はパーティション化できません。

- LOBの最大サイズが4GBであるのに対し、LONGの最大サイズは2GBです。

- LOBはデータへのランダム・アクセスをサポートしますが、LONGデータ型がサポートするのは順次アクセスのみです。

- LOBデータ型(NCLOBを除く)はユーザー定義オブジェクト型の属性にできますが、LONGデータ型はできません。

- LOBのクライアント側でのバッファリングは、複数の少量書込みの最適化に使用されます。

- LOBデータは、データベース表領域(BFILE型)以外のオペレーティング・システム・ファイルに格納できます。

移行を容易にするために、次の各メソッドではBLOB、CLOBおよびBFILE型を使用できます。

- AppendChunkメソッド

- AppendChunkByteメソッド

- GetChunkメソッド

- GetChunkByteメソッド

- GetChunkByteExメソッド

- ReadChunkメソッド

LONG RAWの大量処理メソッドを使用している古いアプリケーションの場合は、移行の際に小規模なコード変更が必要です。主コードを変更するときは、使用する前に、NULLのBLOBとCLOB型を空白で更新する必要があります。

接続プールの使用

OO4Oの接続プールは、OraDatabaseオブジェクトのプールです。OO4Oの接続プールは、(多くの場合)すでに接続しているOraDatabaseオブジェクトのグループです。データベースとの間で接続と切断を繰り返す必要のあるアプリケーション(ASP Webアプリケーションなど)の場合は、接続プールを使用するとパフォーマンスが向上します。

関連項目:
接続プール管理機能の使用

Oracle Objects for OLEのエラー処理

OO4Oのエラーは、次のカテゴリに分類されます。

- OLEオートメーション・エラー

- 非ブロック化エラー

- Findメソッドの解析機能エラー

- Findメソッド・ランタイム・エラー

- OraObjectインスタンス・エラー

- LOBエラー

- Oracle Streamsアドバンスト・キューイング・エラー

- OraCollectionエラー

- OraNumberエラー

- Oracleエラー

- Oracle Data Controlエラー

OLEオートメーション・エラー

OO4Oオートメーション・サーバーのプログラム・インタフェースは、OO4Oインプロセス・オートメーション・サーバーです。メソッドの実行中に発生するエラーは、多くの場合、OLEオートメーション・エラー(ERR = 440、ERROR$="OLE自動化エラー:: :0")として報告されます。

エラーが発生した場合は、OraSessionおよびOraDatabaseオブジェクトのLastServerErrプロパティをチェックして、Oracleデータベース・エラーが発生しているかどうかを確認してください。LastServerErrが0(ゼロ)以外の場合、エラーはOO4Oオートメーション・サーバーで発生しています。

OO4Oオートメーション・サーバーのエラーを確認するには、ERROR$ファンクションが戻した文字列内の"OIP-NNNN"(NNNNは表5-1に示すエラー番号)を調べます。

注意:
これらの値は、ORACLE_BASE\\ORACLE_HOME\oo4oディレクトリのoraconst.txtファイルにあります。

関連項目:

- Oracle Objects for OLEインプロセス・オートメーション・サーバー

- LastServerErrプロパティ

- OraSessionオブジェクト

- OraDatabaseオブジェクト

表5-1に、Oracle OLEオートメーション・エラーを示します。

表5-1 Oracle OLEオートメーション・エラー

定数

値

説明

OERROR_ADVISEULINK

4096

内部エラー: アドバイザリ接続が無効です。

OERROR_POSITION

4098

空のダイナセットからフィールド値を取り出そうとしました。

OERROR_NOFIELDNAME

4099

無効なフィールド名が指定されました。

OERROR_NOFIELDINDEX

4100

無効なフィールド索引が指定されました。索引の範囲は0からFieldCount-1です。

OERROR_TRANSIP

4101

すでに進行中のトランザクションに、BeginTrans操作が指定されました。

OERROR_TRANSNIPC

4104

最初にBeginTransを実行せずにCommitTrans操作が指定されました。

OERROR_TRANSNIPR

4105

最初にBeginTransを実行せずにRollback操作が指定されました。

OERROR_NODSET

4106

内部エラー: システムが、存在しないダイナセットを破棄しようとしました。

OERROR_INVROWNUM

4108

無効な行を参照しようとしました。このエラーは、EOFまたはBOFがTRUEの場合、または現在の行が削除されてレコードの移動が行われていない場合に発生します。

OERROR_TEMPFILE

4109

データ・キャッシュ用の一時ファイルを作成しようとして、エラーが発生しました。

OERROR_DUPSESSION

4110

CreateSessionまたはCreateNamedSessionメソッドを使用して、すでに存在する名前付きセッションを作成しようとしました。

OERROR_NOSESSION

4111

内部エラー: システムが、存在しないセッションを破棄しようとしました。

OERROR_NOOBJECTN

4112

存在しない(フィールド・コレクション以外の)コレクションの名前付きオブジェクトを参照しようとしました。

OERROR_DUPCONN

4113

内部エラー: 接続名が重複しています。

OERROR_NOCONN

4114

内部エラー: システムが、存在しない接続を破棄しようとしました。

OERROR_BFINDEX

4115

無効なフィールド索引が指定されました。索引の範囲は0からCount -1です。

OERROR_CURNREADY

4116

内部エラー: システムが行に移動しようとしましたが、この操作はダイナセットでサポートされていません。

OERROR_NOUPDATES

4117

更新不可のダイナセット・データを変更しようとしました。

OERROR_NOTEDITING

4118

最初にEditメソッドを実行せずにフィールド値を変更しようとしました。

OERROR_DATACHANGE

4119

ローカル・キャッシュのデータを編集しようとしましたが、Oracle Databaseのデータが変更されていました。

OERROR_NOBUFMEM

4120

データ・バインディング用バッファがメモリー不足です。

OERROR_INVBKMRK

4121

無効なブックマークが指定されました。

OERROR_BNDVNOEN

4122

内部エラー: バインド変数が使用可能になっていません。

OERROR_DUPPARAM

4123

Addメソッドを使用して名前付きパラメータを作成しようとしましたが、その名前はすでに存在しています。

OERROR_INVARGVAL

4124

無効なオフセット・パラメータまたは無効な長さのパラメータがGetChunkメソッドに渡されたか、またはAppendChunkメソッドの使用中に内部エラーが発生しました。

OERROR_INVFLDTYPE

4125

LONGまたはLONG RAW型ではないフィールドに対して、GetChunkまたはAppendChunkメソッドを使用しようとしました。

OERROR_INVARG

4126

引数に無効な値が入力されました。

OERROR_TRANSFORUP

4127

SELECT ... FOR UPDATE操作が、最初にBeginTrans操作を実行せずに指定されました。

OERROR_NOTUPFORUP

4128

SELECT ... FOR UPDATE操作が指定されましたが、その問合せは更新不可です。

OERROR_TRANSLOCK

4129

CommitまたはRollbackが実行されましたが、SELECT ... FOR UPDATE操作が実行中です。

OERROR_CACHEPARM

4130

無効なキャッシュ・パラメータが指定されました。CacheBlocksパラメータの最大値は127です。

OERROR_FLDRQROWID

4131

ROWID(LONGまたはLONG RAW型)が必要なフィールドを参照しようとしましたが、ROWID値がありませんでした。

OERROR_OUTOFMEMORY

4132

内部エラー: メモリーが足りません。

OERROR_MAXSIZE

4135

AddTableメソッドで指定された要素のサイズが、この変数型の許容最大サイズを超えています。詳細は、「AddTableメソッド」を参照してください。

OERROR_INVDIMENSION

4136

AddTableメソッドに指定されたサイズが無効(負のサイズ)です。詳細は、「AddTableメソッド」を参照してください。

OERROR_ARRAYSIZ

4138

INSERT、UPDATEおよびDELETE文で使用されている配列パラメータのサイズが等しくありません。

OERROR_ARRAYFAILP

4139

配列を処理中にエラーが発生しました。詳細は、Windowsディレクトリのoo4oerr.logを参照してください。

OE_CLIPFAIL

4141

内部エラー: クリップボードをオープンまたはクローズできませんでした。

OE_NOSOURCE

4143

UpdateResourceメソッドにソース文字列が指定されていません。

OE_INVSOURCE

4144

UpdateSourceメソッドに無効なソース・タイプが指定されました。

OE_PLSQLDYN

4145

PL/SQLカーソルから作成したダイナセットに対し、SQLプロパティを設定しようとしました。

OERROR_CREATEPOOL

4147

このセッションのデータベース・プールがすでに存在します。

OERROR_GETDB

4148

未使用のデータベース・オブジェクトをプールから取得できません。

OE_INVINPUTTYP

4149

入力型がフィールドまたはパラメータの型と互換性がありません。

OE_NOEDITONCLONE

4150

クローンのオブジェクトを編集しようとしました。

OE_BNDCHGTYPERR

4152

パラメータ配列の型、または拡張型の配列を変更しようとしました。

非ブロック化エラー

表5-2に、非ブロック化エラーを示します。

表5-2 非ブロック化エラー

定数

値

説明

OERROR_NONBLKINPROGRESS

4153

非ブロック操作が進行中です。

OERROR_NONONBLKINPROGRESS

4154

処理は非ブロック操作の実行中にのみ有効です。

Findメソッドの解析機能エラー

Findメソッドの解析機能エラーは、解析機能がFindメソッド内の式を評価できないときに発生します。このエラーは、エラーの原因となった式の部分を示します。

表5-3に、Findメソッドの解析機能エラーを示します。

表5-3 Findメソッドの解析機能エラー

定数

値

説明

OERROR_STACK_OVER

4496

スタックがオーバーフローしています。

OERROR_SYNTAX

4497

構文エラーです。

OERROR_MISPLACED_PAREN

4498

カッコの位置が適切ではありません。

OERROR_MISPLACED_QUOTE

4499

引用符の位置が適切ではありません。

OERROR_MISSING PAREN

4500

警告: 右カッコが欠落しています。

OERROR_EXPECTED_PAREN

4501

左カッコが必要です。

OERROR_PARSER_UNKNOWN

4502

不明な解析機能エラー状態です。

OERROR_INVALID_FUNCTION

4503

サポートされない構文です。

OERROR_INVALID_COLUMN

4504

無効な列名です。

OERROR_MAX_TOKEN

4505

トークン・サイズが最大値を超えています。

OERROR_PARSER_DATA_TYPE

4506

サポートされないデータ型です。

OERROR_UNEXPECTED_TOKEN

4507

予期しないトークンが見つかりました。

OERROR_END_OF_CLAUSE

4508

予期しない句の終わりが見つかりました。

Findメソッド・ランタイム・エラー

Findメソッドのランタイム・エラーは、システムがfind式を評価できないときに発生します。このエラーは、ごくまれに発生します。発生した場合、解析機能は不正なコードを生成することもあります。

表5-4に、Findメソッド・ランタイム・エラーを示します。

表5-4 Findメソッド・ランタイム・エラー

定数

値

説明

OERROR_INVALID_INSTR

4516

内部エラー: 指示が無効です。

OERROR_STACK_ERROR

4517

内部エラー: スタックのオーバーフローまたはアンダーフローです。

OERROR_CONVERT_TYPES

4518

無効な型変換です。

OERROR_RUNTIME_DATA_TYPE

4519

無効なデータ型です。

OERROR_INVALID_SQL_ARG

4520

SQLファンクションに引数がありません。

OERROR_INVALID_COMPARE

4521

無効な比較です。

OERROR_SELECT_DUAL

4522

dualからのSELECTに失敗しました。

OERROR_DUAL_DATATYPE

4523

dualからのSELECTに無効なデータ型があります。

OER_OPER

4524

演算子の使用が無効です。

OraObjectインスタンス・エラー

表5-5に、OraObjectインスタンス・エラーを示します。

表5-5 OraObjectインスタンス・エラー

定数

値

説明

OERROR_NOOBJECT

4796

クライアント側のオブジェクト・キャッシュでOraObjectオブジェクト・インスタンスの作成に失敗しました。

OERROR_BINDERR

4797

SQL文へのOraObjectオブジェクト・インスタンスのバインディングに失敗しました。

OERROR_NOATTRNAME

4798

OraObjectオブジェクト・インスタンスの属性名の取得に失敗しました。

OERROR_NOATTRINDEX

4799

OraObjectオブジェクト・インスタンスの属性索引の取得に失敗しました。

OERROR_INVINPOBJECT

4801

バインド操作に対する入力オブジェクト型が無効です。

OERROR_BAD_INDICATOR

4802

フェッチしたOraObjectインスタンスの標識構造が無効です。

OERROR_OBJINSTNULL

4803

NULLのOraObjectインスタンスの操作に失敗しました。「IsNull(OraObject)プロパティ」を参照してください。

OERROR_REFNULL

4804

NULLのRef値のPin操作に失敗しました。「IsRefNull(OraRef)プロパティ」を参照してください。

関連項目:

- IsNull(OraObject)プロパティ

- IsRefNull(OraRef)プロパティ

- OraObjectオブジェクト

- OraRefオブジェクト

LOBエラー

表5-6に、LOBエラーを示します。

表5-6 LOBエラー

定数

値

説明

OERROR_INVSEEKPARAMS

4897

LOB読取り/書込み操作に指定したシーク値が無効です。

OERROR_LOBREAD

4898

Read操作に失敗しました。

OERROR_LOBWRITE

4899

Write操作に失敗しました。

OEL_INVCLOBBUF

4900

入力バッファがCLOB書込み操作用の文字列型ではありません。

OEL_INVBLOBBUF

4901

入力バッファがBLOB書込み操作用のバイト型ではありません。

OERROR_INVLOBLEN

4902

LOB書込み操作のバッファ長が無効です。

OERROR_NOEDIT

4903

このモードでのWrite、Trim、Append、Copy操作は許可されていません。

OERROR_INVINPUTLOB

4904

バインド操作に対する入力LOBが無効です。

OERROR_NOEDITONCLONE

4905

クローンLOBオブジェクトに対するWrite、Trim、Append、Copy操作は許可されていません。

OERROR_LOBFILEOPEN

4906

指定したファイルをLOB操作でオープンできませんでした。

OERROR_LOBFILEIOERR

4907

LOB操作でファイルのReadまたはWrite操作に失敗しました。

OERROR_LOBNULL

4908

NULLのLOBの操作に失敗しました。「IsNull(OraLOB/BFILE)プロパティ」を参照してください。

関連項目:

- OraBLOB、OraCLOBオブジェクト

- IsNull(OraLOB/BFILE)プロパティ

Oracle Streamsアドバンスト・キューイング・エラー

表5-7に、Oracle Streamsアドバンスト・キューイング・エラーを示します。

表5-7 Oracle Streamsアドバンスト・キューイング・エラー

定数

値

説明

OERROR_AQCREATEERR

4996

OraAQオブジェクトの作成でエラーが発生しました。

OERROR_MSGCREATEERR

4997

AQMsgオブジェクトの作成でエラーが発生しました。

OERROR_PAYLOADCREATEERR

4998

ペイロード・オブジェクトの作成でエラーが発生しました。

OERROR_MAXAGENTS

4999

サブスクライバの最大数を超えています。

OERROR_AGENTCREATEERR

5000

AQAgentオブジェクトの作成でエラーが発生しました。

関連項目:
OraAQオブジェクト

OraCollectionエラー

表5-8に、OraCollectionエラーを示します。

表5-8 OraCollectionエラー

定数

値

説明

OERROR_COLLINSTNULL

5196

NULLのOraCollectionの操作に失敗しました。「IsNull(OraCollection)プロパティ」を参照してください。

OERROR_NOELEMENT

5197

指定した索引に対する要素が存在していません。

OERROR_INVINDEX

5198

無効なコレクションの索引が指定されました。

OERROR_NODELETE

5199

VARRAYコレクション型の削除操作はサポートされていません。

OERROR_SAFEARRINVELEM

5200

スカラー要素型でない型を含むコレクションから変数SafeArrayは作成できません。

関連項目:

- OraCollectionオブジェクト

- IsNull(OraCollection)プロパティ

OraNumberエラー

表5-9に、OraNumberエラーを示します。

表5-9 OraNumberエラー

定数

値

説明

OERROR_NULLNUMBER

5296

NULLのOraNumberオブジェクトの操作に失敗しました。

関連項目:
OraNumberオブジェクト

Oracleエラー

最新のOracleエラー・テキストは、OraSessionまたはOraDatabaseオブジェクトのLastServerErrとLastServerErrTextプロパティから入手できます。

- OraSessionオブジェクト
OraSessionオブジェクトのLastServerErrとLastServerErrTextプロパティは、OpenDatabaseメソッドに関するエラーなど、接続に関連するすべてのエラーを戻します。

- OraDatabaseオブジェクト
OraDatabaseオブジェクトのLastServerErrとLastServerErrTextプロパティは、CreateDynaset、CreateSQLおよびExecuteSQLメソッドに関するエラーなど、Oracleカーソルに関連するすべてのエラーを戻します。

関連項目:

- LastServerErrプロパティ

- LastServerErrTextプロパティ

- OraSessionオブジェクト

- OraDatabaseオブジェクト

Oracle Data Controlエラー

Oracle Data Controlエラーは、Oracleデータ・コントロール固有のエラーです。データ・コントロールに視覚的にアクセスしている間、OO4Oオートメーション・サーバー固有のエラーは、ODCERR_AUTOMATIONのエラー・コードとともにOLEオートメーション・サーバー・エラーとして報告されます。Oracle Data Control固有のエラー・コードは、Error()イベントのDataErrパラメータから取り出されます。

表5-10に、Oracle Data Controlエラーを示します。

表5-10 Oracle Data Controlエラー

定数

値

説明

ODCERR_INITOIP

28000

Oracleインプロセス・サーバーの初期化に失敗しました。レジストリを調べて、Oracleインプロセス・サーバーの正しい位置を調べる必要があります。

ODCERR_OLEQE

28001

内部エラー。インプロセス・サーバー・インタフェースの問合せに失敗しました。

ODCERR_AUTOMATION

28003

Oracleインプロセス・サーバーのエラーが発生しました。

ODCERR_NODYNASET

28007

初期化する前にOracle Data Controlにアクセスしようとしました。

ODCERR_FIELDINDEX

28009

バインド済コントロールが、無効なフィールド索引にアクセスしようとしました。

ODCERR_FIELDNAME

28013

バインド済コントロールが、無効なフィールド名にアクセスしようとしました。

ODCERR_MEMORY

28014

内部エラー。バインド済コントロールから、要求したバインディングにメモリーを割り当てようとして、エラーが発生しました。

ODCERR_BMKTYPE

28015

Oracle Data Controlは、要求された種類のブックマークをサポートしていません。

ODCERR_CONVERSION

28016

Oracle Data Controlは、要求された型にフィールド値を変換できませんでした。

ODCERR_SETSESSION

28017

セッションのプロパティの設定は許可されていません。

ODCERR_SETDATABASE

28018

データベースのプロパティの設定は許可されていません。

ODCERR_BLOBUPDATE

28019

Oracle Data Controlは、PICTUREまたはRAWデータをバインド済コントロールから直接更新しません。AppendChunk()メソッドを使用してください。

ODCERR_DYN_NOCACHE

28020

ORADYN_NOCACHEオプションを指定して作成されたダイナセットには、Recordsetプロパティを設定できません(データ・コントロールに接続されるバインド済コントロールでは、しばしば双方向のナビゲーションが必要になります)。

ODCERR_DYN_NOMOVEFIRST

28021

ORADYN_NOMOVEFIRSTオプションで作成されたダイナセットにRecordsetプロパティは設定できません。

関連項目:
AppendChunkメソッド

問題解決

この項では、次の内容に関連する一般的なエラーについて説明します。

- OLE初期化エラーまたはOLEオートメーション・エラー

- Oracleネットワークのエラー

- アクセス違反

関連項目:
エラーに関する詳細情報は、『Oracle Databaseエラー・メッセージ』を参照してください。

OLE初期化エラーまたはOLEオートメーション・エラー

OLEの初期化エラーとオートメーション・エラーの最も多い原因は、ソフトウェアがインストールされていないこと、または正しくインストールされていないことです。指定したソフトウェアが正しくインストールされていることを確認してください。次に、メソッド名とプロパティ名が正しく指定されていること、Oracleオブジェクトがすべてオブジェクト型として宣言されていることを確認してください。

表5-11に、OLEエラーの原因と解決策を示します。

表5-11 OLEエラーの原因と解決策

考えられる原因

解決策

使用しているシステムに、Microsoft OLEオートメーションまたはランタイム・ファイルが存在しないか、存在していても古いバージョンのファイルです。

次のような最新バージョンのファイルがインストールされていることを確認してください。

- mfc42.dll

- oleaut32.dll

- ole32.dll

Oracle Objects for OLEのオブジェクト情報がWindowsの登録データベースに登録されていません。

Oracle Objects for OLEを再インストールするか、またはregedt32.exeファイルを実行して情報を登録します。「Oracle Objects for OLEの再配布可能ファイル」を参照してください。

使用しているシステムに、Oracle Required Support Filesがありません。

- oraclient*.dll

- orageneric*.dll

- oracommon*.dll

- oracore*.dll

- oranls*.dll

OO4Oのreadme.htmファイルをチェックし、必要なOracle Databaseクライアントのバージョンを確認してインストールしてください。

使用しているシステムに、Oracleネットワーク製品がないか、またはファイルの位置がPATHで設定されていません。

Oracleネットワーク製品をインストールするか、またはPATHに環境変数に追加して、ファイルが存在するディレクトリを示してください。

メソッド名またはプロパティ名のスペルが正しくありません。

『Oracle Objects for OLE開発者ガイド』(このガイド)を調べて、正しいスペルに修正してください。

間違ったオブジェクトからメソッドまたはプロパティを参照しました。

『Oracle Objects for OLE開発者ガイド』(このガイド)を調べて、正しいオブジェクトに修正してください。

使用しているシステムに、oraansiVER.dllファイルが含まれていません。

Oracle Objects for OLEを再インストールするか、またはこれらのファイルが存在するディレクトリをPATH環境変数に追加してください。

注意: VER はバージョンを表します。

関連項目:
Oracle Objects for OLEの再配布可能ファイル

Oracleネットワークのエラー

Oracleネットワークのエラーで最も多い原因は、接続情報の指定が間違っていることです。Oracle Objects for OLEの接続情報の指定は、Open Database Connectivity(ODBC)を使用する場合とは異なります。Oracle Objects for OLEの使用前に、接続情報を正しく指定していることを検証し、次に、ネットワークの接続が正しく動作していることを確認してください。接続テストの情報と受け取る可能性のあるOracleネットワークのエラー情報は、該当するOracleネットワーク製品のドキュメントに記載されています。

表5-12に、Oracleネットワークのエラーを示します。

表5-12 Oracleネットワークのエラー

考えられる原因

解決策

ConnectプロパティまたはOpenDatabaseメソッドへの引数が正しくありません。

ConnectプロパティまたはOpenDatabaseメソッドの項を参照してください。

DatabaseNameプロパティまたはOpenDatabaseメソッドへの引数が正しくありません。

DatabaseNameプロパティまたはOpenDatabaseメソッドの項を参照してください。

Oracleネットワーク製品がシステムに含まれていません。

Oracleネットワーク製品ソフトウェアをインストールしてください。

関連項目:

- Connectプロパティ

- DatabaseNameプロパティ

- OpenDatabaseメソッド

アクセス違反

アクセス違反の最も頻度の高い原因は、OO4Oオートメーション・サーバー、Oracle Required Support FilesまたはOLEを必要とする他のアプリケーションの実行中に、Oracle Objects for OLEをインストールすることです。これを回避するには、Windowsの開始直後、他のアプリケーションの実行前に、Oracle Objects for OLEをインストールしてください。

表5-13に、アクセス違反を示します。

表5-13 アクセス違反

考えられる原因

解決策

SYSTEMディレクトリ内またはPATH上のディレクトリで、Oracle Objects for OLEファイルが重複しています。

重複しているファイルを削除します。oipVER.dllとoipVER.tlbファイルは、必ずORACLE_BASE\\ORACLE_HOME\binディレクトリに配置する必要があります。

SYSTEMディレクトリ内またはPATH上のディレクトリで、Oracle Required Support FilesのDLLが重複しています。

重複しているファイルを削除します。通常、Oracle Required Support FilesのDLLはORACLE_BASE\\ORACLE_HOME \binディレクトリに配置されます。

- oraclient*.dll

- orageneric*.dll

- oracommon*.dll

- oracore*.dll

- oranls*.dll

SYSTEMディレクトリ内またはPATH上のディレクトリで、OLEのDLLが重複しています。

重複しているファイルを削除します。OLEのDLL(「OO4Oファイルの場所」の項にリストされています)は、必ず\systemディレクトリに配置する必要があります。

関連項目:
Oracle Objects for OLEファイルの場所

6 Visual Basic用クイック・ツアー

このクイック・ツアーは、Visual Basic用Oracle Objects for OLEを開発者が使用開始できるように作成されています。サンプル・アプリケーションである従業員データベース・アプリケーションでは、データ間のナビゲートやレコードの追加、修正、問合せなどの、データベースの基本操作をプログラミングする方法を示します。上級者向けの項では、パラメータ配列およびSQL文オブジェクトを使用したバッチ挿入の実行方法を示します。このクィック・ツアーおよびサンプル・アプリケーションでは、Scott/Tigerスキーマがインストールされていることを前提としています。

関連項目:
デモ用スキーマおよびコード例

このサンプル・アプリケーションの全コードは、ORACLE_BASE\\ORACLE_HOME\OO4O\VB\SAMPLES\QT\ディレクトリに提供されています。

このクイック・ツアーの内容は次のとおりです。

- 概要

- 開始: Oracleデータへのアクセス手順

- データ入力フォームのプログラミング

- バッチ・フォームのプログラミング

概要

この項では、従業員データベース・アプリケーション、およびそのアプリケーションを使用するためにユーザーが使用する2つのVisual Basicフォームの概要を示します。

従業員データベース・アプリケーションの概要

従業員データベース・アプリケーションでは、ユーザーは次の操作を実行できます。

- データの参照

- レコードの追加

- レコードの更新

- データベースの問合せ

- バッチ操作でのレコードの追加

これらの機能を提供するために、例では次のフォームを使用しています。

- 従業員フォーム

- バッチ挿入フォーム

従業員フォーム

従業員フォームには、データベースEMP表のフィールドが表示され、そこには、ユーザーがレコードを参照、追加、更新および問合せ可能な機能ボタンがあります。

図6-1に、従業員フォームを示します。

図6-1 従業員フォーム

関連項目:

- 従業員フォームを初期化するForm_Loadプロシージャのコードは、「Form_Loadプロシージャの完全サンプル・コード」を参照してください。

- 従業員フォームおよびナビゲーショナル・ボタン・コードの詳細は、「データ入力フォームのプログラミング」を参照してください。

バッチ挿入フォーム

バッチ挿入フォームにより、ユーザーは、バッチ操作でレコードを入力できます。

関連項目:
バッチ挿入フォームおよびそのコマンド・コードの詳細は、「バッチ・フォームのプログラミング」を参照してください。

図6-2に、バッチ挿入フォームを示します。

図6-2 バッチ挿入フォーム

開始: Oracleデータへのアクセス手順

サーバー・データを操作する前に、この項で説明する4つの手順をアプリケーションで完了しておく必要があります。この例のサンプル・コードは、「Form_Loadプロシージャの完全サンプル・コード」に示されています。

1. Oracleインプロセス・オートメーション・サーバーを開始します。
Oracleインプロセス・サーバー(OIP)では、Visual BasicアプリケーションとOracle Database間のインタフェースが提供されています。Oracleインプロセス・サーバーを開始するには、次に示すように、Visual BasicのCreateObject()ファンクションを使用してOraSessionオブジェクトを作成する必要があります。

Set OraSession = CreateObject("OracleInProcServer.XOraSession")

OraSessionオブジェクトを作成する場合、CreateObject()ファンクションに指定される引数は、常にOracleInProcServer.XOraSessionである必要があります。引数の左側にはシステムに登録されているアプリケーション名を指定し、この場合はOracleInProcServerです。右側には作成するオブジェクトのタイプを指定し、この場合はXOraSessionオブジェクトです。このコマンドを実行すると、Oracleインプロセス・サーバーが開始されます。

2. Oracleデータベースへの接続
OIPサーバーの実行後は、ローカルまたはリモートのOracleデータベースに接続できます。そのためには、次に示すように、OraDatabaseオブジェクトを作成する必要があります。

Set OraDatabase = OraSession.OpenDatabase("Exampledb", "scott/tiger", _
ORADB_DEFAULT)

OraSession.OpenDatabase()メソッドでは、OraDatabaseオブジェクトが作成されます。メソッド・コールでは、データベース名、接続文字列、およびデータベース・モードを表すビット・フラグを指定する必要があります。定数ORADB_DEFAULTは、デフォルトのデータベース・モードを表します。Visual Basicがこの行を実行すると、指定されたデータベースへの接続が作成されます。

3. データを操作するためにグローバル・オブジェクトOraDynasetを作成します。
Oracle Objects for OLEでは、ユーザーからのデータの参照および更新用に、ダイナセットと呼ばれるオブジェクトを使用します。

従業員アプリケーションには、プログラムの残り部分からもアクセス可能な、グローバル・ダイナセットが必要です。OraDatabase.CreateDynaset()メソッドでは、有効なSQL SELECT文を指定してダイナセットを作成します。次に示す例では、SQL文によってemp表からすべての行が選択され、作成されたダイナセットがグローバル変数EmpDynasetに割り当てられます。

Set EmpDynaset = OraDatabase.CreateDynaset("select * from emp", _
ORADYN_DEFAULT)

CreateDynaset()メソッドでは、SQL SELECT文の結果へのポインタが戻されます。

ORADYN_DEFAULTパラメータ値は、ダイナセットのデフォルト状態を指定します。Oracle Objects for OLEがデフォルト状態の場合、AddNewメソッドを使用してレコードを追加する際、未指定のフィールドはNULLに設定されます。emp表では列デフォルトが定義されないため、この動作が役立ちます。他のオプションを指定して、レコード追加時にサーバー列デフォルトを設定することも可能です。

関連項目:
CreateDynasetメソッド

4. ダイナセット・データを使用して従業員フォームをリフレッシュします。
従業員フォームでは、データベース・レコードが1回に1行ずつ表示されます。別の行へのナビゲートなどによる現在の行の変更は、画面上に反映される必要があります。EmpRefresh()サブルーチンは、ダイナセットの現在の行を使用してフィールドを更新します。フィールド値がNULLの場合は、空の文字列が表示されます。

次に、EmpRefresh()サブルーチンの例を示します。

Private Sub EmpRefresh()
'check if the current dynaset row is valid
If EmpDynaset.BOF <> True And EmpDynaset.EOF <> True Then

txtEmpno = EmpDynaset.Fields("empno").Value

' we can't display nulls, so display ""  for NULL fields
If Not IsNull(EmpDynaset.Fields("ename").Value) Then
txtEname = EmpDynaset.Fields("ename").Value
Else
txtEname = ""
End If

If Not IsNull(EmpDynaset.Fields("job").Value) Then
txtJob = EmpDynaset.Fields("job").Value
Else
txtJob = ""
End If

'check if mgr=nul
If Not IsNull(EmpDynaset.Fields("mgr").Value) Then
txtMgr = EmpDynaset.Fields("mgr").Value
Else
txtMgr = ""
End If

If Not IsNull(EmpDynaset.Fields("hiredate").Value) Then
txtHireDate = EmpDynaset.Fields("hiredate").Value
Else
txtHireDate = ""
End If

If Not IsNull(EmpDynaset.Fields("hiredate").Value) Then
txtSal = EmpDynaset.Fields("sal").Value
Else
txtSal = ""
End If

'check if comm=nul
If Not IsNull(EmpDynaset.Fields("comm").Value) Then
txtComm = EmpDynaset.Fields("comm").Value
Else
txtComm = ""
End If

txtDeptno = EmpDynaset.Fields("deptno").Value

'if the current dynaset row is invalid, display nothing
Else

txtEmpno = ""
txtEname = ""
txtJob = ""
txtMgr = ""
txtHireDate = ""
txtSal = ""
txtComm = ""
txtDeptno = ""

End If

End Sub

Form_Loadプロシージャの完全サンプル・コード

前の項で説明した従業員アプリケーションでは、Form_Load()プロシージャにより、OIPサーバーの作成、データベースへの接続、およびグローバル・ダイナセットの作成を行い、EmpRefreshファンクションをコールして従業員フォームでフィールド値を表示しています。次に、Form_Load()プロシージャの例を示します。

Private Sub Form_Load()
'OraSession and OraDatabase are global
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("Exampledb", "scott/tiger", 0&)
Set EmpDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

Call EmpRefresh

End Sub

次の変数は、EMP_QT.BASでは、グローバル変数として定義する必要があります。

Global OraSession As Object
Global OraDatabase As Object
Global EmpDynaset As Object

データ入力フォームのプログラミング

この項では、従業員フォームの詳細、および使用されるファンクションについて説明します。

従業員フォームの概要

従業員フォームには、データベースのEMP表のフィールドが表示され、そこには、ユーザーによるレコードの参照、追加、更新、問合せを可能にする機能ボタンがあります。

各フィールドは、データベースのEMP表の各列に対応しています。「Employee」フィールド(ENAME)は索引付けされた列であり、各レコードに対して必要です。EMP表のフィールドのデータ型とサイズは、次のように定義されています。

Name                     Null?       Type
-----------------------   ----------  --------------------------
EMPNO                     NOT NULL    NUMBER(4)
ENAME                                 VARCHAR2(10)
JOB                                   VARCHAR2(9)
MGR                                   NUMBER(4)
HIREDATE                              DATE
SAL                                   NUMBER(7,2)
COMM                                  NUMBER(7,2)
DEPTNO                    NOT NULL    NUMBER(2)

「Employee Number」(EMPNO)と「Department」(DEPTNO)の列はNOT NULLであるため、レコード追加時に常に値が必要です。各フィールドの長さは、それぞれのTextBoxのMaxLengthプロパティを適切な数字に設定することで設定されます。

図6-3に、従業員フォームを示します。

図6-3 従業員フォーム

実際のForm_Loadプロシージャの初期化コードは、「Form_Loadプロシージャの完全サンプル・コード」に示されています。

従業員フォームは、Form_Load()プロシージャにより初期化され、次の機能を含みます。

- データ間のナビゲート

- レコードの追加

- レコードの更新

- レコードの削除

- データベースの問合せ

データ間のナビゲート

一般的に、データベース・アプリケーションでは、ユーザーがデータベースのデータを表示できる必要があります。従業員フォームには4つのボタンがあり、ユーザーはデータをスクロールできます。表6-1に、各ボタンとその機能、各ボタンのアクションを有効にするダイナセットの移動メソッド、および詳細情報の参照先を示します。

表6-1 ナビゲーショナル・ボタンおよびダイナセットの移動メソッド

ボタン

アクション

メソッド

参照先

|<

最初のレコードへ移動

MoveFirst

最初または最後の行への移動

<

前のレコードへ移動

MovePrevious

前の行への移動

>

次のレコードへ移動

MoveNext

次の行への移動

>|

最後のレコードへ移動

MoveLast

最初または最後の行への移動

従業員データベースのレコード間のナビゲーションを可能にするには、最初に、すべてのレコード(行)を選択するグローバル・ダイナセットを作成する必要があります。その後、ダイナセットの移動メソッドを使用して、ナビゲーショナル・ボタンをプログラミングします。

最初または最後の行への移動

ダイナセットの最初の行への移動を可能にするには、MoveFirstメソッドを使用します。その後、従業員フォームのデータをリフレッシュするEmpRefresh()ルーチンをコールします。

次のサンプル・コードは、サンプル従業員レコードの最初の行へのクリック・イベントのプロシージャを示しています。

Private Sub cmdFirst_Click()
EmpDynaset.MoveFirst
Call EmpRefresh

End Sub

最後の行への移動には、MoveLastメソッドを使用します。その後、従業員フォームのデータをリフレッシュするEmpRefresh()ルーチンをコールします。

次のサンプル・コードは、サンプル従業員レコードの最後の行へのクリック・イベントのプロシージャを示しています。

Private Sub cmdLast_Click()

EmpDynaset.MoveLast
Call EmpRefresh

End Sub

前の行への移動

ダイナセットでは、任意の行へナビゲーションが可能です。ユーザーがダイナセットの中間(つまり現在の行が最初の行ではない)を参照している場合、MovePreviousメソッドで前の行へナビゲーションできます。

ただし、ユーザーが最初の行を参照している場合(現在の行が最初の行の場合)にMovePreviousメソッドを実行すると、BOF(ファイルの先頭)条件がTRUEに設定され、現在の行が無効になります。この場合、MoveFirstメソッドを使用して、現在の行を最初の行にリセットする必要があります。

次のサンプル・コードは、前の行へのボタン・クリック・イベントのプロシージャを示しています。

Private Sub cmdPrevious_Click()

If EmpDynaset.BOF <> True Then
EmpDynaset.DbMovePrevious
If EmpDynaset.BOF = True Then
MsgBox WarnFirstEmp$
EmpDynaset.DbMoveFirst
End If
End If

次の行への移動

ユーザーがダイナセットの中間(つまり現在の行が最後の行ではない)を参照している場合、MoveNextメソッドで次の行へナビゲーションできます。

ただし、ユーザーが最後の行を参照している場合(現在の行が最後の行の場合)にMoveNextメソッドを実行すると、EOF(ファイルの最後)条件がTRUEに設定され、現在の行が無効になります。この場合、MoveLastメソッドを使用して、現在の行を最後の行にリセットする必要があります。

次のサンプル・コードは、次の行へのボタン・クリック・イベントのプロシージャを示しています。

Private Sub cmdNext_Click()

If EmpDynaset.EOF <> True Then
EmpDynaset.DbMoveNext
If EmpDynaset.EOF = True Then
MsgBox WarnLastEmp$
EmpDynaset.DbMoveLast
End If
End If

レコードの追加

このサンプル・アプリケーションでは、ユーザーは次のボタンでデータベースに従業員レコードを追加できます。

- Add

- Commit

レコードを追加するには、ユーザーは、「Add」ボタンをクリックして、テキスト・ボックスに新規フィールドを入力した後、「Commit」ボタンをクリックしてデータベースにデータを保存します。

「Add」ボタンのコーディング

追加イベント・プロシージャでは、次の手順を実行する必要があります。

1. フォーム上のフィールドの消去。

2. 「Add」ボタンの無効化。

3. 「Commit」ボタンの有効化。

4. ユーザーによる新規フィールド値の入力。

次のサンプル・コードは、「Add」ボタンのための追加イベント・プロシージャを示しています。

Private Sub AddNew_Click()
'Blank out the fields
txtEmpno = ""
txtEname = ""
txtJob = ""
txtMgr = ""
txtHireDate = ""
txtSal = ""
txtComm = ""
txtDeptno = ""

'Disable the Add button and enable the commit button
AddNew.Enabled = False
Commit.Enabled = True
'Disable the navigation buttons
DisableNavButtons
'Set doadd to true for commit procedure
DoAdd = True
End Sub

AddNew_Click()メソッドが存在する場合、ユーザーがフィールド値を入力している従業員フォームへ、コントロールが戻ります。

「Commit」ボタンのコーディング(追加)

追加をコミットするには、AddNewメソッドを使用してダイナセットを追加モードにします。その後、新規データをダイナセットのフィールドに割り当て、Updateメソッドを使用してデータベースを更新します。プログラムを堅牢にするために、このソフトウェアでは、一部のフィールドがデータベースへの追加前に検証されます。

Commit_Click()イベント・プロシージャでは、レコードを追加するために、次の処理を実行する必要があります。

1. 「Employee Number」フィールドと「Department」フィールドがnullでないことの確認。

2. 新規の「Employee Number」が重複入力ではないことの確認。
手順1および手順2は、Commit_Click()の後に記述するDoValidationChecks()ファンクションにより実行されます。

3. AddNewメソッドによるダイナセットの追加モードへの設定。

4. Fields().Valueプロパティを使用した、ダイナセット・フィールドへの入力データの割当て。この手順は、UpdateDynasetFieldsファンクションにより実行されます。

5. Updateメソッドを使用した、新規レコードでのデータベースの更新。

6. 「Commit」ボタンの無効化。

7. 「Add」ボタンの有効化。

Commitファンクションのコードは、次のルーチンに分かれます。

- Commit_Clickイベント・プロシージャ(追加)

- DoValidationChecks( )ファンクション

- UpdateDynasetFields( )ファンクション

Commit_Clickイベント・プロシージャ(追加)

次に、レコードを追加する典型的なCommit_Click()イベント・プロシージャを示します。

Private Sub Commit_Click()

On Error GoTo err_commit

ErrMsg = ""
'Do validation checks on entered data
If DoValidationChecks Then 'If validation checks have passed

'Add the new record to dynaset
EmpDynaset.AddNew

'Update the dynaset fields and then update database if there is no error.
If UpdateDynasetFields Then

'Update the database
EmpDynaset.Update

Commit.Enabled = False
AddNew.Enabled = True

Exit Sub

err_commit:
If ErrMsg <> "" Then
MsgBox ErrMsg
Else
MsgBox Error$
End If

End Sub

DoValidationChecks( )ファンクション

ステップ2で推奨するように重複入力を確認するには、入力された「Employee Number」フィールドに一致する行をカウントするSQL文を使用し、NOCACHEオプションを指定してローカル・ダイナセットを作成する必要があります。一致が見つかった(行カウントが0より大きい)場合、入力された従業員番号は重複入力で、エラーが表示されます。この場合、SQL SELECT文は数のみを戻すため、サーバーによる重複入力の検出よりも、キャッシュなしでダイナセットを作成する方が効率的なエラー・チェックとなります。

DoValidationChecks()は、入力データが有効な場合はTrueを戻します。そうでない場合は、Falseを戻します。

Function DoValidationChecks() As Boolean

Dim DupDyn As Object
Dim DupDynQry As String

On Error GoTo err_ValidationCheck

ErrMsg = ""
'Empno cannot be changed while in Update mode, so we can skip over validation
If DoAdd Then
If txtEmpno = "" Then
ErrMsg = "You must enter a value for Employee Number"
Error 1
End If
End If

If txtHireDate <> "" And Not IsDate(txtHireDate) Then
ErrMsg = "Enter date as dd-mmm-yy."
Error 2
End If

If txtDeptno = "" Then
ErrMsg = "You must enter a value for Department Number"
Error 3
End If

'If adding a record, check for Duplicate empno value by
'attempting to count rows with same value
'Build Query:
If DoAdd Then
DupDynQry = "select count(*) from emp where empno = " & txtEmpno
Set DupDyn = OraDatabase.CreateDynaset(DupDynQry, ORADYN_NOCACHE)

If DupDyn.Fields(0).Value <> 0 Then
ErrNum = DUPLICATE_KEY
ErrMsg = "Employee Number already exists."
Error ErrNum
End If
End If
'Succesful validation with no errors returns True
DoValidationChecks = True
Exit Function

err_ValidationCheck:
If ErrMsg <> "" Then
MsgBox ErrMsg
Else
MsgBox Error$
End If
'Validation returns false on failure
DoValidationChecks = False

End Function

UpdateDynasetFields( )ファンクション

コミット・イベント・プロシージャでは、ダイナセットをEditまたはAddNewモードにした後、このファンクションをコールします。UpdateDynasetFields()ファンクションは、テキスト・ボックスに入力された値をダイナセットのフィールドに設定します。ファンクションが正常に完了した場合はTRUEを戻し、エラーがある場合はFALSEを戻します。

Function UpdateDynasetFields() As Integer
'This function sets the dynaset field value to those entered in the text boxes.
'The function returns true on success, false on error.

ErrMsg = ""

On Error GoTo err_updatedynasetfields

EmpDynaset.Fields("empno").Value = txtEmpno
EmpDynaset.Fields("ename").Value = txtEname
EmpDynaset.Fields("job").Value = txtJob
EmpDynaset.Fields("mgr").Value = txtManager
EmpDynaset.Fields("hiredate").Value = txtHireDate
EmpDynaset.Fields("sal").Value = txtSal
EmpDynaset.Fields("comm").Value = txtComm
EmpDynaset.Fields("deptno").Value = txtDeptno

UpdateDynasetFields = True

Exit Function

err_updatedynasetfields:
If ErrMsg <> "" Then
MsgBox ErrMsg
Else
MsgBox Error$
End If
UpdateDynasetFields = False

レコードの更新

ユーザーがデータベース内にある既存レコードを更新できるようにするには、従業員フォームに「Update」ボタンを含める必要があります。ユーザーは特定のレコードにナビゲートし、「Update」ボタンをクリックして変更を行った後、「Commit」ボタンをクリックします。

更新モードになっている間、アプリケーションでは次の制約が課されます。

- ユーザーは、他のレコードへのナビゲートも他の機能の実行もできません。

- 従業員番号は主キーであるため、ユーザーによる変更はできません。

Updateファンクションをプログラミングするには、「Update」ボタンのイベント・プロシージャを記述し、コミット・プロシージャを、レコードの更新と追加の両方を処理できるように修正します。

「Update」ボタンのコーディング

「Update」ボタンのコーディングでは、主キーである「Employee Number」のテキスト・ボックスを無効化して、このフィールドがレコード更新時に変更されないようにします。また、ナビゲーションなどのその他の機能もレコード更新時に無効になるよう、他のボタンも無効化する必要があります。

DoUpdateブール式をTRUEに設定し、コミット・プロシージャが現行プロセスを追加ではなく更新の操作として認識できるようにします。

更新イベント・プロシージャでは、次の処理を実行する必要があります。

1. 「Update」ボタンの無効化。

2. 「Commit」ボタンの有効化。

3. 更新操作時にナビゲーションなどの機能を無効化するための、他のボタンの無効化。

4. 「Employee Number」テキスト・ボックスの無効化。

5. DoUpdateフラグのTrueへの設定。

6. ユーザーによる変更の入力。

次のサンプル・コードは、更新イベント・プロシージャを示しています。

Private Sub cmdUpdate_Click()
'Disable the Update button and enable the commit button
cmdUpdate.Enabled = False
Commit.Enabled = True
'Disable all other buttons
DisableNavButtons

txtEmpno.Enabled = False
DoUpdate = True
End Sub

更新および追加のイベント・プロシージャでは、追加または更新の操作中にナビゲーションおよびその他の機能を無効にするために、DisableNavButtons()サブルーチンをコールします。

Private Sub DisableNavButtons()
'disable all buttons while adding and updating
cmdFirst.Enabled = False
cmdPrevious.Enabled = False
cmdNext.Enabled = False
cmdLast.Enabled = False
cmdFind.Enabled = False
cmdUpdate.Enabled = False
AddNew.Enabled = False

End Sub

レコードを追加および更新する「Commit」ボタンのコーディング

更新をコミットするプロシージャは追加をコミットするプロシージャと似ていますが、ダイナセットがEditメソッドにより編集モードに設定されて新規ダイナセット値が割り当てられる点が異なります。

追加と更新では、同じコミット・ボタンおよび同じコミット・イベント・プロシージャが使用されるため、追加と更新を区別するために2つのグローバル・フラグDoAddとDoUpdateが追加されます。「Add」および「Update」のクリック・イベント・プロシージャで、これらのフラグが設定されます。

追加と更新のコミット・イベント・プロシージャでは、次の処理を実行する必要があります。

1. DoValidationChecks()ファンクションを前述と同様に使用した、入力データの検証。

2. レコードの追加にはAddNew、更新にはEditの使用。

3. 前述と同様にUpdateDynasetFields()を使用してFields().Valueプロパティを使用した、ダイナセット・フィールドへの入力データの割当て。

4. Updateを使用した、新規レコードでのデータベースの更新。

5. 「Commit」ボタンの無効化。

6. 「Add」ボタンおよび「Update」ボタンを含む、他のすべての機能ボタンの再有効化。

7. DoUpdateおよびDoAddフラグのFalseへの設定。

手順5から手順7に示すボタンおよびフラグの状態を変更するコードは、SetAfterCommitFlags()と呼ばれる新規サブルーチンで提供されます。これにより、最初にCommitおよびAddNewを有効化したコード行が置き換えられます。

このCommitファンクションのコードは、次のルーチンに分かれます。

- Commit_Click( )イベント・プロシージャ

- DoValidationChecks( )ファンクション。元のCommitファンクションでも使用。

- UpdateDynasetFields( )ファンクション。元のCommitファンクションでも使用。

- SetAfterCommitFlags()サブルーチンの例。新規サブルーチン。

Commit_Click( )イベント・プロシージャの例

次の例は、Commit_Clickイベント・プロシージャを示しています。

Private Sub Commit_Click()

On Error GoTo err_commit

ErrMsg = ""
'Do validation checks on entered data
If DoValidationChecks Then 'If validation checks have passed

'If we are adding a record use AddNew
If DoAdd = True Then
EmpDynaset.AddNew
End If
'If we are updating a record use Edit
If DoUpdate = True Then
EmpDynaset.Edit
End If
'Update the dynaset fields and then update database if there is no error.
If UpdateDynasetFields Then
EmpDynaset.Update
End If

SetAfterCommitFlags

End If 'Endif for DoValidationChecks

Exit Sub

err_commit:
If ErrMsg <> "" Then
MsgBox ErrMsg
Else
MsgBox Error$
End If

End Sub

SetAfterCommitFlags()サブルーチンの例

次の例は、SetAfterCommitFlag()サブルーチンを示しています。

SetAfterCommitFlags()サブルーチンは、コミット・イベント・プロシージャの最後にコールされます。SetAfterCommitFlags()サブルーチンは、無効化されたボタンおよびテキスト・ボックスを再度有効化し、DoUpdateおよびDoAddフラグをFalseに設定します。

Sub SetAfterCommitFlags()
'disable commit and re-enable add and update buttons
Commit.Enabled = False
AddNew.Enabled = True
cmdUpdate.Enabled = True

'enable the other buttons
cmdFirst.Enabled = True
cmdPrevious.Enabled = True
cmdNext.Enabled = True
cmdLast.Enabled = True
cmdFind.Enabled = True
cmdUpdate.Enabled = True
AddNew.Enabled = True

DoUpdate = False
DoAdd = False

txtEmpno.Enabled = True

End Sub

レコードの削除

ユーザーは、特定のレコードにナビゲートして「Delete」ボタンをクリックすることで、レコードを削除できます。削除を確認するメッセージがアプリケーションから表示され、次にDeleteメソッドを使用してレコードが削除されます。次に、画面がリフレッシュされて、次のレコードまたは(ダイナセットの最後のレコードを削除した場合は)前のレコードが表示されます。

次の例は、削除クリック・イベント・プロシージャを示しています。

Private Sub cmdDelete_Click()
'prompt user
Response = MsgBox("Do you really want to Delete?", vbYesNo + vbExclamation)

If Response = vbYes Then
EmpDynaset.Delete
'attempt to move to next record
EmpDynaset.MoveNext
If EmpDynaset.EOF Then 'If deleted last record
EmpDynaset.MovePrevious
End If
Call EmpRefresh
End If
End Sub

データベースの問合せ

従業員アプリケーションは、ユーザーがデータベース内で特定のレコードを検索できるように構成できます。デモ用に、従業員名のみを問い合せることができる「Find」ボタンが付いています。ユーザーはいつでも「Employee Name」フィールドに問合せを入力して、「Find」ボタンをクリックできます。その後、アプリケーションによって結果が表示されるか、名前が見つからなかった場合はメッセージが表示されます。

レコードの検索には、FindFirstメソッドを使用します。検索操作が正常に終了した場合、レコードが表示されます。検索に失敗した場合は、メッセージが表示されます。失敗するとダイナセットがBOF(ファイルの先頭)となるため、現在の行が最初の行に再設定され、現在の行は実質的に無効となります。

Find_Click()イベント・プロシージャでは、次の処理を実行する必要があります。

1. 入力文字列と一致するENAME列を持つレコードを検索するためのfind句の構築。

2. FindFirstメソッドを使用した、検索の実行。

3. 該当するレコードが見つかった場合のレコードの表示。見つからなかった場合のメッセージの表示および現在の行の最初の行への再設定。

次の例は、典型的な検索クリック・イベント・プロシージャを示しています。

Private Sub cmdFind_Click()
Dim FindClause As String
Dim SingleQuote As String

ErrMsg = ""
SingleQuote = "'"

On Error GoTo err_find
'build the find clause:
'Can make our query case insensitive by converting the names to upper case
'FindClause = "UPPER(ename) = " & SingleQuote & UCase(txtEname) & SingleQuote
FindClause = "ename = " & SingleQuote & txtEname & SingleQuote

EmpDynaset.DbFindFirst FindClause

If EmpDynaset.NoMatch Then
MsgBox "Could not find record matching Employee Name " & txtEname
EmpDynaset.DbMoveFirst
End If

Call EmpRefresh

Exit Sub

バッチ挿入の使用

バッチ挿入フォームをロードする典型的なコマンドは次のとおりです。

Private Sub BInsert_Click()
Load BatchInsert
BatchInsert.Show
End Sub

関連項目:
バッチ・フォームのプログラミング

バッチ・フォームのプログラミング

この項では、バッチ挿入フォームおよび使用されるファンクションについて説明します。

バッチ挿入フォームの概要

バッチ挿入フォームにより、ユーザーは、バッチ操作で行を挿入(1つのコマンドのみを使用して複数のレコードをデータベースに挿入)できます。この機能は、パラメータ配列およびSQL文を使用して実装されます。

表6-1に、一般的なバッチ挿入フォームを示します。

図6-4 バッチ挿入フォーム

ユーザーは、従業員フォーム上の「Batch Insert」ボタンをクリックすることにより、バッチ挿入フォームにナビゲートします。バッチ挿入フォームには、入力済データを表示するグリッドと、ユーザーがレコードを入力するフィールド行が設けられています。例では、簡潔にするために、ユーザーには「Employee Number」、「Employee Name」および「Department Number」フィールドへの入力のみが許可されています。

ユーザーは、フィールドにレコードを入力し、「Add to Grid」ボタンをクリックします。プログラムにより、入力したレコードがグリッドに表示されます。バッチ全体をデータベースに挿入するには、ユーザーは「CommitGrid」ボタンをクリックします。

バッチ挿入フォームには、3つのプロシージャが使用されます。Form_Load()プロシージャは、列ヘッダーでグリッドを初期化します。CmdAddtoGrid_click()プロシージャは、入力データをフィールドからグリッドにコピーします。CommitGrid_Click()プロシージャには、バッチ挿入に使用するパラメータ配列およびSQL文が含まれます。

次に、これらのプロシージャを示します。

- バッチ挿入のForm_Load( )プロシージャのコーディング

- CmdAddtoGrid( )プロシージャのコーディング

- CommitGrid_Click( )プロシージャのコーディング

バッチ挿入のForm_Load( )プロシージャのコーディング

次の例は、バッチ挿入のForm_Load()プロシージャがグリッドの列ヘッダーを設定する方法を示しています。

Private Sub Form_Load()
Grid1.Enabled = True
CurrRow = 0  'Top row
ReadRow = 0
ReadCol = 0

'Set column headings

Grid1.Row = CurrRow
Grid1.Col = 0
Grid1.Text = "Employee Number"

Grid1.Col = 1
Grid1.Text = "Employee Name"

Grid1.Col = 2
Grid1.Text = "Department Number"

NoOfCols = 3

CurrRow = CurrRow + 1

End Sub

CmdAddtoGrid( )プロシージャのコーディング

CmdAddtoGrid_Click()プロシージャは、フィールドに入力されたデータを、グリッドの次の空行にコピーします。グローバル変数CurrRowは、常に、グリッドの最初の空行を指します。

次の例は、CmdAddtoGrid_Click()を示しています。

Private Sub CmdAddtoGrid_Click()

'Update the grid
'Update Empno column
Grid1.Row = CurrRow
Grid1.Col = 0
Grid1.Text = txtEmpno
'Update Ename column
Grid1.Row = CurrRow
Grid1.Col = 1
Grid1.Text = txtEname
'Update Deptno column
Grid1.Row = CurrRow
Grid1.Col = 2
Grid1.Text = txtDeptno

'Increment CurrCol
CurrRow = CurrRow + 1

NoOfRows = CurrRow - 1

End Sub

CommitGrid_Click( )プロシージャのコーディング

CommitGrid_Click()プロシージャは、グリッドのデータをデータベースに挿入します。これを行うために、このプロシージャでは、グリッドの各列に対応するEMP表の各列に対して、パラメータ配列オブジェクトを作成します。OraParameters.AddTable()メソッドでは、各パラメータ配列を定義します。たとえば、EMPNO_ARRというパラメータ配列では「Employee Number」列要素を保持する、などです。

パラメータ配列を定義した後、Put_Valueメソッドで各配列にグリッド列要素を移入します。

パラメータ配列要素をデータベースにコミットするために、このプロシージャでは、CreateSQL()メソッドを、パラメータ配列を含むSQL INSERT文とともに使用します。CreateSQL()メソッドでは、SQL文オブジェクトを作成するとともにSQL INSERT文も実行するため、この1つの文ですべての列要素(パラメータ配列要素)がEMP表に挿入されます。

パラメータ配列を含むSQL INSERT文の実行時にエラーが発生した場合も、SQL文オブジェクトは明示的なエラーとはならずに作成されます。このようなエラーを識別するには、CreateSQLメソッドの実行直後に、必ず、OraDatabase.LastServerErrおよびOraDatabase.LastServerErrTextプロパティをチェックします。

CreateSQLメソッドは、データベースを直接更新し、ダイナセットには影響しません。EmpDynaset.Refreshメソッドを使用してこのダイナセットをリフレッシュし、新しく挿入されたレコードがそれに反映されるようにする必要があります。

CommitGrid_Click()イベント・プロシージャでは、次の処理を実行する必要があります。

1. AddTableメソッドを使用した、各グリッド(データベース)列のパラメータ配列の定義。

2. ネステッド・ループ内でPut_Valueメソッド使用した、グリッド列要素のパラメータ配列へのコピー。

3. パラメータ配列要素をEMP表へ挿入するための、CreateSQLメソッドを使用したSQL文オブジェクトの作成。

4. SQL文実行エラーを識別するための、LastServerErrTextおよびLastServerErrプロパティの確認。

5. 新規に挿入されたレコードを反映するための、Refreshメソッドを使用したグローバル・ダイナセットのリフレッシュ。

次の例は、典型的なcmdCommitGrid_Click()プロシージャを示しています。

Private Sub cmdCommitGrid_Click()
Dim OraSqlStmt As Object
Dim OraPArray(2) As Object

On Error GoTo err_CommitGrid
ErrMsg = ""

'Define parameter arrays, one for each column
OraDatabase.Parameters.AddTable "EMPNO_ARR", ORAPARM_INPUT, ORATYPE_NUMBER, _
NoOfRows
OraDatabase.Parameters.AddTable "ENAME_ARR", ORAPARM_INPUT, ORATYPE_VARCHAR2, _
NoOfRows, 10
OraDatabase.Parameters.AddTable "DEPTNO_ARR", ORAPARM_INPUT, ORATYPE_NUMBER, _
NoOfRows
If OraDatabase.LastServerErr <> 0 Or OraDatabase.LastServerErrText <> "" Then
Error 1
End If

'Initialize local array to hold parameter arrays
Set OraPArray(0) = OraDatabase.Parameters("EMPNO_ARR")
Set OraPArray(1) = OraDatabase.Parameters("ENAME_ARR")
Set OraPArray(2) = OraDatabase.Parameters("DEPTNO_ARR")

'Init the param array variables. Add loop to read thru grid ROWS
For ReadRow = 0 To (NoOfRows - 1)
Grid1.Row = ReadRow + 1
'Loop to read thru grid CELLS
For ReadCol = 0 To NoOfCols - 1
Grid1.Col = ReadCol
OraPArray(ReadCol).Put_Value Grid1.Text, ReadRow
Next ReadCol
Next ReadRow

'create a sqlstmt to insert array values into table
Set OraSqlStmt = OraDatabase.CreateSql("insert into emp(empno,ename,deptno)" & _
"values(:EMPNO_ARR,:ENAME_ARR,:DEPTNO_ARR)", 0&)
If OraDatabase.LastServerErr <> 0 Or OraDatabase.LastServerErrText <> "" Then
ErrMsg = OraDatabase.LastServerErrText
Error 1
End If

'Refresh the Dynaset
EmpDynaset.Refresh

OraDatabase.Parameters.Remove "EMPNO_ARR"
OraDatabase.Parameters.Remove "ENAME_ARR"
OraDatabase.Parameters.Remove "DEPTNO_ARR"

Exit Sub

err_CommitGrid:
If ErrMsg <> "" Then
MsgBox ErrMsg
Else
MsgBox Error$
End If

End Sub

7 ストアド・プロシージャ用のコード・ウィザード

Oracle Objects for OLE(OO4O)のコード・ウィザードは、Oracle PL/SQLおよびJavaストアド・プロシージャを実行するOO4Oコードを生成します。

このウィザードは、既存のOracleストアド・プロシージャおよびパッケージから、Microsoft Visual BasicまたはActive Server PagesやVBScriptの個々のサブルーチンにコードを生成します。さらに、このウィザードでは、COMオートメーション・オブジェクトの完全な実装をVBクラス・ファイルの形式で生成できます。生成されたCOMオートメーション・オブジェクトのメソッドは、指定されたパッケージに含まれるストアド・プロシージャを実行するためのクライアント・スタブとして動作します。入出力パラメータのバインドおよびストアド・プロシージャの実行に必要なすべてのOO4Oコードが、自動的に生成されます。

このウィザードは、コマンドライン・ユーティリティまたはVisual Basicアドインとして使用できます。ウィザードによって、COMインタフェースを使用してストアド・プロシージャにアクセスする全プロセスが自動化されるため、開発時間とプログラム・エラーの可能性が大幅に減少します。

注意:
コード・ウィザードにはVisual Basic 6が必要です。

内容は次のとおりです。

- Oracle Objects for OLEのコード・ウィザードのコンポーネント

- OO4Oコード・ウィザードでサポートされているデータ型

- OO4Oコード・ウィザードの使用方法

- コード・ウィザードの例

Oracle Objects for OLEのコード・ウィザードのコンポーネント

OO4Oコード・ウィザードには、次のコンポーネントが含まれます。

- コマンドライン・ユーティリティOO4OCodeWiz.exe。PL/SQLおよびJavaストアド・プロシージャをOO4Oコードに変換します。

- PL/SQLおよびJavaストアド・プロシージャ用のOO4Oコードを生成する一連の手順を示すVisual Basicアドイン・ウィザード。このウィザードは、ユーザーがコードを生成するアイテムを選択できるように、Oracleパッケージおよびストアド・プロシージャをツリー・コントロールから表示します。

これら両方のコンポーネントによって、ユーザーは、ストアド・プロシージャ・パッケージ全体をOO4Oコードに変換できます。

OO4Oコード・ウィザードでサポートされているデータ型

コード・ウィザードでは、PL/SQL表を除き、すべてのデータ型がサポートされています。PL/SQL表を使用する場合、unsupportedTypeというキーワードが使用され、生成されたコードはコンパイルされません。

NULL値を処理するために、出力コードを修正する必要があります。たとえば、VB変数をパラメータ値で初期化する際、NULL値の使用が予想される場合はisNull()チェックを追加する必要があります。VariantおよびObject型のVB変数でNULLが正常に処理されるようになります。

OO4Oコード・ウィザードの使用方法

OO4Oコード・ウィザードは、コマンドライン・ユーティリティまたはVisual Basicアドインとして使用できます。

OO4Oコード・ウィザードのコマンドライン・ユーティリティ

OO4OCodeWiz.exeは、Oracle Database内の既存のPL/SQLまたはJavaストアド・プロシージャおよびパッケージから、Visual Basicクラス、Visual BasicファイルまたはActive Server Page/VB Scriptファイルを生成するコマンドライン・ユーティリティです。このユーティリティは次のようにコールします。

OO4OCodeWiz [-o output_file] username/password@connect_string package

変数

指定内容

username

データベースへのログイン・ユーザー名

password

ユーザー名のパスワード

connect_string

データベース接続文字列

package

パッケージ名

stored_procedure

ストアド・プロシージャ名(オプション)

例

OO4OCodeWiz -o empfile.asp scott/tiger@Exampledb employee.example

オプション

オプション

説明

-o

出力ファイル名を指定します(オプション)。

生成ファイル

コード・ウィザードではコマンドラインで指定した情報を使用して、生成する出力ファイルのタイプを決定します。

ファイル名および使用可能ないずれかのファイル拡張子が指定されている場合は、それらが使用されます。前述の例では、empfile.asp出力でASPファイルが生成されます。ユーザーは、次の拡張子を指定できます。

拡張子

生成されるファイルのタイプ

.cls

VBクラス・ファイル

.bas

VBファイル

.asp

ASPまたはVBScriptファイル

.vbs

ASPまたはVBScriptファイル

ファイル拡張子が指定されていない場合、他のコマンドライン仕様に基づいて生成されるファイルのタイプは次の規則に従います。

- ストアド・プロシージャ名がないパッケージ名の場合は.clsファイルが生成されます。

- プロシージャ名があるパッケージ名の場合は.basファイルが生成されます。

表7-1および表7-2に例を示します。

表7-1 ストアド・プロシージャ名がないパッケージ名の場合

指定したファイル

コマンド

生成されるファイルのタイプ

ファイル拡張子のないファイル名を指定すると、filename.clsが生成されます。

OO4OCodeWiz -o empfile scott/tiger@Exampledb employee

empfile.cls

ファイル名も拡張子も指定しないと、packagename.clsが生成されます。

OO4OCodeWiz scott/tiger@Exampledb employee

employee.cls

ファイル拡張子付きのファイル名を指定すると、filename.fileextenが生成されます。

OO4OCodeWiz -o empfile.asp scott/tiger@Exampledb employee

empfile.asp

表7-2 ストアド・プロシージャ名があるパッケージ名の場合

指定したファイル

コマンド

生成されるファイルのタイプ

ファイル拡張子のないファイル名を指定すると、filename.basが生成されます。

OO4OCodeWiz -o empfile scott/tiger@Exampledb employee.example

empfile.bas

ファイル名も拡張子も指定しないと、packagename.basが生成されます。

OO4OCodeWiz scott/tiger@Exampledb employee.example

employee.bas

ファイル拡張子付きのファイル名を指定すると、filename.fileextenが生成されます。

OO4OCodeWiz -o empfile.asp scott/tiger@Exampledb employee.example

empfile.asp

OO4Oコード・ウィザードのVisual Basicウィザード・アドイン

1. Microsoft Visual Basicの「Add-Ins」メニューで「Oracle Code Wizard for Stored Procedures」を選択し、OO4Oコード・ウィザードを起動します。
「Connect To Oracle Database」ダイアログ・ボックスが表示されます。

2. データベースに接続するためのユーザー名とパスワードを入力します。ユーザーのローカル・コンピュータにデータベースがインストールされていない場合は、接続文字列が必要です。

3. 「OK」をクリックします。
ユーザーが使用可能なOracleパッケージおよびストアド・プロシージャがツリーに表示されます。

4. 表示されたストアド・プロシージャまたはパッケージの1つを選択します。

5. 出力ファイル名を入力するか、「Browse...」ボタンをクリックして、ファイルを配置する別のディレクトリに移動します。

6. 「Component type」リストからファイルのタイプを選択します。VBクラス・モジュール(*.cls)、VBファイル(*.bas)またはその他の3つの選択肢があります。その他(otherオプション)を選択した場合は、VBファイル(*.bas)が生成されますが、独自のファイル拡張子を指定できます。

7. 「OK」をクリックします。
新規のOO4Oファイルが作成されたことを知らせるダイアログ・ボックスが表示されます。

8. 「Yes」をクリックして別のファイルを作成するか、「No」をクリックしてVisual Basicに戻ります。

コード・ウィザードの例

ORACLE_BASE\\ORACLE_HOME\oo4o\codewiz\samplesディレクトリには、ウィザードで生成されたコードを組み込んだサンプル・アプリケーションがあります。次の各例では、OO4Oコード・ウィザードを使用してOracleストアド・プロシージャから生成されたVBコード出力を示します。

- Visual BasicおよびActive Server PagesによるPL/SQLストアド・ファンクションへのアクセス

- Visual Basicによる、LOB型を使用したPL/SQLストアド・プロシージャへのアクセス

- Visual Basicによる、VARRAY型を使用したPL/SQLストアド・プロシージャへのアクセス

- Visual Basicによる、Oracleオブジェクト型を使用したPL/SQLストアド・プロシージャへのアクセス

Visual BasicおよびActive Server PagesによるPL/SQLストアド・ファンクションへのアクセス

この例では、PL/SQLストアド・ファンクションGetEmpSal、およびこのストアド・ファンクションに対してコード・ウィザードで生成されるVisual Basicファイル(*.cls)を示します。

FUNCTION GetEmpSal (inEmpno IN NUMBER)
RETURN NUMBER is
outEmpsal NUMBER(7,2);
BEGIN
SELECT SAL into outEmpsal from EMP WHERE EMPNO = inEmpno;
RETURN (outEmpsal);
END;

GetEmpSalストアド・ファンクションに対して生成されるコードは次のようになります。

Public Function GETEMPSAL(INEMPNO As Variant) As Variant
OraDatabase.Parameters.Add "INEMPNO", INEMPNO, ORAPARM_INPUT, 2
OraDatabase.Parameters.Add "result", 0, ORAPARM_OUTPUT
OraDatabase.Parameters("result").serverType = 2
OraDatabase.ExecuteSQL ("declare result Number; Begin :result := " & _
"Employee.GETEMPSAL(:INEMPNO); end;")

OraDatabase.Parameters.Remove "INEMPNO"
GETEMPSAL = OraDatabase.Parameters("result").Value
OraDatabase.Parameters.Remove "result"
End Function

VBクラスでは、OraDatabaseはクラスの属性として表されます。この属性は、クラスのメソッドがコールされる前に設定する必要があります。VBファイル(*.bas)の場合、GetEmpSalストアド・ファンクションに対して生成されるコードは、関数の宣言を除き、VBクラス・ファイルの場合と同じです。

Public Function GETEMPSAL(INEMPNO As Variant, ByRef OraDatabase As OraDatabase)
...

End Function

ASPファイル(*.asp)の場合も、GetEmpSalストアド・ファンクションに対する関数の宣言が次のように異なりますが、コード本体は同じです。

Public Function GETEMPSAL(INEMPNO, ByRef OraDatabase)
...
End Function

Visual Basicによる、LOB型を使用したPL/SQLストアド・プロシージャへのアクセス

次の例では、Visual Basicファイルが、LOBを使用したPL/SQLストアド・プロシージャにアクセスする方法を示します。

PROCEDURE getchapter(chapno in NUMBER, chap out CLOB) is
BEGIN
SELECT chapters into chap from mybook where chapterno = chapno
for update;
END;

GETCHAPTERストアド・プロシージャに対して生成されるVisual Basicコードは次のようになります。

Public Sub GETCHAPTER(CHAPNO As Variant, ByRef CHAP As OraCLOB)
OraDatabase.Parameters.Add "CHAPNO", CHAPNO, ORAPARM_INPUT, 2
OraDatabase.Parameters.Add "CHAP", Null, ORAPARM_OUTPUT, 112
OraDatabase.ExecuteSQL ("Begin MYBOOKPKG.GETCHAPTER(:CHAPNO,:CHAP); end;")
Set CHAP = OraDatabase.Parameters("CHAP").Value
OraDatabase.Parameters.Remove "CHAPNO"
OraDatabase.Parameters.Remove "CHAP"
End Sub

Visual Basicによる、VARRAY型を使用したPL/SQLストアド・プロシージャへのアクセス

次の例では、PL/SQLストアド・プロシージャでOracleコレクション型のVARRAYを使用する方法を示します。

PROCEDURE getnames(deptid in NUMBER, name out ENAMELIST) is
BEGIN
SELECT ENAMES into name from department where dept_id = deptid for update;
END;

ウィザードでは、このストアド・プロシージャに対して次のVisual Basicコードが生成されます。

Public Sub GETNAMES(DEPTID As Variant, ByRef NAME As OraCollection)
OraDatabase.Parameters.Add "DEPTID", DEPTID, ORAPARM_INPUT, 2
OraDatabase.Parameters.Add "NAME", Null, ORAPARM_OUTPUT, 247, "ENAMELIST"
OraDatabase.ExecuteSQL ("Begin DEPTPKG.GETNAMES(:DEPTID, :NAME); end;")
Set NAME = OraDatabase.Parameters("NAME").Value
OraDatabase.Parameters.Remove "DEPTID"
OraDatabase.Parameters.Remove "NAME"
End Sub

Visual Basicによる、Oracleオブジェクト型を使用したPL/SQLストアド・プロシージャへのアクセス

次の例では、PL/SQLストアド・プロシージャでOracleオブジェクト型を使用する方法を示します。

PROCEDURE getaddress(person_name in varchar2, person_address out address) is
BEGIN
SELECT addr into person_address from person_table where name =
person_name for update;
END;

ウィザードでは、このストアド・プロシージャに対して次のVisual Basicコードが生成されます。

Public Sub GETADDRESS(PERSON_NAME As String, ByRef PERSON_ADDRESS As OraObject)
OraDatabase.Parameters.Add "PERSON_NAME", PERSON_NAME, ORAPARM_INPUT, 1
OraDatabase.Parameters.Add "PERSON_ADDRESS", Null, ORAPARM_OUTPUT, _
108, "ADDRESS"
OraDatabase.ExecuteSQL ("Begin PERSONPKG.GETADDRESS(:PERSON_NAME," & _
":PERSON_ADDRESS); end;")
Set PERSON_ADDRESS = OraDatabase.Parameters("PERSON_ADDRESS").Value
OraDatabase.Parameters.Remove "PERSON_NAME"
OraDatabase.Parameters.Remove "PERSON_ADDRESS"
End Sub

8 オートメーション・オブジェクトの紹介

この章では、一般的に使用されるOO4Oオートメーション・オブジェクトを紹介します。

内容は次のとおりです。

- オートメーション・オブジェクトの概要

- OraSessionオブジェクトの概要

- OraServerオブジェクトの概要

- OraDatabaseオブジェクトの概要

- OraDynasetオブジェクトの概要

- OraFieldオブジェクトの概要

- OraParametersオブジェクトの概要

- OraParameterオブジェクトの概要

- OraParamArrayオブジェクトの概要

- OraSQLStmtオブジェクトの概要

オートメーション・オブジェクトの概要

OO4Oにおけるオブジェクト操作上の階層は、「持つもの」と「属するもの」との関連を示します。

図8-1に、この操作上の階層を示します。

図8-1 OO4Oオートメーション・オブジェクト

前述のオートメーション・オブジェクト・ダイアグラムは、この階層を示しています。

OraSessionオブジェクトの概要

OO4Oオートメーション・サーバーのインスタンスが作成されると、OraSessionオブジェクトが戻されます。主としてOracleデータベースへの接続を確立するためのインタフェースを提供します。また、これには、作成したOraDatabaseオブジェクト内の接続についての開始、コミットおよび取消しトランザクションに対するメソッドが含まれています。次のVisual Basicの例では、OO4Oオートメーション・サーバーのインスタンスを作成します。

'OracleInProcServer.XOraSession is the symbolic name for a
'globally unique component identifier.
Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")

関連項目:

- OraSessionオブジェクト

- Oracle Objects for OLEオートメーション・サーバーへのアクセス

- Oracle Databaseへの接続

OraServerオブジェクトの概要

OraServerオブジェクトは、Oracle Databaseインスタンスへの物理的な接続を表します。これは、OraDatabaseオブジェクトを表す、ユーザー・セッション作成用のOpenDatabaseメソッドを提供します。これにより、「接続多重化」が可能になります。

関連項目:

- OraServerオブジェクト

- Oracle Objects for OLEオートメーション・サーバーへのアクセス

- OraServerを使用した接続多重化

OraDatabaseオブジェクトの概要

OraDatabaseオブジェクトは、Oracleデータベース・インスタンスへのユーザー接続を表し、SQL文とPL/SQLコードを実行するためのメソッドを提供します。OraDatabaseオブジェクトは、OraSessionまたはOraServerオブジェクトのOpenDatabaseメソッドによって戻されます。

次に、OraSessionのOpenDatabaseメソッドの使用例を示します。このメソッドで作成したOraDatabaseオブジェクトには、Oracleデータベースへの個別の物理接続が含まれています。

'Establish a connection to the ExampleDb database
Set hrDBSession = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

次の例では、Oracleデータベースへの物理的なネットワークの接続を複数のユーザー・セッションで共有する方法を示します。複数のユーザー・セッションが共有する単一の接続を使用すると、Oracle Databaseのリソース使用量が削減され、拡張性が向上します。

'Create a server connection

Set hrDBServer = CreateObject("OracleInProcServer.XOraServer")
Set hrDBServer = oo4o.Open("ExampleDb")
Set userSession1 = hrDBServer.OpenDatabase("scott/tiger", 0)

'execute queries ...
Set userSession2= hrDBServer.OpenDatabase("scott/tiger", 0)

'execute queries ...

関連項目:
OraDatabaseオブジェクト

OraDynasetオブジェクトの概要

OraDynasetオブジェクトは、SQL SELECT問合せの結果セットまたはストアド・プロシージャやファンクションから戻ったPL/SQLカーソル変数を表します。このオブジェクトは本来、クライアント側でスクロールおよび更新できるカーソルで、実行した問合せで生成された行セットを参照できます。これは、OraDatabaseインタフェースのCreateDynasetメソッドまたはCreateCustomDynasetメソッドで作成されます。

次のVisual Basicの例では、問合せを実行し、結果セット全体をループして戻った列の値を表示します。

Set employees = OraDatabase.CreateDynaset("select empno, ename from emp", 0&)

'While there are more rows
while not employees.EOF

'Display the values of empno and ename column of the current row
msgbox employees("empno") & employees("ename")

'Move to the next row
employees.MoveNext
wend

関連項目:

- OraDynasetオブジェクト

- CreateCustomDynasetメソッド

- CreateDynasetメソッド

OraFieldオブジェクトの概要

OraFieldオブジェクトは、OraDynasetオブジェクトの列を抽象化したものです。これには、ダイナセット内の現在の行の列を示す値とメタデータが含まれています。前のOraDynasetオブジェクトの例では、この追加コードを使用して、empnoに対するFieldインタフェースを取得できます。

set empno = employees.Fields("empno")
msgbox "Employee Number: " & empno.Value

OraFieldsは、現在の行にあるすべての列を示すコレクション・オブジェクトです。

OraFieldオブジェクトは、Oracle Databaseがサポートするすべてのデータ型のインスタンスを示すことができます。これには、VARCHAR2、NUMBER、INTおよびFLOATなどの基本的な型に加え、Oracle8iで導入されたすべてのオブジェクト・リレーショナル型も含まれます。

関連項目:

- OraFieldオブジェクト

- Oracleオブジェクト・リレーショナルとLOBデータ型のサポート

OraParametersオブジェクトの概要

OraParametersオブジェクトは、OraParameterオブジェクトに対するコレクション・コンテナです。OraParameterオブジェクトは、実行時にSQL文またはPL/SQLブロックで使用するプレースホルダに対してデータ値を提供するために使用されます。入力値を提供するため、さらにデータベースからの戻り値を包含するために使用することもできます。次のサンプルでは、2つのパラメータ・オブジェクトを作成して更新問合せで使用します。

OraDatabase.Parameters.Add "SALARY", 4000, ORAPARM_INPUT
OraDatabase.Parameters.Add "ENAME", "JONES", ORAPARM_INPUT
Set updateStmt = OraDatabase.CreateSQL("update emp set sal = :SALARY" & _
"where ename = :ENAME ")

関連項目:
OraParametersコレクション

OraParameterオブジェクトの概要

OraParameterオブジェクトには、オブジェクト・リレーショナル・データ型も含めて、Oracle9iがサポートする全データ型の値を含めることができます。これらのデータ型は、PL/SQLのストアド・プロシージャとファンクションに対する入力または出力引数としてパスできます。OraParameterオブジェクトの値は、OraDynasetオブジェクトのフォーム内のPL/SQLカーソルを示すこともできます。

関連項目:

- OraParameterオブジェクト

- PL/SQLのサポート

OraParamArrayオブジェクトの概要

OraParamArrayオブジェクトは、値の配列をバインドおよびフェッチするメカニズムを提供します。通常は、挿入と更新を一括して実行するために使用します。

'Create a table
OraDatabase.ExecuteSQL ("create table part_nos(partno number," & _
"description char(50), primary key(partno))")

'Create two parameter arrays of size 10 to hold values for
'part numbers (size 22 bytes), and their description (50 bytes long).
OraDatabase.Parameters.AddTable "PARTNO", ORAPARM_INPUT, ORATYPE_NUMBER, 10, 22
OraDatabase.Parameters.AddTable "DESCRIPTION", ORAPARM_INPUT, _
ORATYPE_CHAR, 10, 50

'Initialize the arrays
For I = 0 To 10
OraDatabase.Parameters("PARTNO").put_Value = I, I
OraDatabase.Parameters("DESCRIPTION ") = "some description", I
Next I

'Execute the query
Set OraSqlStmt = OraDatabase.CreateSql("insert into " & _
"part_nos(partno, description) values(:PARTNO,:DESCRIPTION)", 0&)

関連項目:
OraParamArrayオブジェクト

OraSQLStmtオブジェクトの概要

OraSQLStmtオブジェクトは、通常、SELECT以外のSQL問合せやPL/SQLブロックを実行するために使用されます。次のコード例では、更新問合せを実行し、反映された行数を表示します。

Set updateStmt = OraDatabase.CreateSQL("update emp set sal = 3000" & _
"where ename = 'JONES' ")
MsgBox updateStmt.RecordCount

後でOraSQLStmtオブジェクト(updateStmt)を使用することで、:SALARYプレースホルダに別の値を使用して前の問合せを実行できます。次に、例を示します。

OraDatabase.Parameters("SALARY").value = 200000
updateStmt.Parameters("ENAME").value = "KING"
updateStmt.Refresh

関連項目:
OraSQLStmtオブジェクト

9 サーバー・オブジェクト

この章では、Oracle Objects for OLEのサーバー・オブジェクトについて説明します。

関連項目:

- Oracle Objects for OLEの概要

- Oracle Objects for OLEインプロセス・オートメーション・サーバー

- オートメーション・クライアントの使用に関する概要

- 必要な設定

内容は次のとおりです。

- OraAQオブジェクト

- OraAQAgentオブジェクト

- OraAQMsgオブジェクト

- OraAttributeオブジェクト

- OraBFILEオブジェクト

- OraBLOB、OraCLOBオブジェクト

- OraClientオブジェクト

- OraCollectionオブジェクト

- OraConnectionオブジェクト

- OraDatabaseオブジェクト

- OraDynasetオブジェクト

- OraFieldオブジェクト

- OraIntervalDSオブジェクト

- OraIntervalYMオブジェクト

- OraMDAttributeオブジェクト

- OraMetaDataオブジェクト

- OraNumberオブジェクト

- OraObjectオブジェクト

- OraParamArrayオブジェクト

- OraParameterオブジェクト

- OraRefオブジェクト

- OraServerオブジェクト

- OraSessionオブジェクト

- OraSQLStmtオブジェクト

- OraSubscriptionオブジェクト

- OraTimeStampオブジェクト

- OraTimeStampTZオブジェクト

- OraConnectionsコレクション

- OraFieldsコレクション

- OraParametersコレクション

- OraSessionsコレクション

- OraSubscriptionsコレクション

OraAQオブジェクト

説明

OraAQオブジェクトは、OraDatabaseインタフェースのCreateAQメソッドを起動してインスタンス化します。このオブジェクトは、データベース内にあるキューを表します。

備考

Oracle Objects for OLEは、Oracle Database Advanced Queuing(AQ)機能にアクセスするインタフェースを提供します。これによって、Visual Basicなどの一般的なCOMベースの開発環境からAQ機能にアクセスできます。

OraAQオートメーション・インタフェースは、(OraAQMsgオブジェクトにカプセル化された)メッセージをエンキューおよびデキューするメソッドを提供します。着信メッセージのキューを監視するメソッドも提供します。

クライアント・アプリケーションは、モニターのDispatchインタフェースを提供します。モニターは、キューで、アプリケーション条件に一致したメッセージを確認します。それは次に、そのようなメッセージがデキューされるときにDispatchインタフェースのNotifyMeメソッドを起動します。

次の図は、OO4O AQオートメーション・オブジェクトとそのプロパティを示したものです。

プロパティ

- Consumer(OraAQ)プロパティ

- Correlate(OraAQ)プロパティ

- DequeueMode(OraAQ)プロパティ

- DequeueMsgId(OraAQ)プロパティ

- Navigation(OraAQ)プロパティ

- RelMsgId(OraAQ)プロパティ

- Visible(OraAQ)プロパティ

- Wait(OraAQ)プロパティ

メソッド

- AQMsg(OraAQ)メソッド

- Enqueue(OraAQ)メソッド

- Dequeue(OraAQ)メソッド

- MonitorStart(OraAQ)メソッド

- MonitorStop(OraAQ)メソッド

例

例: メッセージのエンキュー

RAW型のメッセージのエンキュー

「RAW型のメッセージのエンキュー」

Oracleオブジェクト型のメッセージのエンキュー

「Oracleオブジェクト型のメッセージのエンキュー」

例: メッセージのデキュー

注意: 次のサンプル・コードは、メッセージ・デキューの標準的な例です。

完全なAQサンプルは、\OO4O\VB\SAMPLES\AQにあります。

RAW型のメッセージのデキュー

「例: RAW型のメッセージのデキュー」

Oracleオブジェクト型のメッセージのデキュー

「例: Oracleオブジェクト型のメッセージのデキュー」

例: メッセージの監視

MonitorStartとMonitorStopメソッドの使用例は、「メッセージの監視」を参照してください。

関連項目:

- OraAQAgentオブジェクト

- OraAQMsgオブジェクト

- Oracleのアドバンスト・キューイングの詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。

OraAQAgentオブジェクト

説明

OraAQAgentは、メッセージ受信者を表すオブジェクトで、複数のコンシューマを許可するキューに対してのみ有効です。

備考

OraAQAgentオブジェクトは、AQAgentメソッドをコールすることによってインスタンス化できます。次に、例を示します。

Set agent = qMsg.AQAgent(name)

メソッド

なし

プロパティ

- Address(OraAQAgent)プロパティ

- Name(AQAgent)プロパティ

例

次のVisual Basicの例は、アドバンスト・キューイング機能の簡単な使用例です。ユーザー定義型のメッセージMESSAGE_TYPEが、複数のコンシューマをサポートするキューmsg_queueにエンキューされています。

Dim q as OraAQ
Dim qMsg as OraAQMsg
Dim agent as OraAQAgent
Set q = OraDatabase.CreateAQ("msg_queue")
Set qMsg = q.AQMsg(1,"MESSAGE_TYPE")

'To add SCOTT as a recipient for the message,
Set agent = qMsg.AQAgent("SCOTT")

'To enqueue,
q.Enqueue

関連項目:

- Oracleのアドバンスト・キューイングの詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。

- OraAQオブジェクト

- OraAQMsgオブジェクト

OraAQMsgオブジェクト

説明

OraAQMsgオブジェクトは、エンキューまたはデキューされたメッセージをカプセル化します。メッセージは、ユーザー定義型またはRAW型にできます。

プロパティ

- Correlation(OraAQMsg)プロパティ

- Delay(OraAQMsg)プロパティ

- ExceptionQueueプロパティ

- Expiration(OraAQMsg)プロパティ

- Priority(OraAQMsg)プロパティ

- Value(OraAQMsg)プロパティ

メソッド

- AQAgent(OraAQMsg)メソッド

関連項目:

- Oracleのアドバンスト・キューイングの詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。

- OraAQオブジェクト

- OraAQAgentオブジェクト

OraAttributeオブジェクト

説明

OraAttributeオブジェクトは、OraObjectまたはOraRefのValueまたはREFインスタンスの属性を表します。

備考

OraAttributeオブジェクトは、順序を示す整数を使用する添字を作成するか、または名前属性を使用することによって、OraObjectまたはOraRefオブジェクトからアクセスできます。

OraAttributeオブジェクトのValueプロパティの属性の型および戻り値を識別する表は、Value(OraAttribute)プロパティを参照してください。

プロパティ

- Value(OraAttribute)プロパティ

- Name(OraAttribute)プロパティ

- Type(OraAttribute)プロパティ

メソッド

なし

例

次の例では、サーバー内のADDRESS値インスタンスの属性にアクセスします。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim Address As OraObject
Dim City As OraAttribute
Dim State As OraAttribute

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from person_tab
Set OraDynaset = OraDatabase.CreateDynaset("select * from person_tab", 0&)

'retrieve an address column from person_tab
'the Value property of OraField object returns Address OraObject
Set Address = OraDynaset.Fields("Addr").Value

'access the City attribute object
Set City = Address("City")

' display the value of City attribute Object
MsgBox City.Value

'access the State attribute object
Set State = Address("State")

'display the value of State attribute Object
MsgBox State.Value

関連項目:

- OraCollectionオブジェクト

- OraParameterオブジェクト

- OraObjectオブジェクト

- OraRefオブジェクト

OraBFILEオブジェクト

説明

OO4OのOraBFileインタフェースは、データベース内のBFILE LOBデータ型に関する操作を実行するメソッドを提供します。

備考

BFILE型は、データベース表領域以外のオペレーティング・システム・ファイル(外部ファイル)として格納されるラージ・バイナリ・データのオブジェクトです。

プロパティ

- DirectoryNameプロパティ

- FileNameプロパティ

- Existsプロパティ

- IsNull(OraLOB/BFILE)プロパティ

- IsOpen(OraBFILE)プロパティ

- Offset(OraLOB/BFILE)プロパティ

- PollingAmountプロパティ

- Size(OraLOBおよびOraBFILE)プロパティ

- Status(OraLOB/BFILE)プロパティ

メソッド

- Clone(OraLOB/BFILE)メソッド

- Close(OraBFILE)メソッド

- CloseAll(OraBFILE)メソッド

- Compare(OraLOB)メソッド

- CopyToFile(OraLOB/BFILE)メソッド

- MatchPos(OraLOB/BFILE)メソッド

- Open(OraBFILE)メソッド

- Read(OraLOB/BFILE)メソッド

例

OraLOB/BFILEの例で使用されているスキーマ・オブジェクトについては、「LOBデータ型の例で使用されているスキーマ・オブジェクト」を参照してください。

注意: 次の例に必要な表を追加するには、\OO4O\VB\SAMPLES\LOBディレクトリにあるlob.sqlファイルを実行してください。

例: BFILE値へのアクセス

BFILEデータは、Readメソッドを使用して読み込むことができます。OraBFILEオブジェクトでは、ピース単位の読取り操作が可能です。BFILEの内容を読み込むには、Openメソッドを使用してBFILEファイルをオープンする必要があります。

Dim PartColl as OraBFile
Dim buffer As Variant

'Create a Dynaset containing a BLOB and a CLOB column
set part = OraDatabase.CreateDynaset ("select * from part",0)
Set PartColl = part.Fields("part_collateral").Value

'open the bfile for read operation
PartColl.Open

'read the entire bfile
amount_read = PartColl.Read(buffer)

'close the bfile
PartColl.Close

例: ダイナセットを使用したBFILEの読取りと挿入

OraBFILEオブジェクトのBFILE値のディレクトリ名とファイル名を変更するには、最初にロックを取得してから、DirectoryNameプロパティとFileNameプロパティを使用します。

BFILE列を含んだ新しい行を挿入するには、DirectoryNameプロパティとFileNameプロパティを使用して、そのBFILE列を新しいディレクトリ名とファイル名の値で初期化します。

Dim PartColl as OraBFile
Dim buffer As Variant

'Create a Dynaset containing a BLOB and a CLOB column
set part = OraDatabase.CreateDynaset ("select * from part",0)
Set PartColl = part.Fields("part_collateral").Value

'insert a new BFILE in the part_collateral column
part.AddNew

'Directory objects will be upper-case by default
PartColl.DirectoryName = "NEWDIRECTORYNAME"
PartColl.FileName = "NewPartCollatoral"
part.Update

'move to the newly added row
part.MoveLast

'open the Bfile for read operation
PartColl.Open

'read the entire bfile
amount_read = PartColl.Read(buffer)

'close the Bfile
PartColl.Close

関連項目:

- OraBLOB、OraCLOBオブジェクト

- Oracle BFILE型の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

OraBLOB、OraCLOBオブジェクト

説明

OO4OのOraBLOBとOraCLOBインタフェースは、データベース内のラージ・オブジェクト・データ型BLOB、CLOBおよびNCLOBに関する操作を実行するメソッドを提供します。このマニュアルでは、BLOB、CLOBおよびNCLOBのデータ型をLOBデータ型とも呼びます。

OO4Oでは、一時BLOBまたはCLOB型の作成をサポートしています。これらの型を操作してSQL文やPL/SQLブロックにバインドしたり、永続LOBにコピーできます。

備考

LOBデータへのアクセスには、ReadおよびCopyToFileメソッドを使用します。

LOBデータの変更には、Write、Append、Erase、Trim、Copy、CopyFromFileおよびCopyFromBFileメソッドを使用します。行にあるLOB列のデータを変更するには、その前に行ロックを取得する必要があります。LOB列がOraDynasetオブジェクトのフィールドである場合は、Editメソッドをコールしてロックを取得します。

NULLのLOBで許可されるLOB操作はありません。エラーを回避するには、IsNullプロパティを使用してNULLのLOBを検出します。NULLのLOBで書込み操作を実行するには、最初にLOB列を空の値で初期化しておく必要があります。

LOB列を持つ新しい行を挿入するには、まず、OraFieldまたはOraParameterオブジェクトのValueプロパティにキーワードのEmptyを設定することで、そのLOB列をEmpty値で初期化し、データベースへの変更をコミットします。新しく更新したEmptyのLOBは、使用する前にデータベースから再問合せする必要があります。これは、OraDynasetオブジェクトの場合は自動的に行われます(OraDynasetオブジェクトのLOBフィールドにEmptyが設定され、Updateメソッドがコールされると、後続する書込み操作で使用するために、OO4Oがダイナセット内のEmptyのLOBを自動的に再問合せします)。

LOBの読取りおよび書込み操作には、2つの操作モードがあります。

1. 複数ピースの読取り/書込み操作
このモードでは、読込みまたは書込みデータの合計量が、1回の読取り/書込み操作でのバッファのサイズを超えます。操作ごとに1回のラウンドトリップを行うのではなく、ピースはストリーム化されます。複数ピース操作を開始するために、まず、PollingAmountプロパティが読取りまたは書込みデータの合計量に設定されます。このとき、Offsetプロパティは、最初のピースの読取り/書込み操作の初期オフセットを指定するように設定されます。オフセットは、最初の読取り/書込み操作の後に自動的に増分され、複数ピース操作が完了するまで再び変更できません。ピース単位の各操作が正常に終了したことをStatusプロパティで確認する必要があり、すべてのピースが読取りまたは書込みされるまで操作を続ける必要があります(これは中止できません)。同じLOBで別の複数ピース読取り/書込み操作を開始するには、PollingAmountプロパティに目的の量を再度設定する必要があります。「例: LOBの複数ピース読取り」を参照してください。

2. 単一ピースの読取り/書込み操作
このモードでは、データの読取りと書込みが1回の操作で発生します。このモードは、PollingAmountプロパティを0に設定すると使用可能になります。「例: LOBの単一ピース読取り」を参照してください。

両方の操作モードとも、Offsetプロパティは、1を基準とします。

仕様により、LOBは、SELECT .. FOR UPDATE、INSERTおよびUPDATE文によって開始された複数のトランザクションをまたぐことはできません。これらのSQL文を使用してLOB値を選択または変更すると、現行のトランザクション外では、LOBが無効になります。Oracle Objects for OLEでは、トランザクションは次の方法で開始および終了できます。

1. Dynaset Edit/Updateメソッド
EditメソッドはSELECT FOR UPDATE文を実行し、行をロックしてトランザクションを開始します。Updateメソッドはトランザクションを終了します。LOB列の値がEditとUpdateのペアの間で変更された場合、OO4Oは、Updateコールの後でLOB列の値を再選択します。この再選択は、ユーザーに対して透過的に実行されます。LOBがOracleオブジェクト・インスタンスの属性またはOracleコレクションの要素である場合、OO4OはLOB値の再選択を実行しません。トランザクションがOraSession/OraDatabaseまたはOraServerオブジェクトで開始され、LOBデータがEditメソッドとUpdateメソッドの間で変更された場合、OO4OはデータベースからLOB値を再選択しません。LOBが無効となるのは、OraSession/OraDatabaseまたはOraServerオブジェクトで開始されたトランザクションをコミットした後です。

「例: LOBを含むダイナセットとトランザクション」を参照してください。

2. ExecuteSQLまたはCreateSQLメソッドを介したINSERTまたはUPDATE文の実行
トランザクションは、INSERTまたはUPDATE文によって開始され、Oracle Objects for OLE(自動コミット)によって暗黙的に終了されます。RETURNING .. INTO句の場合と同様に、文にLOBの出力バインド・パラメータがある場合、ExecuteSQLメソッドまたはCreateSQLメソッドが実行された後にそれは無効になるため、これを避けるには、ユーザーは、OraSession、OraServerまたはOraDatabaseオブジェクトのBeginTrans/CommitTransのペア間でこのような文を実行する必要があります。

「例: LOBを使用するINSERTまたはUPDATE文とトランザクション」を参照してください。

関連項目:

- LOBの操作とパフォーマンスに関する問題の詳細は、「例: ラージ・オブジェクト(LOB)の使用」を参照してください。

- Oracle LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

プロパティ

- IsNull(OraLOB/BFILE)プロパティ

- PollingAmountプロパティ

- Offset(OraLOB/BFILE)プロパティ

- Size(OraLOBおよびOraBFILE)プロパティ

- Status(OraLOB/BFILE)プロパティ

メソッド

- Append(OraLOB)メソッド

- Clone(OraLOB/BFILE)メソッド

- Compare(OraLOB)メソッド

- Copy(OraLOB)メソッド

- CopyFromFile(OraLOB)メソッド

- CopyFromBFILE(OraLOB)メソッド

- CopyToFile(OraLOB/BFILE)メソッド

- DisableBuffering(OraLOB)メソッド

- EnableBuffering(OraLOB)メソッド

- Erase(OraLOB)メソッド

- FlushBuffer(OraLOB)メソッド

- MatchPos(OraLOB/BFILE)メソッド

- Read(OraLOB/BFILE)メソッド

- Trim(OraLOB)メソッド

- Write(OraLOB)メソッド

例

OraLOBとBFILEの例で使用されているスキーマ・オブジェクトについては、「LOBデータ型の例で使用されているスキーマ・オブジェクト」を参照してください。

例: LOB値へのアクセス

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim PartImage as OraBlob
Dim buffer As Variant

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", _
"scott/tiger", 0&)

'execute the select statement
set OraDynaset = OraDatabase.CreateDynaset ("select * from part",0&)

'retrieve photo field from the dynaset
set PartImage = OraDynaset.Fields("part_image").Value

'read the entire LOB column in one piece into the buffer
amount_read = PartImage.Read(buffer, 10)
'use the buffer for internal processing

例: LOB値の変更

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim  PartDesc as OraClob
Dim buffer As String

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb","scott/tiger", 0&)

'execute the select statement
set OraDynaset = OraDatabase.CreateDynaset ("select * from part",0&)
set PartDesc = OraDynaset.Fields("part_desc").Value

'To get a free file number
FNum = FreeFile
'Open the file for reading
Open "partdesc.dat" For Binary As #FNum

'Allocate buffer to the size of file FNum and read the entire file
buffer = String$(LOF(FNum), 32)
Get #FNum, , buffer

'lock the row for write operation
OraDynaset.Edit
amount_written = PartDesc.Write(buffer)

'commit the operation and release the lock
OraDynaset.Update
Close FNum

例: ダイナセットを使用したLOBの挿入

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim Part As OraDynaset
Dim PartImage as OraBLOB
Dim ImageChunk() As Byte
Dim amount_written As Long

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create a Dynaset containing a BLOB and a CLOB column

set part = OraDatabase.CreateDynaset ("select * from part",0)
set PartImage = part.Fields("part_image").Value

'First insert Empty LOB in the part_image column
part.AddNew
part.Fields("part_id").Value = 1234
part.Fields("part_image").Value = Empty
part.Update

'move to the newly added row
Part.MoveLast

'To get a free file number
FNum = FreeFile

'Open the file for reading PartImages
Open "part_picture.gif" For Binary As #FNum

'Re adjust the buffer size to hold entire file data

Redim ImageChunk(LOF(FNum))

'read the entire file and put it into buffer
Get #FNum, , ImageChunk

'call dynaset's Edit method to lock the row
part.Edit
amount_written = OraBlob.Write(ImageChunk)
part.Update

'close the file
Close FNum

例: OraParameterオブジェクトを使用したLOBの挿入

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraBlob As OraBlob
Dim ImageChunk() As Byte
Dim amount_written As Long

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)
Set OraParameters = OraDatabase.Parameters
OraParameters.Add "PartImage", Empty,ORAPARM_OUTPUT
OraParameters("PartImage").ServerType = ORATYPE_BLOB

'BeginTrans needs to be called since LOB locators become
'invalid after the ExecuteSQL call
OraSession.BeginTrans
OraDatabase.ExecuteSQL ("insert into part values (1234,'Oracle  Application'," & _
"EMPTY_BLOB(),NULL,NULL) RETURNING part_image INTO :PartImage")
set PartImage = OraDatabase.Parameters("PARTIMAGE").Value

FNum = FreeFile
'Open the file for reading PartImages
Open "part_picture.gif" For Binary As #FNum

'read the file and put it into buffer
Redim ImageChunk(LOF(FNum))
Get #FNum, , ImageChunk

Set OraBlob = OraDatabase.Parameters("PartImage").Value
amount_written = OraBlob.Write(ImageChunk, 10, ORALOB_ONE_PIECE)

' commit the transaction and close the file
OraSession.CommitTrans
Close FNum

例: LOBを含むダイナセットとトランザクション

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraBlob As OraBlob
Dim PartImage as OraBLOB
Dim ImageChunk() As Byte
Dim amount_written As Long

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb",  "scott/tiger", 0&)

'Create a Dynaset containing a BLOB and a CLOB column
set part = OraDatabase.CreateDynaset ("select * from part " & _
"where part_id = 1234",0)
set PartImage = part.Fields("part_image").Value

'To get a free file number
FNum = FreeFile

'Open the file for reading PartImages
Open "c:\part_picture.gif" For Binary As #FNum
Redim ImageChunk(LOF(FNum))

'read the file and put it into buffer
Get #FNum, , ImageChunk

'starts the transaction on OraSession
OraSession.BeginTrans

'call dynaset's Edit method to lock the row
part.Edit
Set OraBlob = PartImage
amount_written = OraBlob.Write(ImageChunk, 10, ORALOB_ONE_PIECE)
part.Update

'ends the transaction
OraSession.CommitTrans

'the following lines of code will raise error
'LOB locator cannot span transaction'
msgbox Partimage.Size
Close FNum

例: LOBを使用するINSERTまたはUPDATE文とトランザクション

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim ImageChunk() As Byte
Dim amount_written As Long

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

Set OraParameters = OraDatabase.Parameters
OraParameters.Add "PartImage", Empty,ORAPARM_OUTPUT
OraParameters("PartImage").ServerType = ORATYPE_BLOB

'Create a Dynaset containing a LOB,column
OraDatabase.ExecuteSQL ("insert into part values (1234,'Oracle Application'," & _
"EMPTY_BLOB(),NULL,NULL) RETURNING part_image INTO :PartImage")
set PartImage = OraDatabase.Parameters("PARTIMAGE").Value

'the following lines of code will raise error
'LOB locator cannot span transaction'
msgbox Partimage.Size

例: CopyToFileメソッドの使用方法

「例: CopyToFileメソッドの使用方法」を参照してください。

例: CopyFromFileメソッドの使用方法

「例: CopyFromFileメソッドの使用方法」を参照してください。

例: LOBの複数ピース読取り

「例: LOBの複数ピース読取り」を参照してください。

例: LOBの単一ピース読取り

「例: LOBの単一ピース読取り」を参照してください。

例: LOBの複数ピース書込み

「例: LOBの複数ピース書込み」を参照してください。

例: LOBの単一ピース書込み

「例: LOBの単一ピース書込み」を参照してください。

例: 一時CLOBをストアド・プロシージャに渡す方法

「例: 一時CLOBをストアド・プロシージャに渡す方法」を参照してください。

関連項目:

- OraBFILEオブジェクト

- CreateTempBLOB/CLOBメソッド

OraClientオブジェクト

説明

OraClientオブジェクトはワークステーションのドメインを定義します。このワークステーションのすべてのOraSessionオブジェクトは、OraClientオブジェクトのOraSessionsコレクションにリストされます。

備考

各ワークステーションに存在するOraClientオブジェクトは1つのみで、必要な場合はシステムによって自動的に作成されます。

プロパティ

- Nameプロパティ

- Sessionsプロパティ

メソッド

- CreateSessionメソッド

関連項目:

- OraSessionオブジェクト

- OraSessionsコレクション

OraCollectionオブジェクト

説明

OraCollectionインタフェースは、可変長配列(VARRAY)やネストした表などのOracleコレクション型を表します。

備考

コレクションとは、すべて同じ型の要素が順序付けされたグループです。たとえば、クラス内の生徒またはクラス内の各生徒に対する評価などが考えられます。各要素には、索引と呼ばれる固有の添字があり、コレクション内の位置を判断します。

ネストした表のコレクション型は、データベース表の列に格納された表として参照できます。ネストした表の行は、1で始まる連続した添字が割り当てられて取り出されます。配列にアクセスする要領で、個々の行にアクセスして取り出します。

VARRAYのコレクション型は、データベース表の列に格納された配列として参照できます。VARRAYデータ型の要素を参照するには、標準的な添字構文を使用できます。たとえば、Grade(3)は、Gradesという名前のVARRAYデータ型の3番目の要素を参照します。

OraCollectionは、Oracleコレクションにアクセスして操作するメソッドを提供します。OraCollectionオブジェクトには、Oracleコレクションの個々の要素にアクセスして操作(更新と挿入)するOLEオートメーション・コレクション・インタフェースが暗黙的に含まれます。添字を使用して、個々の要素にアクセスできます。OraCollection要素の索引は1から開始します。

要素の値は、Variant型として取り出されます。要素のVariant型は、コレクションの要素の型によって決まります。要素の値にはNULLを使用でき、NULLを設定できます。オブジェクト型およびREFの要素の場合は、要素の値が、その型に対応するOO4Oオブジェクトとして戻されます。VARRAYおよびネストした表は、LOB、VARRAYおよびネストした表の要素をサポートしません。

表9-1に、要素の型とその要素の戻り値を示します。

表9-1 要素の型と要素の戻り値

要素の型

要素の値

Object

OraObject

REF

OraRef

Date

String

Number

String

CHAR、VARCHAR2

String

Real

Real

Integer

Integer

要素の値は、SafeArrayプロパティを使用して、Variant型のSAFEARRAY形式に変換されます。サポートの対象は、基本的な型の要素のみです。Variant型SAFEARRAYの索引は0から開始します。

OraDatabaseオブジェクトのCreateOraObjectメソッドは、OraCollectionオブジェクトを戻します。このOraCollectionオブジェクトに関連付けられたOracleコレクションは、クライアント側のオブジェクト・キャッシュに作成されます。

コレクションからダイナセットを作成する方法については、「OraCollectionオブジェクトからのダイナセットの作成」を参照してください。

プロパティ

- BOCプロパティ

- ElementTypeプロパティ

- EOCプロパティ

- IsLocator(OraCollection)プロパティ

- IsNull(OraCollection)プロパティ

- MaxSize(OraCollection)プロパティ

- SafeArray(OraCollection)プロパティ

- Size(OraCollection)プロパティ

- TableSize(OraCollection)プロパティ

- Type(OraCollection)プロパティ

メソッド

- Append(OraCollection)メソッド

- Clone(OraCollection)メソッド

- CreateIteratorメソッド

- Delete(OraCollection)メソッド

- DeleteIteratorメソッド

- ElementValueメソッド

- Exist(OraCollection)メソッド

- InitIteratorメソッド

- IterNextメソッド

- IterPrevメソッド

- Trim(OraCollection)メソッド

例

サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。OraCollectionの例で使用されているスキーマ・オブジェクトについては、「OraCollectionの例で使用されているスキーマ・オブジェクト」を参照してください。

例: コレクション要素へのアクセス

次の例では、コレクション要素へのアクセス方法を示します。

OraDynasetの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim EnameList as OraCollection

'create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb","scott/tiger", 0&)

'create a dynaset object from department
set OraDynaset = OraDatabase.CreateDynaset("select * from department", 0&)

'retrieve a Enames column from Department.
'Here Value property of OraField object returns EnameList OraCollection
set EnameList = OraDynaset.Fields("Enames").Value

'access the first element of EnameList
msgbox  EnameList(1)

'move to next to row
OraDynaset.MoveNext

'access all the elements of EnameList for the second row
For index = 1 To EnameList.Size
msgbox EnameList(index)
Next Index

OraParameterの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim EnameList as OraCollection

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create an  OraParameter object representing EnameList collection bind Variable
OraDatabase.Parameters.Add "ENAMES", Null, ORAPARM_OUTPUT, _
ORATYPE_VARRAY,"ENAMELIST"

'execute the sql statement which selects ENAMES VARRAY  from the department  table

OraDatabase.ExecuteSQL ("BEGIN select enames  into :ENAMES  from department " & _
"where  dept_id = 10;  END;")

'get the EnameList collection  from OraParameter
set EnameList = OraDatabase.Parameters("ENAMES").Value

'access all the elements of EnameList
For index = 1 To EnameList.Size
msgbox EnameList(index)
Next Index

例: コレクション要素の変更

次の例では、コレクション要素の変更方法を示します。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim EnameList as OraCollection

'create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from department
set OraDynaset = OraDatabase.CreateDynaset("select * from department", 0&)

'retrieve a Enames column from Department. Here Value property of OraField object
'returns EnameList OraCollection

set EnameList = OraDynaset.Fields("Enames").Value

'lock the row for editing and set the 2nd element of the EnameList to new value
OraDynaset.Edit
EnameList(2) = "Eric"
OraDynaset.Update

例: コレクションへの挿入

次の例では、要素をOracleコレクションに挿入する方法を示します。

OraDynasetの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim EnameListNew as OraCollection

'create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a new OraCollection object from the database
set EnameListNew = OraDatabase.CreateOraObject("ENAMELIST")

'set EnameListNew's element values
EnameListNew(1)  = "Nasser"
EnameListNew(2) =  "Chris"
EnameListNew(3) =  "Gopal"

'create a dynaset object from department
set OraDynaset = OraDatabase.CreateDynaset("select * from department", 0&)

'start the AddNew operation and insert the EnameListNew collection
OraDynaset.AddNew
OraDynaset.Fields("dept_id") = 40
OraDynaset.Fields("name") = "DEVELOPMENT"

'set the EnameListNew to enames column
OraDynaset.Fields("enames") = EnameListNew
OraDynaset.Update

OraParameterの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim EnameListNew as OraCollection

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a new OraCollection object from the database
set EnameListNew = OraDatabase.CreateOraObject("ENAMELIST")

'set EnameListNew's element values
EnameListNew(1)  = "Nasser"
EnameListNew(2) =  "Chris"
EnameListNew(3) =  "Gopal"

'create an input OraParameter object representing EnameList collection bind 'Variable

OraDatabase.Parameters.Add "ENAMES", Null, ORAPARM_INPUT, ORATYPE_VARRAY, _
"ENAMELIST"

'set the ENAMES parameter value to EnameListNew
OraDatabase.Parameters("ENAMES").Value  = EnameListNew

'execute the insert sql statement
OraDatabase.ExecuteSQL ("insert into department values (40,'DEVELOPMENT', " & _
":ENAMES)")

例: オブジェクト型の要素を含むコレクション

次の例では、オブジェクト型の要素を含むOracleコレクションの使用方法を示します。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim CourseList as OraCollection
Dim Course as OraObject

'create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from division
set OraDynaset = OraDatabase.CreateDynaset("select * from division", 0&)

'retrieve a Courses column from Division.
'Here Value property of OraField object returns CourseList OraCollection

set CourseList = OraDynaset.Fields("Courses").Value
'retrieve the element value of the CourseList at index 1.
'Here element value is returned as Course OraObject
set Course = CourseList(1)

'retrieve course_no and title attribute of the Course
msgbox Course.course_no
msgbox Course.title

'move to next row
OraDynaset.MoveNext

'now CourseList object represents collection value for the second row
'and course OraObject 'represents the element value at index 1.
'retrieve course_no and title attribute of the Course.
msgbox Course.course_no
msgbox Course.title

例: コレクションからのSAFEARRAY変数の作成

次の例では、Oracleコレクションを使用してSAFEARRAY Variant型を取得および設定する方法を示します。

コレクションからのSAFEARRAY変数の作成

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim EnameList as OraCollection
Dim EnameArray as Variant

'create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from department
set OraDynaset = OraDatabase.CreateDynaset("select * from department", 0&)

'retrieve a Enames column from Department.
'Here Value property of OraField objectreturns EnameList OraCollection
set EnameList = OraDynaset.Fields("Enames").Value

'get the Variant SAFEARRAY from the collection.
EnameArray = EnameList.SafeArray

'display the individual elements of EnameArray
msgbox EnameArray(0)
msgbox EnameArray(1)
msgbox EnameArray(2)

コレクションへのSAFEARRAY変数の設定

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim EnameList as OraCollection
Dim EnameArray() As String
ReDim EnameArray(3)

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create an Empty uninitialized input OraParameter object
'represent EnameList collection bind Variable
OraDatabase.Parameters.Add "ENAMES", Empty, ORAPARM_INPUT, _
ORATYPE_VARRAY,"ENAMELIST"

'get the Empty uninitialized ENAMES parameter value
set EnameList = OraDatabase.Parameters("ENAMES").Value

'initialize the EnameArray
EnameArray(0) = "Nasser"
EnameArray(1) = "Chris"
EnameArray(2) = "Gopal"

'set the EnameArray to EnameList's SafeArray
EnameList.SafeArray = EnameArray

'execute the insert sql statement
OraDatabase.ExecuteSQL ("insert into department " & _
"values (40,'DEVELOPMENT', :ENAMES)")

例: コレクションからのダイナセットの作成

次の例では、Oracleコレクションからダイナセットを作成する方法を示します。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim CourseList as OraCollection
Dim Course as OraObject
Dim CourseListDyn as OraDynaset

'create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger",  0&)

'create a dynaset object from division
set OraDynaset = OraDatabase.CreateDynaset("select * from division", 0&)

'retrieve a Courses column from Division. Here Value
'property of OraField object returns CourseList OraCollection
set CourseList = OraDynaset.Fields("Courses").Value

'create a input parameter for CourseList for nested table dynaset
OraDatabase.Parameters.Add "COURSELIST", CourseList, ORAPARM_INPUT, _
ORATYPE_TABLE, "COURSELIST"

'create a read only dynaset based on the CourseList.
Set CourseListDyn = OraDatabase.CreateDynaset("select * from THE" & _
"(select CAST(:COURSELIST AS COURSELIST) from dual)", ORADYN_READONLY)

'dynaset can also be created from Oracle8 collection
'using the following statement, which requires OO4O v8.1.x later

Set CourseListDyn = OraDatabase.CreateDynaset("select * from " & _
"TABLE(CAST(:COURSELIST AS COURSELIST))", ORADYN_READONLY)

'get the field values of the collection dynaset
msgbox CourseListDyn.Fields("title").Value
msgbox CourseListDyn.Fields("course_no").Value

'move the original dynaset to second row
Oradynaset.MoveNext

'set the new value of CourseList  collection from the second row of main dynaset
'to the "COURSELIST" parameter
OraDatabase.Parameters("COURSELIST").Value = CourseList

'refresh the collection dynaset. Now the collection dynaset values are refreshed
' with new collection value.
CourseListDyn.Refresh

'get the field values of the collection dynaset
msgbox CourseListDyn.Fields("title").Value
msgbox CourseListDyn.Fields("course_no").Value

例: コレクション・イテレータ

「例: OraCollectionイテレータ」を参照してください。

関連項目:

- OraParameterオブジェクト

- CreateOraObject(OraDatabase)メソッド

- Oracle LOB、オブジェクトおよびコレクションのインスタンス化

- Oracleコレクション

OraConnectionオブジェクト

説明

OraConnectionオブジェクトは、Oracleデータベースへの単一の接続を表します。

備考

OraConnectionオブジェクトは、セッション内でOraDatabaseオブジェクトがインスタンス化されるたびに自動的に作成され、接続を使用しているすべてのデータベースが破棄されると自動的に破棄されます。

現在、OraConnectionオブジェクトを明示的に作成する方法はありません。接続を必要とするOraDatabaseオブジェクトを作成することによって自動的に作成されます。

プロパティ

- Connectプロパティ

- ConnectionOKプロパティ

- DatabaseNameプロパティ

- Sessionプロパティ

メソッド

- BeginTransメソッド

- CommitTransメソッド

- ResetTransメソッド

- Rollbackメソッド

関連項目:

- OraConnectionsコレクション

- OraDatabaseオブジェクト

OraDatabaseオブジェクト

説明

OraDatabaseインタフェースは、Oracleデータベースに対するユーザー・セッションを表し、SQLとPL/SQLを実行するメソッドを提供します。

備考

Oracle8i以上のリリースでのOraDatabaseインタフェースには、トランザクションを制御し、Oracleオブジェクト型のインスタンスを表すインタフェースを作成するためのメソッドが追加されました。スキーマ・オブジェクトの属性は、このOraDatabaseインタフェースのDescribeメソッドを使用して取り出すことができます。

以前のリリースでは、OraDatabaseオブジェクトは、OraSessionインタフェースのOpenDatabaseメソッドをコールすることによって作成されていました。このメソッドの引数には、ネットワークの別名、ユーザー名およびパスワードが渡されます。Oracle8i以上のリリースでは、このメソッドのコールによってOraServerオブジェクトが暗黙的に作成されます。

OraServerインタフェースで説明したように、OraDatabaseオブジェクトは、OraServerインタフェースのOpenDatabaseメソッドを使用して作成することもできます。

トランザクション制御メソッドは、OraDatabase(ユーザー・セッション)レベルで使用できます。次のメソッドが含まれます。

- BeginTrans

- CommitTrans

- Rollback

次に、例を示します。

MyDatabase.BeginTrans
MyDatabase.ExecuteSQL("delete from emp where empno = 1234")
MyDatabase.CommitTrans

注意:
AutoCommitプロパティがTRUEに設定されている場合は、トランザクションは自動的にコミットされるため、トランザクション制御メソッドを使用する必要はありません。

プロパティ

- AutoCommitプロパティ

- CacheMaximumSizeプロパティ

- CacheOptimalSizeプロパティ

- Connectプロパティ

- Connectionプロパティ

- ConnectionOKプロパティ

- DatabaseNameプロパティ

- LastServerErrプロパティ

- LastServerErrPosプロパティ

- LastServerErrTextプロパティ

- Optionsプロパティ

- Serverプロパティ

- Parametersプロパティ

- RDMSVersionプロパティ

- Subscriptionsプロパティ

メソッド

- BeginTransメソッド

- Closeメソッド

- CommitTransメソッド

- CreateAQメソッド

- CreateCustomDynasetメソッド

- CreateTempBLOB/CLOBメソッド

- CreateDynasetメソッド

- CreateOraObject(OraDatabase)メソッド

- CreateSQLメソッド

- Describeメソッド

- ExecuteSQLメソッド

- FetchOraRefメソッド

- LastServerErrResetメソッド

- MonitorForFailoverメソッド

- Open(OraServer)メソッド

- RemoveFromPoolメソッド

- Rollbackメソッド

関連項目:

- OpenDatabaseメソッド

- OraServerオブジェクト

- OraServerオブジェクト

OraDynasetオブジェクト

説明

OraDynasetオブジェクトは、SQL SELECT文から作成されたデータの参照と更新を許可します。

備考

OraDynasetオブジェクトは、SQL SELECT問合せの結果セットまたはストアド・プロシージャやファンクションから戻ったPL/SQLカーソル変数を表します。これは本来、クライアント側でスクロールおよび更新できるカーソルで、実行した問合せで生成された行セットを参照できます。これは、OraDatabaseインタフェースのCreateDynasetメソッドまたはCreateCustomDynasetメソッドで作成されます。OraDynasetオブジェクトを使用して、VARRAY、ネストした表、Object、REF、LOB、BFILE型など、リレーショナル列およびオブジェクト・リレーショナル列のインスタンスが含まれる結果セットをスクロールできます。

このオブジェクトは、更新などのデータベース操作を透過的にミラー化します。Updateメソッドを介してデータが更新されると、問合せのローカル・ミラー・イメージが更新されるため、問合せを再評価せずにデータが変更されたかのように見えます。レコードをダイナセットに追加するときにも、同じプロシージャが自動的に使用されます。ミラー化したデータのイメージがOracle Database上の実際のデータと一致していることを確認するために、整合性チェックが実行されます。整合性チェックが実行されるのは、必要な場合(更新の直前など)のみです。

作成およびリフレッシュ操作時に、OraDynasetオブジェクトは、パラメータ名をSQL文のプレースホルダとして使用して、指定されたSQL文に関連する使用可能な入力パラメータをすべて自動的にバインドします。この結果、問合せの動的構築が簡素化され、同じSQL文でWHERE句が異なるような複数の問合せの効率が向上します。

Oracle Objects for OLEを使用する場合、Editメソッドを実行するまで、データにはロックが設定されません。Editメソッドは、"SELECT ... FOR UPDATE"文を使用してダイナセットのカレント・レコードに対するロックを取得しようとします。このロックは、レコードに対するロック設定時間を最短にするように、できるかぎり後に行われます。Editメソッドは、次の理由で失敗する可能性があります。

- SQLの問合せがOracle SQLの更新規則に違反している(たとえば、計算済の列や表の結合を使用した場合)。

- ロックの取得に必要な権限がユーザーにない。

- 他のユーザーがそのレコードをすでにロックしている。OpenDatabaseメソッドには、ロックを待機するかどうかを決定できるオプションがあります。

プロパティ

BOFプロパティ

LastModifiedプロパティ

Bookmarkプロパティ

NoMatchプロパティ

BookMarkableプロパティ

Optionsプロパティ

CacheBlocksプロパティ

RecordCountプロパティ

CacheChangedプロパティ

RowPositionプロパティ

CacheSliceSizeプロパティ

Sessionプロパティ

CacheSlicesPerBlockプロパティ

SnapShotプロパティ

Connectionプロパティ

SQLプロパティ

Databaseプロパティ

Transactionsプロパティ

EditModeプロパティ

Updatableプロパティ

EOFプロパティ

XMLCollIDプロパティ

FetchLimitプロパティ

XMLEncodingTagプロパティ

FetchSizeプロパティ

XMLNullIndicatorプロパティ

FieldIndexプロパティ

XMLOmitEncodingTagプロパティ

FieldNameプロパティ

XMLRowsetTagプロパティ

FieldOriginalNameプロパティ

XMLRowIDプロパティ

FieldOriginalNameIndexプロパティ

XMLRowTagプロパティ

Fieldsプロパティ

XMLUpperCaseプロパティ

メソッド

- AddNewメソッド

- Cloneメソッド

- Closeメソッド

- CopyToClipboardメソッド

- Deleteメソッド

- Editメソッド

- FindFirst、FindLast、FindNextおよびFindPreviousメソッド

- GetRowsメソッド

- GetXMLメソッド

- GetXMLToFileメソッド

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- MovePreviousn、MoveNextn、MoveRelおよびMoveToメソッド

- Refreshメソッド

- Updateメソッド

関連項目:

- CreateDynasetメソッド

- CreateCustomDynasetメソッド

- OraParameterオブジェクト

- RowPositionプロパティ

- Updateメソッド

OraFieldオブジェクト

説明

OraFieldオブジェクトは、ダイナセットの行の中にある1つの列またはデータ項目を表します。

備考

OraFieldオブジェクトには、OraDynasetオブジェクトのOraFieldsコレクションからフィールドを取り出すことによって間接的にアクセスします。

現在の行が更新中の場合、OraFieldオブジェクトは現在更新中の値を表します。ただし、現在更新中の値は、まだデータベースに対してコミットされていない可能性があります。

フィールドのValueプロパティにデータを代入できるのは、レコードの編集中(Editメソッドを使用)か、新規レコードの追加中(AddNewメソッドを使用)のみです。これ以外の場合にフィールドのValueプロパティにデータを代入しようとすると、エラーが発生します。

プロパティ

- OraIDataTypeプロパティ

- OraMaxDSizeプロパティ

- OraMaxSizeプロパティ

- OraNullOKプロパティ

- OraPrecisionプロパティ

- OraScaleプロパティ

- Nameプロパティ

- Sizeプロパティ

- Truncatedプロパティ

- Typeプロパティ

- Valueプロパティ

- XMLAsAttributeプロパティ

- XMLTagNameプロパティ

メソッド

- AppendChunkメソッド

- AppendChunkByteメソッド

- FieldSizeメソッド

- GetChunkメソッド

- GetChunkByteExメソッド

- OriginalName

- ReadChunkメソッド

関連項目:

- AddNewメソッド

- Editメソッド

- OraDynasetオブジェクト

- OraFieldsコレクション

- Valueプロパティ

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトは、Oracle INTERVAL DAY TO SECONDに関する操作を実行するメソッドを提供します。このデータ型は、期間を日数、時間、分、秒およびナノ秒で表します。

備考

OraIntervalDSオブジェクトは、OraSession.CreateOraIntervalDSメソッドを使用するか、または既存のOraIntervalDSオブジェクトに対してCloneメソッドをコールすると作成されます。

OraIntervalDSオブジェクトは、ServerTypeにORATYPE_INTERVALDSを使用してバインドできます。これによって、SQL文またはPL/SQL文のOracle INTERVAL DAY TO SECONDデータ型に関連付けられているパラメータに値をバインドできます。

INTERVAL DAY TO SECONDデータ型に関連付けられている文字列をバインドするときは、ServerTypeを文字列型(例: ORATYPE_VARCHAR2、ORATYPE_STRING)に指定し、文字列をDay HH:MI:SSxFFの書式で指定する必要があります。

プロパティ

- Daysプロパティ

- Hoursプロパティ

- Minutesプロパティ

- Nanonsecondsプロパティ

- Secondsプロパティ

- TotalDaysプロパティ

- Value(OraIntervalDS)プロパティ

メソッド

- Add(OraIntervalDS)メソッド

- Clone(OraIntervalDS)メソッド

- Div(OraIntervalDS)メソッド

- IsEqual(OraIntervalDS)メソッド

- IsGreater(OraIntervalDS)メソッド

- IsLess(OraIntervalDS)メソッド

- Mul(OraIntervalDS)メソッド

- Neg(OraIntervalDS)メソッド

- Sub(OraIntervalDS)メソッド

- ToOraNumber(OraIntervalDS)メソッド

関連項目:

- CreateOraIntervalDSメソッド

- OraNumberオブジェクト

- ServerTypeプロパティ

OraIntervalYMオブジェクト

説明

OraIntervalYMオブジェクトは、Oracle INTERVAL YEAR TO MONTHに関する操作を実行するメソッドを提供します。このデータ型は、期間を年数および月数で表します。

備考

OraIntervalYMオブジェクトは、OraSession.CreateOraIntervalYMメソッドを使用するか、または既存のOraIntervalYMオブジェクトに対してCloneメソッドをコールすると作成されます。

OraIntervalYMオブジェクトは、ServerTypeにORATYPE_INTERVALYMを使用してバインドできます。これによって、SQL文またはPL/SQL文のOracle INTERVAL YEAR TO MONTHデータ型に関連付けられているパラメータに値をバインドできます。

INTERVAL YEAR TO MONTHデータ型に関連付けられている文字列をバインドするときは、ServerTypeを文字列型(例: ORATYPE_VARCHAR2、ORATYPE_STRING)に指定し、文字列をYEARS-MONTHSの書式で指定する必要があります。

プロパティ

- Monthsプロパティ

- Yearsプロパティ

- TotalYearsプロパティ

- Valueプロパティ

メソッド

- Add(OraIntervalYM)メソッド

- Clone(OraIntervalYM)メソッド

- Div(OraIntervalYM)メソッド

- IsEqual(OraIntervalYM)メソッド

- IsGreater(OraIntervalYM)メソッド

- IsLess(OraIntervalYM)メソッド

- Mul(OraIntervalYM)メソッド

- Neg(OraIntervalYM)メソッド

- Sub(OraIntervalYM)メソッド

関連項目:

- CreateOraIntervalYMメソッド

- OraNumberオブジェクト

- ServerTypeプロパティ

OraMDAttributeオブジェクト

説明

各OraMDAttributeオブジェクトには、個々の属性を記述します。これは、OraMetaDataオブジェクトの属性表のエントリを表します。これにアクセスするには、順序を示す整数を使用する添字を作成するか、属性の名前を使用します。

備考

なし

プロパティ

- Name(OraMDAttribute)プロパティ

- Value(OraMDAttribute)プロパティ

- IsMDObjectプロパティ

メソッド

なし

例

これらの例で使用されているOraMetaDataスキーマ定義については、「OraMetaDataの例で使用されているスキーマ・オブジェクト」を参照してください。

例: 表の記述

「表の記述例」を参照してください。

例: ユーザー定義型の記述

「例: ユーザー定義型の記述」を参照してください。

例: 不明なスキーマ・オブジェクトの記述

「例: 不明なスキーマ・オブジェクトの記述」を参照してください。

関連項目:

- OraMetaDataオブジェクト

- Describeメソッド

OraMetaDataオブジェクト

説明

OraMetaDataオブジェクトは、OraDatabaseインタフェースのDescribeメソッドをコールすることによって戻されます。Describeメソッドは、emp表などのスキーマ・オブジェクトの名前を取得して、OraMetaDataオブジェクトを戻します。OraMetaDataオブジェクトは、記述されているスキーマ・オブジェクトのすべての属性(OraMDAttributeコレクション)に動的にナビゲートおよびアクセスするメソッドを提供します。

OraMetaDataオブジェクトは、OraMDAttributeオブジェクトのコレクションで、データベース内の特定のスキーマ・オブジェクトに関する記述情報を表します。次の表は、OraMetaDataオブジェクト型の表(ORAMD_TABLE)の属性の例です。

表9-2に、ORAMD_TABLEの属性を示します。

表9-2 ORAMD_TABLEの属性

属性名

値の型

説明

ObjectID

Integer

オブジェクトID。

NumCols

Integer

列の数。

ColumnList

OraMetaData

列リスト。

IsTyped

ブール

表に入力されたかどうかを示す。

IsTemporary

ブール

一時表かどうかを示す。

Duration

String

期間 - セッション、トランザクション、NULLのいずれか。

DBA

Integer

セグメント・ヘッダーのデータ・ブロック・アドレス。

TableSpace

Integer

表が属する表領域。

IsClustered

ブール

表がクラスタ化されているかどうかを示す。

IsPartitioned

ブール

表がパーティション化されているかどうかを示す。

IsIndexOnly

ブール

索引構成表かどうかを示す。

関連項目:
Type(OraMetaData)プロパティ

備考

OraMetaDataオブジェクトは、3つの列を含む表として視覚化できます。

- メタデータ属性名

- メタデータ属性値

- Valueが別のOraMetaDataオブジェクトであるかどうかを示すフラグ

順序を示す整数を使用する添字を作成するか、またはプロパティ名を使用することによって、OraMDAttributeオブジェクトに含まれるOraMDAttributeオブジェクトにアクセスできます。コレクションの範囲(0からCount-1)外の添字で参照すると、NULLのOraMDAttributeオブジェクトが戻ります。

プロパティ

- Count(OraMetaData)プロパティ

- Type(OraMetaData)プロパティ

メソッド

- Attribute(OraMetaData)メソッド

例

これらの例で使用されているOraMetaDataスキーマ定義については、「OraMetaDataの例で使用されているスキーマ・オブジェクト」を参照してください。

次のVisual Basicの例では、この機能の簡単な使用方法を示します。ここでは、emp表のいくつかの属性を取り出して表示します。

Set empMD = OraDatabase.Describe("emp")

'Display the name of the Tablespace
msgbox empMD("tablespace")

'Display name, data type, and size of each column in the emp table.
Set empColumnsMD = empMD("Columns")
for I = 1 to empColumns.Count
Set ColumnMD = empColumnsMD(I)
MsgBox ColumnMD("Name") & ColumnMD("Data Type") & ColumnMD("Length")
Next I

例: ユーザー定義型の記述

「例: ユーザー定義型の記述」を参照してください。

例: 不明なスキーマ・オブジェクトの記述

「例: 不明なスキーマ・オブジェクトの記述」を参照してください。

関連項目:

- OraMDAttributeオブジェクト

- Describeメソッド

OraNumberオブジェクト

説明

OraNumberインタフェースは、Oracle Numberデータ型に関する操作を実行するメソッドを提供します。このインタフェースは、Visual Basicなどの一部のプログラミング環境よりも精度の高い一連の算術操作を公開します。

備考

OraNumberオブジェクトは、OraSessionオブジェクトのCreateOraNumberメソッドを使用するか、または既存のOraNumberオブジェクトに対してCloneメソッドをコールすると取得できます。

数値引数を指定するOraNumberオブジェクトのメソッドはすべて、文字列、別の数値型(Visual Basicのlongなど)、または別のOraNumberオブジェクトを受け入れます。

注意:
Visual Basicの数値(または定数)を引数として使用する場合は、この言語で提供される最大精度に制限されます。

算術操作がコールされるOraNumberは、操作の結果を保持します(以前の値を上書き)。(Formatプロパティによって)Formatが指定された場合、OraNumberの値はその書式に一致する必要があり、そうでない場合、Valueプロパティへのアクセス時にエラーが発生します。

プロパティ

- Format(OraNumber)プロパティ

- Value(OraNumber)プロパティ

メソッド

- Absメソッド

- Add(OraNumber)メソッド

- ArcCos(OraNumber)メソッド

- ArcSin(OraNumber)メソッド

- ArcTan(OraNumber)メソッド

- ArcTan2(OraNumber)メソッド

- Ceil(OraNumber)メソッド

- Clone(OraNumber)メソッド

- Cos(OraNumber)メソッド

- Div(OraNumber)メソッド

- Exp(OraNumber)メソッド

- Floor(OraNumber)メソッド

- HypCos(OraNumber)メソッド

- HypSin(OraNumber)メソッド

- HypTan(OraNumber)メソッド

- IsEqual(OraNumber)メソッド

- IsGreater(OraNumber)メソッド

- IsLess(OraNumber)メソッド

- Ln(OraNumber)メソッド

- Log(OraNumber)メソッド

- Mod(OraNumber)メソッド

- Mul(OraNumber)メソッド

- Neg(OraNumber)メソッド

- Power(OraNumber)メソッド

- Round(OraNumber)メソッド

- SetPi(OraNumber)メソッド

- Sin(OraNumber)メソッド

- Sqrt(OraNumber)メソッド

- Sub(OraNumber)メソッド

- Tan(OraNumber)メソッド

- Trunc(OraNumber)メソッド

例

Oracle Objects for OLEとともにインストールされるサンプルの一部に、科学計算の例を示すプログラムが含まれています。「デモ・スキーマとサンプル・コード」を参照してください。

関連項目:
OraSessionオブジェクト

OraObjectオブジェクト

説明

OraObjectインタフェースは、Oracleの値インスタンス(参照可能でないオブジェクト・インスタンスまたは埋込みオブジェクト)を表します。値インスタンスは、表の列に格納されたOracleオブジェクト型のインスタンス、または別のOracleオブジェクト・インスタンスまたはOracleコレクション要素の属性です。

備考

OraObjectには、値インスタンスの個々の属性にアクセスして操作(更新と挿入)するコレクション・インタフェースが暗黙的に含まれます。添字または属性名を使用すると、個々の属性にアクセスできます。

OraObjectの属性の索引は1から開始します。Countプロパティは、属性の合計数を戻します。値インスタンスの基礎となる各属性は、OraAttributeオブジェクトとして表されます。

属性の値は、変数として取り出されます。属性のVariant型は、オブジェクトの属性の型によって決まります。属性の値にはNULLを使用でき、NULLを設定できます。REF、LOBおよびコレクション型のオブジェクトの場合は、属性の値が、その型に対応するOO4Oオブジェクトとして戻されます。

OraDatabaseオブジェクトのCreateOraObjectメソッドは、OraObjectオブジェクトを戻します。このOraObjectに関連付けられた値インスタンスは、クライアント側のオブジェクト・キャッシュに作成されます。

値インスタンスのメンバー・メソッドの実行方法については、「Oracleオブジェクト・インスタンスのメンバー・メソッドの実行」を参照してください。

OO4Oの値インスタンスを表すOraObjectオブジェクトの初期化方法または値インスタンスのメンバー・メソッドの実行方法については、「Oracle LOB、オブジェクトおよびコレクションのインスタンス化」を参照してください。

プロパティ

- Count(OraObject/Ref)プロパティ

- IsNull(OraObject)プロパティ

- TypeName(OraObjectおよびOraRef)プロパティ

- Version(OraObjectおよびRef)プロパティ

メソッド

- Clone(OraObject/Ref)メソッド

例

OraObject/OraRefオブジェクトの例で使用されているスキーマの記述については、「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。

例: OraObjectオブジェクトの属性へのアクセス

次の例では、データベースにあるADDRESSという値インスタンスの属性にアクセスします。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim Address as OraObject

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb",  "scott/tiger", 0&)

'create a dynaset object from person_tab
set OraDynaset = OraDatabase.CreateDynaset("select * from person_tab",0&)

'retrieve a address column from person_tab. Here Value property of OraField
'object returns Address OraObject
set Address = OraDynaset.Fields("Addr").Value

'access the attribute by dot notation
msgbox Address.Street

'access the attribute using '!' notation ( early binding application)
msgbox Address!Street

'access the attribute by index
msgbox Address(1)

'access the attribute by name
msgbox Address("Street")

'access all the attributes of Address OraObject in the dynaset
Do Until OraDynaset.EOF
For index = 1 To Address.Count
msgbox Address(index)
Next Index
OraDynaset.MoveNext
Loop

例: OraObjectオブジェクトの属性の更新

次の例では、データベースにあるADDRESSという値インスタンスの属性を変更します。

ダイナセットの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim Address as OraObject

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from person_tab
set OraDynaset = OraDatabase.CreateDynaset("select * from person_tab", 0&)

'retrieve a address column from person_tab.
'Here Value property of OraField object returns Address OraObject

set Address = OraDynaset.Fields("Addr").Value

'start the Edit operation and modify the Street attribute
OraDynaset.Edit
Address.Street  =  "Oracle Parkway"
OraDynaset.Update

パラメータの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim Address as OraObject

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create an  OraParameter object represent Address object bind Variable
OraDatabase.Parameters.Add "ADDRESS", Empty, ORAPARM_INPUT, ORATYPE_OBJECT, _
"ADDRESS"

'get the uninitialized 'Empty' Address object from OraParameter
set Address = OraDatabase.Parameters("ADDRESS").Value

'modify the 'Street' attribute of the Address
Address.Street = "Oracle Parkway"

'execute the sql statement which updates Address in the person_tab
OraDatabase.ExecuteSQL ("update person_tab set addr = :ADDRESS where age = 40")

例: OraObjectオブジェクトの挿入

次の例では、ADDRESSという新しいフィールド(値インスタンス)をデータベースに挿入します。

ダイナセットの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim AddressNew as OraObject

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from person_tab
set OraDynaset = OraDatabase.CreateDynaset("select * from person_tab", 0&)

' create a new Address object in OO4O
set AddressNew = OraDatabase.CreateOraObject("ADDRESS")

'initialize the Address object attribute to new value
AddressNew.Street = "Oracle Parkway"
AddressNew.State = "CA"

'start the dynaset AddNew operation and set the Address field to new address
' value
OraDynaset.Addnew
OraDynaset.Fields("ADDR").Value = AddressNew
OraDynaset.Update

OraParameterの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim AddressNew as OraObject

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create an  OraParameter object represent Address object bind Variable
OraDatabase.Parameters.Add "ADDRESS", Null, ORAPARM_INPUT, ORATYPE_OBJECT, _
"ADDRESS"

' create a new Address object in OO4O
set AddressNew = OraDatabase.CreateObject("ADDRESS")

'initialize the Address object attribute to new value
AddressNew.Street = "Oracle Parkway"
AddressNew.State = "CA"

'set the Address to ADDRESS parameter
Oradatabase.Parameters("ADDRESS").Value = AddressNew

'execute the sql statement which updates Address in the person_tab
OraDatabase.ExecuteSQL ("insert into person_tab values (30,'Eric',:ADDRESS))

関連項目:

- Oracleオブジェクト・リレーショナル機能のサポートについては、「Oracleオブジェクト・データ型」を参照してください。

- OraParameterオブジェクト

- OraParamArrayオブジェクト

- OraRefオブジェクト

- OraAttributeオブジェクト

- CreateOraObject(OraDatabase)メソッド

- Oracleオブジェクト・インスタンスのメンバー・メソッドの実行

OraParamArrayオブジェクト

説明

OraParamArrayオブジェクトは、OraParameterオブジェクトによって表されるscalar型バインド変数に対して、SQL文またはPL/SQLブロック内のarray型バインド変数を表します。

備考

OraParamArrayオブジェクトは、OraDatabaseオブジェクトのOraParametersコレクションを介して間接的に作成、アクセスおよび削除されます。各パラメータには、識別名および関連付けられた値があります。

OraParamArrayには、配列の個々の要素にアクセスして操作するOLEオートメーション・コレクション・インタフェースが暗黙的に含まれます。添字またはGet_Valueメソッドを使用すると、個々の要素にアクセスできます。添字またはPut_Valueメソッドを使用すると、個々の要素を変更できます。

要素の値は、Variant型として取り出されます。要素のVariant型は、OraParamArrayオブジェクトのServerTypeによって決まります。要素の値にはNULLを使用でき、NULLを設定できます。オブジェクト型およびREFの要素の場合は、要素の値が、その型に対応するOO4Oオブジェクトとして戻されます。

SQL文またはPL/SQL文の中でパラメータ名をプレースホルダとして使用すると、(オブジェクトの記述に示されているとおり)他のオブジェクトのSQL文およびPL/SQL文にパラメータを自動的にバインドできます。パラメータを使用することで、動的な問合せを容易にし、プログラムのパフォーマンスを向上させます。パラメータは、実行前にSQL文およびPL/SQLブロックにバインドされます。

OraParametersコレクションは、OraDatabaseオブジェクトの一部であり、すべてのパラメータは、データベース内で(CreateDynaset、ExecuteSQLまたはCreateSQLメソッドを介して)実行されるSQL文またはPL/SQLブロックで使用できます。SQL文またはPL/SQLブロックの実行前に、関連付けられたOraDatabaseオブジェクトのすべてのパラメータのバインドが試行されます。(特定のSQL文またはPL/SQLブロックにパラメータが適用されないために)失敗したバインドは通知され、そのSQL文またはPL/SQLブロックが未変更のまま再実行された場合、バインドは再試行されません。

SQL文およびPL/SQLブロックはいずれもローカルには解析されないため(すべての解析はOracle Databaseで実行されます)、不要なバインドはパフォーマンス低下の原因となります。不要なパラメータのバインドを防止するには、AutoBindDisableおよびAutoBindEnableメソッドを使用します。

プロパティ

- ArraySizeプロパティ

- LastErrorTextプロパティ

- MinimumSizeプロパティ

- Nameプロパティ

- ServerTypeプロパティ

- Statusプロパティ

- Typeプロパティ

メソッド

- AutoBindDisableメソッド

- AutoBindEnableメソッド

- Get_Valueメソッド

- Put_Valueメソッド

例

例: SQL文でOraParamArraysを使用する方法

次の例では、SQL文でOraParamArrayオブジェクトを使用する方法を示します。

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraSqlStmt As OraSQLStmt
Dim PartNoArray As OraParamArray
Dim DescArray As OraParamArray
Dim I As Integer

'Test case for inserting/updating/deleting multiple rows using parameter

' arrays with SQL statements
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("exampledb", "scott/tiger",  0&)

'Create table
OraDatabase.ExecuteSQL ("create table part_nos(partno number," & _
"description char(50), primary key(partno))")
OraDatabase.Parameters.AddTable "PARTNO", ORAPARM_INPUT, ORATYPE_NUMBER, 10, 22
OraDatabase.Parameters.AddTable "DESCRIPTION", ORAPARM_INPUT, _
ORATYPE_CHAR, 10, 50
Set PartNoArray = OraDatabase.Parameters("PARTNO")
Set DescArray = OraDatabase.Parameters("DESCRIPTION")

'Initialize arrays
For I = 0 To 9
achar = "Description" + Str(I)
PartNoArray(I) = 1000 + I
DescArray(I) = achar
Next I
Set OraSqlStmt = OraDatabase.CreateSql("insert into
part_nos(partno, description) values(:PARTNO,:DESCRIPTION)", 0&)

'Update the newly created part_nos table
For I = 0 To 9
achar = "Description" + Str(1000 + I)
DescArray(I) = achar
Next I

'Update table
Set OraSqlStmt = OraDatabase.CreateSql("update part_nos set DESCRIPTION" & _
"=:DESCRIPTION where PARTNO = :PARTNO", 0&)

'Deleting rows
Set OraSqlStmt = OraDatabase.CreateSql("delete  from  part_nos where" & _
"DESCRIPTION=: Description ", 0&)

'Drop the table
OraDatabase.ExecuteSQL ("drop table part_nos")

例: PL/SQLでOraParamArraysを使用する方法

次の例では、PL/SQLでOraParamArrayオブジェクトを使用する方法を示します。Employee PL/SQLパッケージは、ORAEXAMP.SQLスクリプトを使用して設定できます。「デモ・スキーマとサンプル・コード」を参照してください。

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim EmpnoArray As OraParamArray
Dim EnameArray As OraParamArray

Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("exampledb", "scott/tiger", 0&)
OraDatabase.Parameters.Add "ArraySize", 3, ORAPARM_INPUT
OraDatabase.Parameters.AddTable "EMPNOS", ORAPARM_INPUT, ORATYPE_NUMBER,3, 22
OraDatabase.Parameters.AddTable "ENAMES", ORAPARM_OUTPUT, _
ORATYPE_VARCHAR2, 3, 10
Set EmpnoArray = OraDatabase.Parameters("EMPNOS")
Set EnameArray = OraDatabase.Parameters("ENAMES")

'Initialize the newly created input parameter table EMPNOS
EmpnoArray(0) = 7698
EmpnoArray(1) = 7782
EmpnoArray(2) = 7654

'Execute the PLSQL package
OraDatabase.ExecuteSQL ("Begin Employee.GetEmpNamesInArray(:ArraySize," & _
":EMPNOS, :ENAMES); End;")
'Print out Enames
MsgBox EnameArray(0)
MsgBox EnameArray(1)
MsgBox EnameArray(2)

関連項目:

- OraParametersコレクション

- OraParameterオブジェクト

OraParameterオブジェクト

説明

OraParameterオブジェクトは、SQL文またはPL/SQLブロックのバインド変数を表します。

備考

OraParameterオブジェクトは、OraDatabaseオブジェクトのOraParametersコレクションを介して間接的に作成、アクセスおよび削除されます。各パラメータには、識別名および関連付けられた値があります。SQL文またはPL/SQL文の中でパラメータ名をプレースホルダとして使用すると、(オブジェクトの記述に示されているとおり)他のオブジェクトのSQL文およびPL/SQL文にパラメータを自動的にバインドできます。パラメータを使用することで、動的な問合せを容易にし、プログラムのパフォーマンスを向上させます。

パラメータは、実行前にSQL文およびPL/SQLブロックにバインドされます。SQL SELECT文の場合は、ダイナセットの作成前にバインドが発生します。

OraParametersコレクションは、OraDatabaseオブジェクトの一部です。したがって、すべてのパラメータは、データベース内で(CreateDynasetまたはExecuteSQLメソッドを介して)実行されるSQL文またはPL/SQLブロックで使用できます。

SQL文またはPL/SQLブロックの実行前に、関連付けられたOraDatabaseオブジェクトのすべてのパラメータのバインドが試行されます。(特定のSQL文またはPL/SQLブロックにパラメータが適用されないために)失敗したバインドは通知され、そのSQL文またはPL/SQLブロックが未変更のまま再実行された場合、バインドは再試行されません。

SQL文およびPL/SQLブロックはいずれもローカルには解析されないため(すべての解析はOracle Databaseで実行されます)、不要なバインドはパフォーマンス低下の原因となります。不要なパラメータのバインドを防止するには、AutoBindDisableおよびAutoBindEnableメソッドを使用します。

ServerTypeがCHARおよびVARCHAR2であるORAPARM_OUTPUT変数の最大サイズは、デフォルトで127バイトに設定されます。この値を変更するには、MinimumSizeプロパティを使用します。CHAR、VARCHAR2およびORATYPE_RAW_BINに対するORAPARM_OUTPUT変数の最小サイズは、データベースの列から予測されるデータのサイズより常に大きい値に設定する必要があります。

Oracle Raw型の列にバインドする場合は、ServerTypeにORATYPE_RAW_BINを使用します。値の設定または取得には、バイト配列を使用します。ORATYPE_RAW_BINバインド・バッファの最大許容サイズは、表の列にバインドする場合は2000バイト、ストアド・プロシージャにバインドする場合は32KBです。コード例は、ORACLE_BASE\\ORACLE_HOME\OO4O\VB\Rawディレクトリにあるサンプルを参照してください。

プロパティ

- DynasetOptionプロパティ

- MinimumSizeプロパティ

- Nameプロパティ

- ServerTypeプロパティ

- Statusプロパティ

- Typeプロパティ

- Valueプロパティ

メソッド

- AutoBindDisableメソッド

- AutoBindEnableメソッド

- DynasetCacheParamsメソッド

関連項目:

- CreateDynasetメソッド

- DynasetOptionプロパティ

- ExecuteSQLメソッド

- OraDatabaseオブジェクト

- OraParametersコレクション

OraRefオブジェクト

説明

OraRefインタフェースは、参照可能オブジェクト(スタンドアロン・インスタンス)に加え、Oracle REF(参照)を表します。

備考

Oracle REFは参照可能オブジェクトへの識別子です。参照可能オブジェクトはオブジェクト表の行に格納されます。REFを確保することにより、参照可能オブジェクトがクライアント側にフェッチされます。参照可能オブジェクトの属性が最初にアクセスされる時点で、OraRefオブジェクトが基礎となるREFを暗黙的に確保します。また、OraRefは、複合オブジェクト検索機能(COR)を利用するオブジェクト・ナビゲーショナル操作の機能をカプセル化します。

OraRefオブジェクトで表される参照可能オブジェクトの属性は、OraObjectインタフェースで表される値インスタンスの属性にアクセスする場合と同様の方法でアクセスします。確保される時点で、COMの包含機構を介して、OraRefにOraObjectインタフェースが組み込まれます。実行時点で、OraRefインタフェースは、OraObjectインタフェースに型変換されます。

OraRefは、ダイナセット、パラメータなど、基礎となるコンテキストの影響を受けない参照可能オブジェクトでの更新および削除操作用のメソッドを提供します。

参照可能オブジェクトの属性を変更する前に、オブジェクト・レベルでロックを取得してください。これはOraRefオブジェクトのEditメソッドを使用して行います。

OraDatabaseオブジェクトのCreateOraObjectメソッドは、新しい参照可能オブジェクトをデータベースに作成し、OraRefオブジェクトに関連付けられた情報を戻します。CreateOraObjectおよびUpdateメソッドのペアは、新しい参照可能オブジェクトをデータベースに挿入します。

OO4Oの参照可能オブジェクトを表すOraRefオブジェクトの初期化方法または参照可能オブジェクトのメンバー・メソッドの実行方法については、「Oracle LOB、オブジェクトおよびコレクションのインスタンス化」を参照してください。

プロパティ

- Count(OraObject/Ref)プロパティ

- EditOption(OraRef)プロパティ

- HexValue(OraRef)プロパティ

- IsRefNull(OraRef)プロパティ

- PinOption(OraRef)プロパティ

- TableName(OraRef)プロパティ

- TypeName(OraObjectおよびOraRef)プロパティ

- Version(OraObjectおよびRef)プロパティ

メソッド

- CancelEdit(OraRef)メソッド

- Clone(OraObject/Ref)メソッド

- Delete(OraRef)メソッド

- Edit(OraRef)メソッド

- Refresh(OraRef)メソッド

- Update(OraRef)メソッド

例

サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。OraObject/OraRefの例で使用されているスキーマの記述については、「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。

例: REF値の確保

次の例では、データベースにあるPERSONという参照可能オブジェクトの属性を確保します。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim Person as OraRef

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from customers
set OraDynaset = OraDatabase.CreateDynaset("select * from customers", 0&)

'retrieve a aperson column from customers. Here Value property of
' OraField object returns Person OraRef
set Person = OraDynaset.Fields("aperson").Value

'access the attribute of person. This operation pins the Person ref
'value and fetches the Person referenceable object to the client.
msgbox Person.Name

例: 属性値へのアクセス

次の例では、データベースにあるPERSONという参照可能オブジェクトの属性にアクセスします。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim Person as OraRef
Dim Address as OraObject

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from customers
set OraDynaset = OraDatabase.CreateDynaset("select * from customers", 0&)

'retrieve a aperson column from customers. Here Value property of OraField
'object returns Person OraRef
set Person = OraDynaset.Fields("aperson").Value

'access the attribute by dot notation.
msgbox Person.Name

'access the attribute using '!' notation ( early binding application)
msgbox Person!Name

'access the attribute by index
msgbox Person(1)

'access the attribute by name
msgbox Person("Name")

'access Addr attribute . This returns Address OraObject.
set Address = Person.Addr

例: 属性値の更新

次の例では、データベースにあるPERSONという参照可能オブジェクトの属性を更新します。

ダイナセットの例

「属性値の更新: ダイナセットの例」を参照してください。

パラメータの例

「属性値の更新: パラメータの例」を参照してください。

例: 参照可能オブジェクトの挿入

次の例では、PERSONという新しい参照可能オブジェクトをデータベースに挿入します。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim Person  as OraRef

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'CreateOraObject   creates a new referenceable object in the PERSON_TAB object
'table and returns associated OraRef
set Person = OraDatabase.CreateOraObject("PERSON","PERSON_TAB")

'modify the attributes of Person
Person.Name = "Eric"
Person.Age = 35

'Update method inserts modified referenceable object in the PERSON_TAB.
Person.Update

関連項目:

- OraObjectオブジェクト

- OraParameterオブジェクト

- OraParamArrayオブジェクト

OraServerオブジェクト

説明

OraServerインタフェースは、Oracleデータベースへの物理的なネットワーク接続を表します。

備考

OraServerインタフェースは、Oracle Call Interfaceで提供される接続多重化機能を公開します。OraServerオブジェクトが作成されると、OpenDatabaseメソッドをコールして複数のユーザー・セッション(OraDatabase)がこのオブジェクトに接続できます。この機能は、Internet Information Server(IIS)など、複数の層を介する分散環境でOracle Objects for OLEを使用するアプリケーション・コンポーネントには、特に有効です。多数のアクティブなユーザー・セッションがあるOracleデータベースにアクセスする場合に接続多重化を使用すると、データベースの拡張性を改善すると同時に、サーバーでの処理およびリソース所要量の軽減に役立ちます。

図9-1に示すように、OraServerインタフェースにはOracleデータベースへの接続が含まれ、そのデータベース接続でユーザー・セッション(OpenDatabaseオブジェクト)を作成するメソッド(OraDatabase)を提供します。

図9-1 OraServerとOracle Databaseの関係

プロパティ

- Nameプロパティ

- Sessionプロパティ

- Databasesプロパティ

メソッド

- ChangePassword(OraServer)メソッド

- OpenDatabaseメソッド

- Open(OraServer)メソッド

関連項目:

- OraConnectionオブジェクト

- OraDatabaseオブジェクト

- OraClientオブジェクト

- OraDynasetオブジェクト

OraSessionオブジェクト

説明

OraSessionオブジェクトは、アプリケーション内で使用されるOraDatabase、OraConnectionおよびOraDynasetオブジェクトのコレクションを管理します。

備考

通常、アプリケーションごとに1つのOraSessionオブジェクトが作成されますが、アプリケーション内外で共有使用するための名前付きOraSessionオブジェクトを複数作成できます。

OraSessionオブジェクトは、アプリケーションの最上位レベルのオブジェクトです。OraSessionおよびOraServerオブジェクトは、Visual BasicまたはVisual Basic for Applications APIのCreateObjectによってのみ作成されるオブジェクトで、Oracle Objects for OLEメソッドでは作成されません。

プロパティ

- Clientプロパティ

- Connectionsプロパティ

- LastServerErrプロパティ

- LastServerErrTextプロパティ

- Nameプロパティ

- OIPVersionNumberプロパティ

- DbPoolCurrentSizeプロパティ

- DbPoolInitialSizeプロパティ

- DbPoolMaxSizeプロパティ

メソッド

- BeginTransメソッド

- ChangePassword(OraSession)メソッド

- CommitTransメソッド

- ConnectSessionメソッド

- CreateDatabasePoolメソッド

- CreateNamedSessionメソッド

- CreateOraIntervalDSメソッド

- CreateOraIntervalYMメソッド

- CreateOraNumberメソッド

- CreateOraTimeStampメソッド

- CreateOraTimeStampTZメソッド

- DestroyDatabasePoolメソッド

- GetDatabaseFromPoolメソッド

- OpenDatabaseメソッド

- LastServerErrResetメソッド

- ResetTransメソッド

- Rollbackメソッド

例

次に示すコード部分では、OraSessionオブジェクトの作成方法を示します。

Dim oo4oSession as Object
Set oo4oSession = CreateObject("OracleInProcServer.XOraSession")

または

Dim oo4oSession as New OraSessionClass

または

Dim oo4oSession as OraSession
Set oo4oSession = New OraSessionClass

関連項目:

- OraClientオブジェクト

- OraConnectionオブジェクト

- OraDatabaseオブジェクト

- OraDynasetオブジェクト

- OraServerオブジェクト

OraSQLStmtオブジェクト

説明

OraSQLStmtオブジェクトは、単一のSQL文を表します。CreateSQLメソッドを使用して、OraDatabaseオブジェクトからOraSQLStmtオブジェクトを作成します。

作成およびリフレッシュ操作時に、OraSQLStmtオブジェクトは、パラメータ名をSQL文のプレースホルダとして使用して、指定されたSQL文に関連する使用可能な入力パラメータをすべて自動的にバインドします。これによって、SQL文を再度解析する必要がないため、SQL文の実行パフォーマンスが向上します。

プロパティ

- Connectionプロパティ

- Databaseプロパティ

- Optionsプロパティ

- RecordCountプロパティ

- Sessionプロパティ

- SQLプロパティ

- NonBlockingStateプロパティ

メソッド

- Refreshメソッド

- Cancelメソッド

- Closeメソッド

関連項目:

- CreateSQLメソッド

- OraParameterオブジェクト

- 非同期処理

OraSubscriptionオブジェクト

説明

OraSubscriptionオブジェクトは、データベース・イベントのサブスクリプションを表します。

備考

OraSubscriptionオブジェクトは、OraDatabaseオブジェクトのOraSubscriptionsコレクションを介して間接的に作成、アクセスおよび削除されます。各サブスクリプションには、Oracleデータベース・イベントに関連付けられた名前があります。

OraSubscriptionsコレクションは、OraDatabaseオブジェクトの一部です。

プロパティ

- Nameプロパティ

メソッド

- Registerメソッド

- Unregisterメソッド

関連項目:

- OraDatabaseオブジェクト

- OraSubscriptionsコレクション

- データベース・イベント

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトは、Oracle TIMESTAMPおよびOracle TIMESTAMP WITH LOCAL TIME ZONEデータ型を表し、この2つのデータ型に関する操作を実行するメソッドを提供します。OraTimeStampは、年、日、時、分、秒およびナノ秒の情報を格納する日時値を表します。

備考

OraTimeStampオブジェクトは、OraSession.OraCreateTimeStampメソッドを使用するか、または既存のOraTimeStampオブジェクトに対してCloneメソッドをコールすると作成されます。

OraTimeStampオブジェクトは、ServerTypeにORATYPE_TIMESTAMPまたはORATYPE_TIMESTAMPLTZを使用してバインドできます。これによって、SQL文またはPL/SQL文のOracle TIMESTAMPまたはOracle TIMESTAMP WITH LOCAL TIME ZONEデータ型にそれぞれ関連付けられているパラメータに値をバインドできます。

TIMESTAMPまたはTIMESTAMP WITH LOCAL TIME ZONEデータ型に関連付けられている文字列をバインドするときは、ServerTypeを文字列型(例: ORATYPE_VARCHAR2、ORATYPE_STRING)に指定し、文字列をNLS_TIMESTAMP_FORMATの書式で指定する必要があります。

プロパティ

- Day(OraTimeStamp)プロパティ

- Format(OraTimeStamp)プロパティ

- Hour(OraTimeStamp)プロパティ

- Minute(OraTimeStamp)プロパティ

- Month(OraTimeStamp)プロパティ

- Nanosecond(OraTimeStamp)プロパティ

- Second(OraTimeStamp)プロパティ

- Value(OraTimeStamp)プロパティ

- Year(OraTimeStamp)プロパティ

メソッド

- AddIntervalDSメソッド

- AddIntervalYMメソッド

- Clone(OraTimeStamp)メソッド

- IsEqual(OraTimeStamp)メソッド

- IsGreater(OraTimeStamp)メソッド

- IsLess(OraTimeStamp)メソッド

- ToDateメソッド

- ToOraTimeStampTZメソッド

関連項目:

- CreateOraTimeStampメソッド

- OraNumberオブジェクト

- ServerTypeプロパティ

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトは、Oracle TIMESTAMP WITH TIME ZONEデータ型を表し、このOracleデータ型に関する操作を実行するメソッドを提供します。OraTimeStampTZは、年、日、時、分、秒およびナノ秒およびタイムゾーンの情報を格納する特定のタイムゾーンの日時値を表します。

備考

OraTimeStampTZオブジェクトは、OraSession.OraCreateTimeStampTZメソッドを使用するか、または既存のOraTimeStampTZオブジェクトに対してCloneメソッドをコールすると作成されます。

OraTimeStampTZオブジェクトは、ServerTypeにORATYPE_TIMESTAMPTZを使用してバインドできます。これによって、SQL文またはPL/SQL文のOracle TIMESTAMP WITH TIME ZONEデータ型に関連付けられているパラメータに値をバインドできます。

TIMESTAMP WITH TIME ZONEデータ型に関連付けられている文字列をバインドするときは、ServerTypeを文字列型(例: ORATYPE_VARCHAR2、ORATYPE_STRING)に指定し、文字列をNLS_TIMESTAMP_TZ_FORMATの書式で指定する必要があります。

プロパティ

- Day(OraTimeStampTZ)プロパティ

- Format(OraTimeStampTZ)プロパティ

- Hour(OraTimeStampTZ)プロパティ

- Minute(OraTimeStampTZ)プロパティ

- Month(OraTimeStampTZ)プロパティ

- Nanonsecond(OraTimeStampTZ)プロパティ

- Second(OraTimeStampTZ)プロパティ

- TimeZone(OraTimeStampTZ)プロパティ

- Value(OraTimeStampTZ)プロパティ

- Year(OraTimeStampTZ)プロパティ

メソッド

- AddIntervalDSメソッド

- AddIntervalYMメソッド

- Clone(OraTimeStampTZ)メソッド

- IsEqual(OraTimeStampTZ)メソッド

- IsGreater(OraTimeStampTZ)メソッド

- IsLess(OraTimeStampTZ)メソッド

- ToDateメソッド

- ToOraTimeStampメソッド

- ToOraTimeStampLTZメソッド

- ToUniversalTimeメソッド

関連項目:

- CreateOraTimeStampTZメソッド

- OraNumberオブジェクト

- ServerTypeプロパティ

OraConnectionsコレクション

説明

OraConnectionsコレクションは、OraConnectionオブジェクトのリストを保持します。このリストは変更できず、このコレクションで追加や削除を行うことはできません。

備考

このコレクション内のOraConnectionオブジェクトにアクセスするには、添字(順序を示す整数を使用)を作成するか、またはオブジェクトの作成時に指定した名前を使用します。Countプロパティを使用すると、コレクション内のOraConnectionオブジェクトの数を取得できます。コレクションの範囲(0からCount-1)外の添字で参照すると、NULLのOraConnectionオブジェクトが戻ります。

プロパティ

- Countプロパティ

メソッド

なし

関連項目:
OraConnectionオブジェクト

OraFieldsコレクション

説明

OraFieldsコレクションは、OraFieldオブジェクトのリストを保持します。このリストは変更できず、このコレクションで追加や削除を行うことはできません。

備考

このコレクション内のOraFieldオブジェクトにアクセスするには、添字(順序を示す整数を使用)を作成するか、またはオブジェクトの作成時に指定した名前を使用します。Countプロパティを使用すると、コレクション内のOraFieldオブジェクトの数を取得できます。コレクションの範囲(0からCount-1)外の添字で参照すると、NULLのOraFieldオブジェクトが戻ります。

プロパティ

- Countプロパティ

メソッド

- OriginalItemメソッド

関連項目:
OraFieldオブジェクト

OraParametersコレクション

説明

OraParametersコレクションは、OraParameterオブジェクトのリストを保持します。他のコレクション・オブジェクトとは異なり、このリストは変更可能で、コレクションで追加と削除を行うことができます。

備考

このコレクション内のOraParameterオブジェクトにアクセスするには、添字(順序を示す整数を使用)を作成するか、またはオブジェクトの作成時に指定した名前を使用します。Countプロパティを使用すると、コレクション内のOraParameterオブジェクトの数を取得できます。コレクションの範囲(0からCount-1)外の添字で参照すると、NULLのOraParameterオブジェクトが戻ります。

コレクションのOraParameterオブジェクトへのアクセスに加えて、このコレクションでは、AddおよびRemoveメソッドを使用してパラメータを作成および破棄できます。

プロパティ

- Countプロパティ

メソッド

- Addメソッド

- AddTableメソッド

- Removeメソッド

関連項目:

- OraParameterオブジェクト

- OraParamArrayオブジェクト

OraSessionsコレクション

説明

OraSessionsコレクションは、OraSessionオブジェクトのリストを保持します。このリストは変更できず、このコレクションで追加や削除を行うことはできません。

備考

このコレクション内のOraSessionオブジェクトにアクセスするには、添字(順序を示す整数を使用)を作成するか、またはオブジェクトの作成時に指定した名前を使用します。Countプロパティを使用すると、コレクション内のOraSessionオブジェクトの数を取得できます。コレクションの範囲(0からCount-1)外の添字で参照すると、NULLのOraSessionオブジェクトが戻ります。

プロパティ

- Countプロパティ

メソッド

なし

関連項目:
OraSessionオブジェクト

OraSubscriptionsコレクション

説明

OraSubscriptionsコレクションは、OraSubscriptionオブジェクトのリストを保持し、データベース・イベントのサブスクリプションを表します。他のコレクション・オブジェクトとは異なり、このリストは変更可能で、コレクションで追加と削除を行うことができます。

備考

このコレクション内のOraSubscriptionオブジェクトにアクセスするには、添字(順序を示す整数を使用)を作成するか、またはオブジェクトの作成時に指定した名前を使用します。Countプロパティを使用すると、コレクション内のOraSubscriptionオブジェクトの数を取得できます。コレクションの範囲(0からCount-1)外の添字で参照すると、NULLのOraSubscriptionオブジェクトが戻ります。

コレクションのOraSubscriptionオブジェクトへのアクセスに加えて、このコレクションでは、AddおよびRemoveメソッドを使用してサブスクリプションを作成および破棄できます。

プロパティ

- Countプロパティ

メソッド

- Add(OraSubscriptionsコレクション)メソッド

- Remove(OraSubscriptionsコレクション)メソッド

関連項目:

- OraSubscriptionオブジェクト

- OraDatabaseオブジェクト

- データベース・イベント

10 サーバー・メソッド

この章では、Oracle Objects for OLEのサーバー・メソッドについて説明します。

OO4Oサーバー・オブジェクトの概要は、「Oracle Objects for OLEインプロセス・オートメーション・サーバー」を参照してください。

内容は次のとおりです。

- サーバー・メソッド: AからB

- サーバー・メソッド: C

- サーバー・メソッド: DからH

- サーバー・メソッド: IからL

- サーバー・メソッド: MからS

- サーバー・メソッド: TからZ

サーバー・メソッド: AからB

- Absメソッド

- Addメソッド

- Add(OraIntervalDS)メソッド

- Add(OraIntervalYM)メソッド

- Add(OraNumber)メソッド

- Add(OraSubscriptionsコレクション)メソッド

- AddIntervalDSメソッド

- AddIntervalYMメソッド

- AddNewメソッド

- AddTableメソッド

- Append(OraCollection)メソッド

- Append(OraLOB)メソッド

- AppendChunkメソッド

- AppendChunkByteメソッド

- AQAgent(OraAQMsg)メソッド

- AQMsg(OraAQ)メソッド

- ArcCos(OraNumber)メソッド

- ArcSin(OraNumber)メソッド

- ArcTan(OraNumber)メソッド

- ArcTan2(OraNumber)メソッド

- Attribute(OraMetaData)メソッド

- AutoBindDisableメソッド

- AutoBindEnableメソッド

- BeginTransメソッド

サーバー・メソッド: C

- Cancelメソッド

- CancelEdit(OraRef)メソッド

- Ceil(OraNumber)メソッド

- ChangePassword(OraServer)メソッド

- ChangePassword(OraSession)メソッド

- Cloneメソッド

- Clone(OraLOB/BFILE)メソッド

- Clone(OraCollection)メソッド

- Clone(OraIntervalDS)メソッド

- Clone(OraIntervalYM)メソッド

- Clone(OraNumber)メソッド

- Clone(OraObject/Ref)メソッド

- Clone(OraTimeStamp)メソッド

- Clone(OraTimeStampTZ)メソッド

- Closeメソッド

- Close(OraBFILE)メソッド

- CloseAll(OraBFILE)メソッド

- CommitTransメソッド

- Compare(OraLOB)メソッド

- ConnectSessionメソッド

- CopyToClipboardメソッド

- Copy(OraLOB)メソッド

- CopyFromFile(OraLOB)メソッド

- CopyFromBFILE(OraLOB)メソッド

- CopyToFile(OraLOB/BFILE)メソッド

- Cos(OraNumber)メソッド

- CreateAQメソッド

- CreateCustomDynasetメソッド

- CreateDatabasePoolメソッド

- CreateDynasetメソッド

- CreateIteratorメソッド

- CreateNamedSessionメソッド

- CreateOraIntervalDSメソッド

- CreateOraIntervalYMメソッド

- CreateOraNumberメソッド

- CreateOraObject(OraDatabase)メソッド

- CreateOraTimeStampメソッド

- CreateOraTimeStampTZメソッド

- CreatePLSQLCustomDynasetメソッド

- CreatePLSQLDynasetメソッド

- CreateSessionメソッド

- CreateSQLメソッド

- CreateTempBLOB/CLOBメソッド

サーバー・メソッド: DからH

- Deleteメソッド

- Delete(OraCollection)メソッド

- Delete(OraRef)メソッド

- DeleteIteratorメソッド

- Dequeue(OraAQ)メソッド

- Describeメソッド

- DestroyDatabasePoolメソッド

- DisableBuffering(OraLOB)メソッド

- Div(OraIntervalDS)メソッド

- Div(OraIntervalYM)メソッド

- Div(OraNumber)メソッド

- DynasetCacheParamsメソッド

- Editメソッド

- Edit(OraRef)メソッド

- ElementValueメソッド

- EnableBuffering(OraLOB)メソッド

- Enqueue(OraAQ)メソッド

- Erase(OraLOB)メソッド

- ExecuteSQLメソッド

- Exist(OraCollection)メソッド

- Exp(OraNumber)メソッド

- FetchOraRefメソッド

- FieldSizeメソッド

- FindFirst、FindLast、FindNextおよびFindPreviousメソッド

- Floor(OraNumber)メソッド

- FlushBuffer(OraLOB)メソッド

- GetDatabaseFromPoolメソッド

- GetChunkメソッド

- GetChunkByteメソッド

- GetChunkByteExメソッド

- GetXMLメソッド

- GetXMLToFileメソッド

- GetRowsメソッド

- Get_Valueメソッド

- HypCos(OraNumber)メソッド

- HypSin(OraNumber)メソッド

- HypTan(OraNumber)メソッド

サーバー・メソッド: IからL

- InitIteratorメソッド

- IsEqual(OraIntervalDS)メソッド

- IsEqual(OraIntervalYM)メソッド

- IsEqual(OraNumber)メソッド

- IsEqual(OraTimeStamp)メソッド

- IsEqual(OraTimeStampTZ)メソッド

- IsGreater(OraIntervalDS)メソッド

- IsGreater(OraIntervalYM)メソッド

- IsGreater(OraNumber)メソッド

- IsGreater(OraTimeStamp)メソッド

- IsGreater(OraTimeStampTZ)メソッド

- IsLess(OraIntervalDS)メソッド

- IsLess(OraIntervalYM)メソッド

- IsLess(OraTimeStamp)メソッド

- IsLess(OraTimeStampTZ)メソッド

- IterNextメソッド

- IterPrevメソッド

- LastServerErrResetメソッド

- Ln(OraNumber)メソッド

- Log(OraNumber)メソッド

サーバー・メソッド: MからS

- MatchPos(OraLOB/BFILE)メソッド

- Mod(OraNumber)メソッド

- MonitorForFailoverメソッド

- MonitorStart(OraAQ)メソッド

- MonitorStop(OraAQ)メソッド

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- MovePreviousn、MoveNextn、MoveRelおよびMoveToメソッド

- Mul(OraIntervalDS)メソッド

- Mul(OraIntervalYM)メソッド

- Mul(OraNumber)メソッド

- Neg(OraIntervalDS)メソッド

- Neg(OraIntervalYM)メソッド

- Neg(OraNumber)メソッド

- Open(OraServer)メソッド

- Open(OraBFILE)メソッド

- OpenDatabaseメソッド

- OriginalItemメソッド

- OriginalName

- Power(OraNumber)メソッド

- Put_Valueメソッド

- Read(OraLOB/BFILE)メソッド

- ReadChunkメソッド

- Refreshメソッド

- Refresh(OraRef)メソッド

- Registerメソッド

- Removeメソッド

- Remove(OraSubscriptionsコレクション)メソッド

- RemoveFromPoolメソッド

- ResetTransメソッド

- Rollbackメソッド

- Round(OraNumber)メソッド

- SetPi(OraNumber)メソッド

- Sin(OraNumber)メソッド

- Sqrt(OraNumber)メソッド

- Sub(OraIntervalDS)メソッド

- Sub(OraIntervalYM)メソッド

- Sub(OraNumber)メソッド

サーバー・メソッド: TからZ

- Tan(OraNumber)メソッド

- ToDateメソッド

- ToOraNumber(OraIntervalDS)メソッド

- ToOraTimeStampメソッド

- ToOraTimeStampLTZメソッド

- ToOraTimeStampTZメソッド

- ToUniversalTimeメソッド

- Trim(OraCollection)メソッド

- Trim(OraLOB)メソッド

- Trunc(OraNumber)メソッド

- Unregisterメソッド

- Updateメソッド

- Update(OraRef)メソッド

- Write(OraLOB)メソッド

Absメソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトの絶対値を計算します。

使用方法

OraNumber.Abs

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

Addメソッド

適用対象

OraParametersコレクション

説明

OraParametersコレクションにパラメータを追加します。

使用方法

oraparameters.Add Name, Value, IOType, ServerType, ObjectName

引数

このメソッドの引数は、次のとおりです。

引数

説明

Name

パラメータ・コレクションに追加するパラメータの名前。この名前は、パラメータを識別するため、および関連するSQL文とPL/SQL文内のプレースホルダとして使用されます。

Value

パラメータの初期値を指定するVariant。初期値によってこのパラメータのデータ型が定義されるため、重要です。

IOType

SQL文とPL/SQLブロック内でのパラメータの使用方法を指定する整数コード。

ServerType

このパラメータがバインドされるOracle Databaseの型を指定します。BLOB、CLOB、BFILE、OBJECT、REF、NESTED TABLEまたはVARRAYへのバインド時に、この指定が必要です。指定できる値のリストは、「ServerTypeプロパティ」のOraParameterを参照してください。

ObjectName

大/小文字が区別され、Object名を含む文字列。ServerTypeがORATYPE_OBJECT、ORATYPE_VARRAYまたはORATYPE_TABLEの場合にのみ、この指定が必要です。ServerTypeは、PL/SQLでREFが使用される場合、ORATYPE_REFに必要です。

IOTypeの設定

IOTypeの設定内容は、次のとおりです。

設定

値

説明

ORAPARM_INPUT

1

入力変数にのみ使用

ORAPARM_OUTPUT

2

出力変数にのみ使用

ORAPARM_BOTH

3

入力変数と出力変数の両方に使用

これらの値は、oraconst.txtファイルにあります。

ServerTypeがVAR、VARCHAR2およびORATYPE_RAW_BINであるORAPARM_OUTPUT変数の最大サイズは、デフォルトで128バイトに設定されます。この値を変更するには、MinimumSizeプロパティを使用します。VARおよびVARCHAR2に対するORAPARM_OUTPUT変数の最小サイズは、データベースの列から予測されるデータのサイズより常に大きい値に設定する必要があります。

この値が正しいことを確認してください。パラメータのタイプがINであるストアド・プロシージャに対してORAPARM_BOTHなど、不正なオプションを指定すると、結果はエラーになります。ORAPARM_BOTHは、INおよびOUTのパラメータ専用です。INパラメータを持つストアド・プロシージャとOUTパラメータを持つ別のストアド・プロシージャに対してこれを使用するわけではありません。この場合は、2つのパラメータを使用します。このようなエラーが発生することはまれですが、パラメータに関するエラーが発生した場合は、IOTypeが正しいことを確認してください。

Value引数には、OraBLOBなどのOracle Database 10gオブジェクトを使用できます。その時点でオブジェクトのコピーが作成されるので、パラメータの値を参照する新規オブジェクトを取得するためにValueプロパティにアクセスする必要があることに注意してください。たとえば、IOTypeがORATYPE_BOTHで、ダイナセットから取得したOraBLOBが入力値として渡される場合、新たに更新されたパラメータの出力値を取得するためには、SQLが実行された後にParameterのValueプロパティに1回アクセスする必要があります。オブジェクトは、ダイナセットから取得する場合と同様の方法でパラメータから取得されます。

Valueプロパティは、常にパラメータの最新の値を参照します。Visual BasicのNULL値を値として渡すこともできます。Visual BasicのEMPTY値は、BLOBおよびCLOBデータ型に対しては空のLOBを意味する目的で、OBJECT、VARRAYおよびNESTED TABLEデータ型に対してはオブジェクトの属性がすべてNULLであることを意味する目的で使用できます。

備考

パラメータを使用して、(SQL文を再構築するかわりに)SQLバインド変数を表します。SQLバインド変数は、問合せを再解析することなくパラメータ値を変更できるため便利です。SQLバインド変数は、入力変数としてのみ使用します。

パラメータを使用して、PL/SQLバインド変数を表すこともできます。PL/SQLのバインド変数は、入力と出力両方の変数として使用できます。

Oracle Raw型の列にバインドする場合は、ServerType値にORATYPE_RAW_BINを使用します。値のPutまたはGetには、バイト配列を使用します。ORATYPE_RAW_BINバインド・バッファの最大許容サイズは、表の列にバインドする場合は2000バイト、ストアド・プロシージャにバインドする場合は32KBです。コード例は、ORACLE_BASE\\ORACLE_HOME\OO4O\VB\Rawディレクトリにあるサンプルを参照してください。

例

この例では、AddおよびRemoveパラメータ・メソッド、ServerTypeパラメータ・プロパティ、(ORAEXAMP.SQLにある)ストアド・プロシージャおよびファンクションをコールするExecuteSQLデータベース・メソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Add EMPNO as an Input/Output parameter and set its initial value.
OraDatabase.Parameters.Add "EMPNO", 7369, ORAPARM_INPUT
OraDatabase.Parameters("EMPNO").ServerType = ORATYPE_NUMBER

'Add ENAME as an Output parameter and set its initial value.
OraDatabase.Parameters.Add "ENAME", 0, ORAPARM_OUTPUT
OraDatabase.Parameters("ENAME").ServerType = ORATYPE_VARCHAR2

'Add SAL as an Output parameter and set its initial value.
OraDatabase.Parameters.Add "SAL", 0, ORAPARM_OUTPUT
OraDatabase.Parameters("SAL").ServerType = ORATYPE_NUMBER

'Execute the Stored Procedure Employee.GetEmpName to retrieve ENAME.
' This Stored Procedure can be found in the file ORAEXAMP.SQL.
OraDatabase.ExecuteSQL ("Begin Employee.GetEmpName (:EMPNO, :ENAME); end;")
'Display the employee number and name.

'Execute the Stored Function Employee.GetSal to retrieve SAL.
' This Stored Function can be found in the file ORAEXAMP.SQL.
OraDatabase.ExecuteSQL ("declare SAL number(7,2); Begin" & _
":SAL:=Employee.GetEmpSal (:EMPNO); end;")

'Display the employee name, number and salary.
MsgBox "Employee " & OraDatabase.Parameters("ENAME").value & ", #" & _
OraDatabase.Parameters("EMPNO").value & ",Salary=" & _
OraDatabase.Parameters("SAL").value

'Remove the Parameters.
OraDatabase.Parameters.Remove "EMPNO"
OraDatabase.Parameters.Remove "ENAME"
OraDatabase.Parameters.Remove "SAL"

End Sub

関連項目:

- OraParameterオブジェクト

- Removeメソッド

- ServerTypeプロパティ

Add(OraIntervalDS)メソッド

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトに引数を加算します。

使用方法

OraIntervalDS.Add operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

加算するVariant型の文字列、数値またはOraIntervalDSオブジェクト。

備考

この操作の結果は、OraIntervalDSオブジェクトに格納され、以前の値は上書きされます。戻り値はありません。

operandがVariant型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。

operandが数値の場合、提供される値は、構成されたOraIntervalDSオブジェクトが表す合計日数を表す必要があります。

例

Dim oraIDS as OraIntervalDS

'Create an OraIntervalDS using a string which represents
'1 day and 12 hours
Set oraIDS = oo4oSession.CreateOraIntervalDS("1 12:0:0.0")

'Add an interval using a string, which represents 2 days
'and 12 hours, to oraIDS.
'The resulting oraIDS is an interval which represents 4 days
oraIDS.Add "2 12:0:0.0"

関連項目:
CreateOraIntervalDSメソッド

Add(OraIntervalYM)メソッド

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalYMオブジェクトに引数を加算します。

使用方法

OraIntervalYMObj.Add operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

加算するVariant型の文字列、数値またはOraIntervalYMオブジェクト。

備考

この操作の結果は、OraIntervalYMオブジェクトに格納され、以前の値は上書きされます。戻り値はありません。

operandがVariant型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。

operandが数値の場合、提供される値は、構成されたOraIntervalYMオブジェクトが表す合計年数を表す必要があります。

例

Dim oraIYM as OraIntervalYM

'Create an OraIntervalYM using a string which represents 1 year and 6 months
Set oraIYM = oo4oSession.CreateOraIntervalYM("1-6")

'Add an interval using a string, which represents 2 years
'and 6 months, to oraIYM.
'The resulting oraIYM is an interval which represents 4 years
oraIYM.Add "2-6"

関連項目:
CreateOraIntervalYMメソッド

Add(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトに数値引数を追加します。

使用方法

OraNumber.Add operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

Variant型の文字列、OraNumberオブジェクトまたは数値。

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

Add(OraSubscriptionsコレクション)メソッド

適用対象

OraSubscriptionsコレクション

説明

OraSubscriptionsコレクションにサブスクリプションを追加します。

使用方法

orasubscriptions.Add Name, DbeventsHdl, Ctx

引数

このメソッドの引数は、次のとおりです。

変数

説明

[in] Name

対象となるデータベース・イベント。このメソッドより前に、適切なイベント・トリガーおよびAQキューを設定する必要があります。
Nameは、シングル・コンシューマ・キューに対する登録の場合は文字列'SCHEMA.QUEUE'の形式、複数コンシューマ・キューに対する登録の場合は文字列'SCHEMA.QUEUE:CONSUMER_NAME'の形式のサブスクリプション名です。

Name文字列には大文字を使用してください。

[in] DbeventsHdl

データベース・イベント・ハンドラ。対象のデータベース・イベントの起動時にコールされるNotifyDBEventsメソッドを実装するIDispatchインタフェースです。

[in] Ctx

NotifyDbEventsメソッドがコールされるときにアプリケーションが渡す必要があるコンテキスト固有の情報。

備考

データベース・イベントのサブスクリプションを登録するには、Addメソッドのコール時に、対象のサブスクリプションを識別する名前と、イベントを処理するdbeventハンドラの名前を渡す必要があります。データベース・イベントのサポートに必要なキューおよびイベント・トリガーは、サブスクリプションの起動より前に設定してください。

dbeventハンドラは、NotifyDBEventsメソッドを実装するオートメーション・オブジェクトであることが必要です。

NotifyDBEventsハンドラ

NotifyDBEventsメソッドは、対象のデータベース・イベントが起動されたときに、Oracle Objects for OLEによってコールされます。

Oracle Databaseイベントに対するキューおよびトリガーの設定方法の詳細は、『Oracle Database概要』のシステム・イベントとユーザー・イベントのトリガーに関する説明を参照してください。

このメソッドの構文は、次のとおりです。

Public Function NotifyDBEvents(ByVal Ctx As Variant, ByVal Payload As Variant

変数

このメソッドの変数は、次のとおりです。

変数

説明

[in] Ctx

アプリケーションによってOraSubscriptions.Addメソッドに渡されます。アプリケーションがdbeventハンドラに渡す必要があるコンテキスト依存の情報です。

[in] Payload

この通知のペイロード。
イベント・トリガーおよびキューを設定することによって、データベース・イベントが起動します。この場合のPayloadとは、イベントのトリガー時にキューにエンキューされたペイロード(存在する場合)を表します。

例

例: データベース・イベントが通知されるようにアプリケーションを登録する方法

次の例では、アプリケーションが、データベース・ログイン・イベント(データベースへのすべてのログインなど)の通知をサブスクライブします。ユーザーがデータベースにログインすると、サブスクリプション時に渡されたDBEventsHdlrのNotifyDBEventsメソッドがコールされます。コンテキスト依存の情報およびイベント固有の情報がNotifyDBEventsメソッドに渡されます。

この例のDBEventsHdlrは、後で定義されるDBEventClsです。

メイン・アプリケーション:

' First instantiate the dbevent handler. The dbevent notification
' will fire the NotifyDBEvents on the callback handler.

Public DBEventsHdlr As New DBEventCls
Private Sub Form_Load()
Dim gOraSession As Object
Dim gOraSubscriptions As OraSubscriptions
Dim gOraDatabase As OraDatabase

'Create the OraSession Object
Set gOraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set gOraDatabase = gOraSession.DbOpenDatabase
("ora90.us.oracle.com", "pubsub/pubsub",
ORADB_ENLIST_FOR_CALLBACK)
Set gOraSubscriptions = gOraDatabase.Subscriptions
gOraSubscriptions.Add "PUBSUB.LOGON:ADMIN", DBEventsHdlr,
gOraDatabase
gOraSubscriptions(0).Register
MsgBox "OK"
End Sub

NotifyDBEventsメソッドを定義するデータベース・イベント・ハンドラ・クラス。

Public countofMsgs as integer
Public Function NotifyDBEvents(Ctx As Variant, Payload As Variant )
On error goto NotifyMeErr

MsgBox "Retrieved payload " + Payload
' do something - here the subscription is unregistered after
' receiving 3 notifications
countofMsgs = countofMsgs + 1
If countofMsgs > 3 Then
Ctx.Subscriptions(0).UnRegister
End If
Exit Sub
NotifyMeErr:
Call RaiseError(MyUnhandledError, "newcallback:NotifyMe Method")

End Sub

関連項目:

- この例に関係する概念の詳細は、「データベース・イベント」を参照してください。

- Oracle Databaseイベントに対するキューおよびトリガーの設定方法の詳細は、『Oracle Database概要』のシステム・イベントとユーザー・イベントのトリガーに関する項を参照してください。

- OraSubscriptionオブジェクト

- Remove(OraSubscriptionsコレクション)メソッド

AddIntervalDSメソッド

適用対象

OraTimeStampオブジェクト

OraTimeStampTZオブジェクト

説明

日数から秒数までの間隔を表す時間隔をOraTimeStampまたはOraTimeStampTZオブジェクトに加算します。

使用方法

OraTimeStampObj.AddIntervalDS operand
OraTimeStampTZObj.AddIntervalDS operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

現行のOraTimeStampまたはOraTimeStampTZオブジェクトに加算する、日数から秒数までの間隔を表すVariant型の文字列、数値またはOraIntervalDSオブジェクト。

備考

現行のOraTimeStampまたはOraTimeStampTZオブジェクトに対する間隔の加算結果は、現行オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。

operandがVariant型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。

operandが数値の場合、提供される値は、構成されたOraIntervalDSオブジェクトが表す合計日数を表す必要があります。

例

OraTimeStampの使用方法

Dim OraTimeStamp As OraTimeStamp

...

'Create OraTimeStamp using a string
Set OraTimeStamp = OraSession.CreateOraTimeStamp("2000-12-28 00:00:00", _
"YYYY-MM-DD HH:MI:SS")

'Add an interval using numeric value that represents 5 days and 12 hours
OraTimeStamp.AddIntervalDS 5.5

'Value should now be "2001-1-2 12:00:00"
tsStr = OraTimeStamp.Value

OraTimeStampTZの使用方法

Dim OraTimeStampTZ As OraTimeStampTZ

...

'Create OraTimeStampTZ using a string
Set OraTimeStamp = OraSession.CreateOraTimeStampTZ("2000-12-28 00:00:00 -07:00", _
"YYYY-MM-DD HH:MI:SS TZH:TZM")

'Add an interval using numeric value that represents 5 days and 12 hours
OraTimeStampTZ.AddIntervalDS 5.5

'Value should now be "2001-1-2 12:00:00"
tstzStr = OraTimeStampTZ.Value

...

AddIntervalYMメソッド

適用対象

OraTimeStampオブジェクト

OraTimeStampTZオブジェクト

説明

年数から月数までの間隔を表す時間隔をOraTimeStampまたはOraTimeStampTZオブジェクトに加算します。

使用方法

OraTimeStampObj.AddIntervalYM operand
OraTimeStampTZObj.AddIntervalYM operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

現行のOraTimeStampまたはOraTimeStampTZオブジェクトに加算する、年数から月数までの間隔を表すVariant型の文字列、数値またはOraIntervalYMオブジェクト。

備考

現行のOraTimeStampまたはOraTimeStampTZオブジェクトに対する間隔の加算結果は、現行オブジェクトに格納され、以前の値は上書きされます。戻り値はありません。

operandがVariant型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。

operandが数値の場合、提供される値は、構成されたOraIntervalYMオブジェクトが表す合計年数を表す必要があります。

例

例: OraTimeStampオブジェクトの使用方法

Dim OraTimeStamp As OraTimeStamp

...
'Create OraTimeStamp using a string
Set OraTimeStamp = OraSession.CreateOraTimeStamp("2000-12-28 00:00:00", _
"YYYY-MM-DD HH:MI:SS")

'Add an interval using numeric value that represents 2 years
OraTimeStamp.AddIntervalYM 2

'Value should now be "2002-12-28 00:00:00"
tsStr = OraTimeStamp.Value

...

例: OraTimeStampTZオブジェクトの使用方法

Dim OraTimeStampTZ As OraTimeStampTZ

...
'Create OraTimeStampTZ using a string
Set OraTimeStampTZ =OraSession.CreateOraTimeStampTZ("2000-12-28 00:00:00" & _
"-07:00"  "YYYY-MM-DD HH:MI:SS TZH:TZM")

'Add an interval using numeric value that represents 2 years
OraTimeStampTZ.AddIntervalYM 2

'Value should now be "2002-12-28 00:00:00"
tstzStr = OraTimeStampTZ.Value

...

AddNewメソッド

適用対象

OraDynasetオブジェクト

説明

コピー・バッファを消去し、指定したダイナセットおよび関連データベースへのレコード挿入操作を開始します。

使用方法

oradynaset.AddNew
oradynaset.DbAddNew

備考

AddNew操作が開始されるとき、ダイナセット内のフィールドの値はコピー・バッファ内に保持され、データベースの実際の内容には反映されません。

フィールドの値は、OraFieldオブジェクトを介して変更され、Update操作時またはデータベース内で移動が発生した際にコミットされて、新しい行が破棄されます。明示的に割り当てられていないフィールド値は、OpenDatabaseメソッドがコールされたときに使用されたオプション・フラグの列デフォルト・モードに応じて、Nullに設定されるか、またはOracleのデフォルト・メカニズムによってデフォルト値に設定できます。いずれの場合も、データベース表には存在し、ダイナセットには存在しないフィールドは、Oracleのデフォルト・メカニズムによって常にデフォルト値に設定されます。

レコードは、内部的には"INSERT into TABLE (...) VALUES (...)" SQL文を使用してAddNewメソッドによって挿入され、表の最後に追加されます。

オブジェクト型、コレクション型およびREF型の列を含んだ行を追加する場合は、これらの型の列値として有効なOraObject、OraCollectionまたはOraRefインタフェース、あるいはNULL値を設定してください。この列値は、CreateOraObjectメソッドによって戻されるオートメーション・オブジェクトを使用して設定することもできます。BLOB、CLOBまたはBFILEの列を含んだ行を追加する場合は、これらの型の列値として有効なOraBLOB、OraCLOBまたはOraBFILEインタフェース、NULL、あるいはEmptyを設定してください。BLOB、CLOBおよびBFILE型の列にEmpty値を設定すると、データベースに空のLOB値が挿入されます。

注意:
Edit、AddNewまたはDeleteメソッドのコールでは、未処理のEditまたはAddNewメソッドのコールは処理前に取り消されます。Updateメソッドを使用して保存されていない未処理の変更は、すべて取消処理中に失われます。

例

この例では、AddNewおよびUpdateメソッドを使用して、ダイナセットに新規レコードを追加する方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.

Set OraDatabase = OraSession.OpenDatabase("ExampleDb", _
"scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)
'Begin an AddNew.
OraDynaset.AddNew

'Set the field(column) values.
OraDynaset.Fields("EMPNO").Value = "1000"
OraDynaset.Fields("ENAME").Value = "WILSON"
OraDynaset.Fields("JOB").Value = "SALESMAN"

OraDynaset.Fields("MGR").Value = "7698"
OraDynaset.Fields("HIREDATE").Value = "19-SEP-92"
OraDynaset.Fields("SAL").Value = 2000
OraDynaset.Fields("COMM").Value = 500
OraDynaset.Fields("DEPTNO").Value = 30

'End the AddNew and Update the dynaset.
OraDynaset.Update

MsgBox "Added one new employee."

End Sub

関連項目:

- Deleteメソッド

- Editメソッド

- EditModeプロパティ

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- Updateメソッド

- Validateイベント

AddTableメソッド

適用対象

OraParametersコレクション

説明

OraParametersコレクションに配列パラメータを追加します。

使用方法

oraparamarray.AddTable  Name, IOType, ServerType, ArraySize , ElementSize, ObjectName

引数

このメソッドの引数は、次のとおりです。

引数

説明

Name

パラメータ・コレクションに追加するパラメータの名前。この名前は、パラメータを識別するため、および関連するSQL文とPL/SQL文内のプレースホルダとして使用されます。

IOType

SQL文とPL/SQLブロック内でのパラメータの使用方法を指定する整数コード。

ServerType

この配列パラメータがバインドされるOracle Databaseの型を指定します。指定できる値のリストは、「ServerTypeプロパティ」のOraParameterを参照してください。

ArraySize

パラメータの配列要素の数を指定します。このパラメータは、最大バッファ長を計算するために使用されます。

ElementSize [オプション]

要素のサイズを定義します。文字および文字列型の表(配列)パラメータにのみ有効です。ElementSizeの有効サイズは、VarTypeによって異なります。
ElementSizeの指定は、charおよびstring型にバインドする場合以外はオプションです。

ObjectName

大/小文字が区別され、Object名を含む文字列。ServerTypeがORATYPE_OBJECT、ORATYPE_VARRAYまたはORATYPE_TABLEの場合にのみ、この指定が必要です。これは、PL/SQLでREFが使用される場合、ORATYPE_REFに必要です。

IOTypeの設定

IOTypeの設定内容は、次のとおりです。

定数

値

説明

ORAPARM_INPUT

1

入力変数にのみ使用

ORAPARM_OUTPUT

2

出力変数にのみ使用

ORAPARM_BOTH

3

入力変数と出力変数の両方に使用

この値が正しいことを確認してください。パラメータのタイプがINであるストアド・プロシージャに対してORAPARM_BOTHなど、不正なオプションを指定すると、結果はエラーになります。ORAPARM_BOTHは、INおよびOUTのパラメータ専用です。INパラメータを持つストアド・プロシージャとOUTパラメータを持つ別のストアド・プロシージャに対してこれを使用するわけではありません。この場合は、2つのパラメータを使用します。このようなエラーが発生することはまれですが、パラメータに関するエラーが発生した場合は、IOTypeが正しいことを確認してください。

ServerType

有効な型は、ServerTypeプロパティを参照し、次の点に注意してください。

注意:

- 外部データ型のORATYPE_NUMBERには、1から38の桁精度を使用できます。

- 正の数の最大は、0.99999999999999999999 E + 38です。

- 正の数の最小は、0.1 E-38です。

- 負の数の最小は、-0.99999999999999999999 E + 38です。

- 負の数の最大は、0.1 E -38です。

ElementSize(オプション)

文字、文字列およびRAW型に有効です。ElementSizeの有効サイズは、VarTypeによって異なります。このサイズは、個々の文字列またはRAW配列要素の長さを表します。有効範囲は、次のとおりです。

VarType

サイズ

ORATYPE_VARCHAR2

有効範囲は、1から1999

ORATYPE_VARCHAR

有効範囲は、1から1999

ORATYPE_STRING

有効範囲は、1から1999

ORATYPE_CHAR

有効範囲は、1から255

ORATYPE_CHARZ

有効範囲は、1から255

ORATYPE_RAW_BIN

有効範囲は、1から4000(備考を参照)

備考

SQL文を再構築するかわりに、パラメータを使用して、配列を挿入、更新および削除するためのSQLバインド変数を表します。SQLバインド変数は、問合せを再解析することなくパラメータ値を変更できるため便利です。SQLバインド変数は、入力変数としてのみ使用します。

パラメータを使用して、PL/SQLバインド(IN/OUT)変数を表すこともできます。PL/SQLのバインド変数は、入力と出力両方の変数として使用できます。

Oracle Raw型の列にバインドする場合は、ServerType値にORATYPE_RAW_BINを使用します。値のPutまたはGetには、バイト配列を使用します。ORATYPE_RAW_BINバインド・バッファの最大許容サイズは、表の列にバインドする場合は2000バイト、ストアド・プロシージャにバインドする場合は32KBです。どの要素(ElementSize引数を参照)も、ストアド・プロシージャにバインドする場合で4000バイト、表の列にバインドする場合で2000バイトを超えることはできません。コード例は、ORACLE_BASE\\ORACLE_HOME\OO4O\VB\Rawディレクトリにあるサンプルを参照してください。

例

「例: PL/SQLでOraParamArraysを使用する方法」を参照してください。

関連項目:
ServerTypeプロパティ

Append(OraCollection)メソッド

適用対象

OraCollectionオブジェクト

説明

コレクションのサイズを1つ拡張し、コレクションの最後にVariant型の値を追加します。

使用方法

OraCollection.Append element

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] element

追加する値を表すVariant。

備考

OraCollectionがObject型またはREF型のコレクションの場合、要素を示す引数は有効なOraObjectまたはOraRefを表します。

例

次の例では、Appendメソッドの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraCollectionの例で使用されているスキーマ・オブジェクト」を参照してください。

例: OraCollectionオブジェクトに対するAppendメソッドの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim EnameList as OraCollection

'create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from department
set OraDynaset = OraDatabase.CreateDynaset("select * from department", 0&)

'retrieve a Enames column from Department.
'Here Value property of OraField object returns EnameList OraCollection
set EnameList = OraDynaset.Fields("Enames").Value

'Append an "Eric" to the collection.
'Before that row level lock should be obtained
OraDynaset.Edit
EnameList.Append "Eric"
OraDynaset.Update

Append(OraLOB)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

説明

入力用OraLOBオブジェクトのLOBデータをこのインスタンスの内部LOB値に追加します。

使用方法

OraBlob.Append srcBlob
OraClob.Append srcClob

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] srcLOB

OraBLOBまたはOraCLOB型の有効なオブジェクト。

備考

入力用LOBのLOBデータを現行LOB値の最後に追加します。このメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。

AppendChunkメソッド

適用対象

OraFieldオブジェクト

説明

コピー・バッファ内のLONGまたはLONG RAW型のフィールドに文字列のデータを追加します。

使用方法

orafield.AppendChunk(string)
orafield.DbAppendChunk(string)

引数

このメソッドの引数は、次のとおりです。

引数

説明

string

指定したフィールドに追加するデータ。

備考

AppendChunkメソッドでは、64KBを超えるデータ・フィールドを操作できます。

例

注意:
この例は、このままでは実行できません。これには、frmChunkという名前の定義済フォームが必要です。

この例では、AppendChunkメソッドを使用して、データベース内のLONG RAW型の列にファイルを読み込む方法を示します。この例では、longrawという列を含んだ表を示すOraDynasetという有効なダイナセットが存在していると想定しています。このコードをfrmChunkというフォームの定義セクションにコピーしてください。このプロシージャは、有効なfilenameを使用してコールしてください。

Sub AppendChunkExample (FName As String)

'Declare various variables.
Dim NumChunks As Integer, RemChunkSize As Integer
Dim TotalSize As Long, CurChunk As String
Dim I As Integer, FNum As Integer, ChunkSize As Integer

'Set the size of each chunk.
ChunkSize = 10240

frmChunk.MousePointer = HOURGLASS

'Begin an add operation.
OraDynaset.AddNew

'Clear the LONGRAW field.
OraDynaset.Fields("LONGRAW").Value = ""

'Get a free file number.
FNum = FreeFile

'Open the file.
Open FName For Binary As #FNum

'Get the total size of the file.

TotalSize = LOF(FNum)

'Set number of chunks.
NumChunks = TotalSize \ ChunkSize

'Set number of remaining bytes.
RemChunkSize = TotalSize Mod ChunkSize

'Loop through the file.
For I = 0 To NumChunks

'Calculate the new chunk size.
If I = NumChunks Then
ChunkSize = RemChunkSize
End If

CurChunk = String$(ChunkSize, 32)

'Read a chunk from the file.
Get #FNum, , CurChunk

'Append chunk to LONGRAW field.
OraDynaset.Fields("LONGRAW").AppendChunk (CurChunk)

Next I

'Complete the add operation and update the database.
OraDynaset.Update

'Close the file.
Close FNum

frmChunk.MousePointer = DEFAULT

End Sub

関連項目:

- LONG RAWからLOBまたはBFILEへの移行

- FieldSizeメソッド

- GetChunkメソッド

- Typeプロパティ

AppendChunkByteメソッド

適用対象

OraFieldオブジェクト

説明

コピー・バッファ内のLONGまたはLONG RAW型のフィールドにバイト配列のデータを追加します。

使用方法

orafield.AppendChunkByte(ByteArray, numbytes)

引数

このメソッドの引数は、次のとおりです。

引数

説明

Byte Array

指定したフィールドに追加するデータ。

numbytes

コピーするバイト数。

備考

AppendChunkByteメソッドでは、64KBを超えるデータ・フィールドを操作できます。

例

注意:
この例は、参照用の不完全なサンプル・コードです。このサンプル・コードに基づいたLONGRAWという完全なVisual Basicサンプルが、OO4Oサンプル・ディレクトリに用意されています。

このサンプル・コードでは、AppendChunkByteメソッドを使用して、データベース内のLONG RAW型の列にファイルを読み込む方法を示します。このコードでは、longrawという列を含んだ表を示すOraDynasetという有効なダイナセットが存在していると想定しています。

Sub AppendChunkByteExample (FName As String)

'Declare various variables.
Dim NumChunks As Integer, RemChunkSize As Integer
Dim TotalSize As Long, CurChunkByte() As Byte
Dim I As Integer, FNum As Integer, ChunkSize As Integer
'Set the size of each chunk.
ChunkSize = 10240
frmChunk.MousePointer = HOURGLASS

'Begin an add operation.
OraDynaset.AddNew
'Clear the LONGRAW field.
OraDynaset.Fields("LONGRAW").Value = ""

'Get a free file number.
FNum = FreeFile

'Open the file.
Open FName For Binary As #FNum

'Get the total size of the file.
TotalSize = LOF(FNum)

'Set number of chunks.
NumChunks = TotalSize \ ChunkSize

'Set number of remaining bytes.
RemChunkSize = TotalSize Mod ChunkSize

'Loop through the file.
For I = 0 To NumChunks

'Calculate the new chunk size.
If I = NumChunks Then
ChunkSize = RemChunkSize

End If

ReDim CurChunkByte(ChunkSize)

'Read a chunk from the file.
Get #FNum, , CurChunkByte

'Append chunk to LONGRAW field.
OraDynaset.Fields("LONGRAW").AppendChunkByte (CurChunkByte)
Next I
'Complete the add operation and update the database.
OraDynaset.Update

'Close the file.
Close FNum

frmChunk.MousePointer = DEFAULT

End Sub

関連項目:
LONG RAWからLOBまたはBFILEへの移行

AQAgent(OraAQMsg)メソッド

適用対象

OraAQMsgオブジェクト

説明

指定したコンシューマに対してOraAQAgentのインスタンスを作成し、メッセージのOraAQAgentリストに追加します。

使用方法

Set agent = qMsg.AQAgent(name)

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] name

メッセージのコンシューマ名を表す30バイトまでの文字列。

[in] [オプション] Address

プロトコル固有の受信者アドレスを表す128バイトの文字列。例: [schema.]queue[@dblink]

備考

OraAQAgentは、メッセージ受信者を表すオブジェクトで、複数のコンシューマを許可するキューに対してのみ有効です。キューのサブスクライバはデフォルトで受信者です。このオブジェクトを使用して、デフォルトのコンシューマを上書きします。

OraAQAgentオブジェクトは、AQAgentメソッドをコールすることによってインスタンス化できます。次に、例を示します。

Set agent = qMsg.AQAgent(consumer)

1つのメッセージがサポートできるエージェントの最大数は10です。

AQAgentメソッドはOraAQAgentオブジェクトのインスタンスを戻します。

注意:
このリリースでAddressはサポートされません(今後、サポートする予定です)。

AQMsg(OraAQ)メソッド

適用対象

OraAQオブジェクト

説明

指定したオプションに対してOraAQMsgを作成します。

使用方法

Set qMsg = Q.AQMsg(msgtype, typename, schema)

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] msgtype

RAWまたはユーザー定義型を示すInteger。RAW型に対してはオプションです。次の値を指定できます。

- ORATYPE_RAW(23) - メッセージ型はRAW型。

- ORATYPE_OBJECT(108) - メッセージ型はユーザー定義型。

[in] typename

型名を示すString。RAW型に対してはオプションです。デフォルトは'RAW'です。

[in] [オプション] schema

型が定義されたスキーマを表すString。デフォルトは'SYS'です。

備考

このメソッドは次のように使用できます。

set QMsg = Q.AQMsg(ORATYPE_OBJECT,"MESSAGE_TYPE","SCOTT")
set QMsg = Q.AQMsg

ArcCos(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトのアーク・コサインを計算します。結果はラジアンになります。

使用方法

OraNumber.ArcCos

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

OraNumberの値が-1未満または1を超える場合、このメソッドはエラーを戻します。

ArcSin(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトのアーク・サインを計算します。結果はラジアンになります。

使用方法

OraNumber.ArcSin

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

OraNumberオブジェクトが-1未満または1を超える場合、このメソッドはエラーを戻します。

ArcTan(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトのアーク・タンジェントを計算します。結果はラジアンになります。

使用方法

OraNumber.ArcTan

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

ArcTan2(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

指定されたoperandを使用して、2つの数のアーク・タンジェントを計算します。結果はラジアンになります。

使用方法

OraNumber.ArcTan2 operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

Variant型の文字列、OraNumberまたは数値。

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

operandが0(ゼロ)の場合、このメソッドはエラーを戻します。

Attribute(OraMetaData)メソッド

適用対象

OraMetaDataオブジェクト

説明

指定したindexのOraMDAttributeオブジェクトを戻します。

使用方法

Set OraMDAttribute = OraMetaData.Attribute(2)
Set OraMDAttribute = OraMetaData.Attribute("AttributeName")

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] index

0からcount-1の範囲にある整数の索引、または属性の名前を表す文字列。

備考

なし

関連項目:
指定できる属性名のリストは、「OraMetaDataオブジェクト」を参照してください。

AutoBindDisableメソッド

適用対象

OraParameterオブジェクト

OraParamArrayオブジェクト

説明

パラメータのAutoBind状態をリセットします。

使用方法

oraparameter.AutoBindDisable

備考

パラメータがAutoBindDisabled状態の場合、SQLまたはPL/SQL文には自動的にバインドされません。

例

この例では、異なるパラメータを使用する各種ダイナセットの作成時に、AutoBindDisableおよびAutoBindEnableメソッドを使用して不要なパラメータをバインドしないようにする方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession. OpenDatabase("ExampleDb", _
"scott/tiger", 0&)

'Add the job input parameter with initial value MANAGER.
OraDatabase.Parameters.Add "job", "MANAGER", 1

'Add the deptno input parameter with initial value 10.
OraDatabase.Parameters.Add "deptno", 10, 1

'Disable the deptno parameter for now.
OraDatabase.Parameters("deptno").AutoBindDisable

'Create the OraDynaset Object using the job parameter.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp" & _
"where job = :job", 0&)

'Only employees with job=MANAGER will be contained in the dynaset.
MsgBox "Employee #" & OraDynaset.Fields("empno").value & ", " & _
"Job=" & OraDynaset.Fields("job").value

'Enable the deptno parameter and disable the job parameter.
OraDatabase.Parameters("deptno").AutoBindEnable
OraDatabase.Parameters("job").AutoBindDisable

'Create the OraDynaset Object using the deptno parameter.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp" & _
"where deptno = :deptno", 0&)

'Only employees with deptno=10 will be contained in the dynaset.
MsgBox "Employee #" & OraDynaset.Fields("empno").value & "," & _
"DeptNo=" & OraDynaset.Fields("deptno").value

End Sub

関連項目:
AutoBindEnableメソッド

AutoBindEnableメソッド

適用対象

OraParameterオブジェクト

OraParamArrayオブジェクト

説明

パラメータのAutoBind状態を設定します。

使用方法

oraparameter.AutoBindEnable

備考

パラメータがAutoBindEnabled状態の場合、SQLまたはPL/SQL文に自動的にバインドされます。

例

この例では、異なるパラメータを使用する各種ダイナセットの作成時に、AutoBindDisableおよびAutoBindEnableメソッドを使用して不要なパラメータをバインドしないようにする方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession. OpenDatabase("ExampleDb", _
"scott/tiger", 0&)

'Add the job input parameter with initial value MANAGER.
OraDatabase.Parameters.Add "job", "MANAGER", 1

'Add the deptno input parameter with initial value 10.
OraDatabase.Parameters.Add "deptno", 10, 1

'Disable the deptno parameter for now.
OraDatabase.Parameters("deptno").AutoBindDisable

'Create the OraDynaset Object using the job parameter.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp" & _
"where job = :job", 0&)

'Only employees with job=MANAGER will be contained in the dynaset.
MsgBox "Employee #" & OraDynaset.Fields("empno").value & "," &  _
"Job=" & OraDynaset.Fields("job").value

'Enable the deptno parameter and disable the job parameter.
OraDatabase.Parameters("deptno").AutoBindEnable
OraDatabase.Parameters("job").AutoBindDisable

'Create the OraDynaset Object using the deptno parameter.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp" & _
"where deptno = :deptno", 0&)

'Only employees with deptno=10 will be contained in the dynaset.
MsgBox "Employee #" & OraDynaset.Fields("empno").value & "," & _
"DeptNo=" & OraDynaset.Fields("deptno").value

End Sub

関連項目:
AutoBindDisableメソッド

BeginTransメソッド

適用対象

OraConnectionオブジェクト

OraDatabaseオブジェクト

OraSessionオブジェクト

説明

指定したセッション内で、データベースのトランザクションを開始します。

使用方法

oraconnection.BeginTrans
oradatabase.BeginTrans
orasession.BeginTrans

備考

このメソッドのコール後、CommitTransが発行されるまで、データベース・トランザクションはコミットされません。Rollbackメソッドを使用すると、セッションをロールバックできます。BeginTransメソッドでトランザクションをすでに開始しているときに、BeginTransメソッドを再度使用するとエラーが発生します。

BeginTrans発行後に、グローバル・トランザクション内のダイナセットの所定の行でUpdateまたはDeleteメソッドに失敗すると、UpdateまたはDeleteメソッドをコールした行がロックされたままになることに注意してください。このロックは、CommitTransまたはRollbackメソッドをコールするまで解除されません。

注意:
OraDatabaseオブジェクトがMicrosoft Transaction Server(MTS)にリストされていて、グローバルMTSトランザクションの一部である場合、このメソッドは無効です。

例

この例では、BeginTransメソッドを使用してダイナセットの一連の編集を1つのトランザクションにグループ化し、Rollbackを使用してその変更内容を取り消す方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim fld As OraField

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession. OpenDatabase("ExampleDb", _
"scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

'Start Transaction processing.
OraSession.BeginTrans

'Setup a field object to save object references.
Set fld = OraDynaset.Fields("sal")

'Traverse until EOF is reached, setting each employees salary to zero
Do Until OraDynaset.EOF = True
OraDynaset.Edit
fld.value = 0
OraDynaset.Update
OraDynaset.MoveNext
Loop
MsgBox "All salaries set to ZERO."

'Currently, the changes have NOT been committed to the database.
'End Transaction processing. Using RollbackTrans
'means the rollback can be canceled in the Validate event.
OraSession.Rollback
'MsgBox "Salary changes rolled back."

End Sub

関連項目:

- AutoCommitプロパティ

- CommitTransメソッド

- ResetTransメソッド

- Rollbackメソッド

- Microsoft Transaction Serverのサポート

Cancelメソッド

適用対象

ORASQL_NONBLKオプションを使用して作成されたOraSQLStmtオブジェクト

説明

現在実行中のSQL操作を取り消します。

使用方法

status = OraSQL.NonBlockingState
if status = ORASQL_STILL_EXECUTING
OraSQL.CancelEndif

戻り値

ORASQL_SUCCESS(0) - エラーは、例外として発生します。

関連項目:
非同期処理

CancelEdit(OraRef)メソッド

適用対象

OraRefオブジェクト

説明

データベースの参照可能オブジェクトのロックを解除し、オブジェクトの更新操作を取り消します。

使用方法

OraRef.CancelEdit

備考

このメソッドは注意して使用してください。このメソッドをコールすると、接続上の保留中のトランザクションもすべて取り消されます。

Ceil(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトの上限値を計算します。

使用方法

OraNumber.Ceil

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

ChangePassword(OraServer)メソッド

適用対象

OraServerオブジェクト

説明

ユーザーのパスワードを変更します。

使用方法

OraServer.ChangePassword user_name, current_password, new_password

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] user_name

パスワードを変更するユーザーを表す文字列。

[in] current_password

ユーザーの現在のパスワードを表す文字列。

[in] new_password

ユーザー・アカウントに新しく設定するパスワードを表す文字列。

備考

このメソッドを使用する前に、Openメソッドを使用してOraServerオブジェクトをOracleデータベースに接続する必要があります。

このメソッドは、パスワードの期限が切れた場合に有効です。期限が切れた場合、OpenDatabaseメソッドは次のエラーを戻す可能性があります。

ORA-28001 "the password has expired".

関連項目:

- BeginTransメソッド

- Closeメソッド

- CommitTransメソッド

- CreateAQメソッド

- CreateCustomDynasetメソッド

- CreateTempBLOB/CLOBメソッド

- CreateDynasetメソッド

- CreateOraObject(OraDatabase)メソッド

- CreateSQLメソッド

- Describeメソッド

- ExecuteSQLメソッド

- FetchOraRefメソッド

- LastServerErrResetメソッド

- MonitorForFailoverメソッド

- Open(OraServer)メソッド

- OpenDatabaseメソッド

- RemoveFromPoolメソッド

- Rollbackメソッド

ChangePassword(OraSession)メソッド

適用対象

OraSessionオブジェクト

説明

ユーザーのパスワードを変更します。

使用方法

OraSession.ChangePassword database_name, user_name, current_password, new_password

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] database_name

データベースへの接続時に使用されるOracleネットワーク指定子を表す文字列。

[in] user_name

パスワードを変更するユーザーを表す文字列。

[in] current_password

ユーザーの現在のパスワードを表す文字列。

[in] new_password

ユーザー・アカウントに新しく設定するパスワードを表す文字列。

備考

このメソッドは、パスワードの期限が切れた場合に特に有効です。期限が切れた場合、OpenDatabaseまたはCreateDatabasePoolメソッドは次のエラーを戻す可能性があります。

ORA-28001 "the password has expired".

例

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim password as String

'Note: The DBA could expire scott's password by issuing
'ALTER USER SCOTT PASSWORD EXPIRE

Set OraSession = CreateObject("OracleInProcServer.XOraSession")
password = "tiger"

On Error GoTo err:
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/" & password, 0&)
End

err:
'Check for password expiration error

If OraSession.LastServerErr = 28001 Then
OraSession.ChangePassword "ExampleDb", "scott", password, "newpass"
'reset our password variable, then try OpenDatabase again
password = "newpass"
Resume
End If

End

関連項目:

- OpenDatabaseメソッド

- CreateDatabasePoolメソッド

Cloneメソッド

適用対象

OraDynasetオブジェクト

説明

指定したダイナセットの複製ダイナセットを戻します。

使用方法

Set oradynaset2 = oradynaset1.Clone
Set oradynaset2 = oradynaset1.DbClone

備考

このメソッドは、指定したダイナセットの複製ダイナセットを作成します。元のダイナセットと複製ダイナセットには、それぞれ独自のカレント・レコードがあります。ただし、新規ダイナセットでは現在の行が設定されず、EOFとBOF条件は両方ともTRUEに設定されます。これを変更するには、MoveまたはFindメソッドを使用して、新規複製ダイナセットに現在の行を明示的に設定する必要があります。

Cloneメソッドの使用は、元のダイナセットに影響を与えません。クローンのダイナセットでは、レコードの追加、更新または削除はできません。

カレント・レコードを複数必要とするダイナセットで操作を実行するときはCloneメソッドを使用します。

クローンのダイナセットには、元のプロパティ設定がすべて反映されるとはかぎりません。CacheBlock、CacheSliceSize、CacheSlicePerBlockおよびFetchLimitプロパティは、すべてNULLに設定されます。

ダイナセットとそのクローンのブックマーク間には互換性があります。異なるCreateDynasetメソッドを使用して作成されたダイナセットのブックマーク間には互換性がありません。

関連項目:

- Bookmarkプロパティ

- CreateDynasetメソッド

Clone(OraLOB/BFILE)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

OraBFILEオブジェクト

説明

OraLOBまたはOraBFILEオブジェクトのクローンを戻します。

使用方法

OraBlob1 = OraBlob.Clone
OraClob1 = OraClob.Clone
OraBfile = OraBfile.Clone

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] OraLOB

OraBLOB、OraCLOBまたはOraBFILE型の有効なオブジェクト。

備考

このメソッドは、OraBLOBまたはOraCLOBオブジェクトのコピーを作成します。このコピーは、ダイナセットの移動操作またはOraSQLStmtのRefresh操作によって変更されることはありません。OraBLOBまたはOraCLOBオブジェクトに対するLOBデータの変更は、クローンでは実行できません。

このメソッドは、Oracle BFILEロケータのコピーを作成し、そのコピーに関連付けられているOraBFILEを戻します。OraBFILEのコピーは、ダイナセットの移動操作またはOraSQLStmtのリフレッシュ操作によって変更されることはありません。

Clone(OraCollection)メソッド

適用対象

OraCollectionオブジェクト

説明

OraCollectionオブジェクトのクローンを戻します。

使用方法

set OraCollection1 = OraCollection.Clone

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] oraCollection1

有効なOraCollectionオブジェクト。

備考

このメソッドは、Oracleコレクションのコピーを作成し、そのコピーに関連付けられているOraCollectionオブジェクトを戻します。このOracleコレクションのコピーは、ダイナセットの移動操作またはOraSQLStmtのRefresh操作によって変更されることはありません。このメソッドが戻すOraCollectionオブジェクトを使用して、基礎となるOracleコレクションの要素値にアクセスすることはできますが、要素の値を変更する操作はできません。

Clone(OraIntervalDS)メソッド

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトのコピーを戻します。

使用方法

Set OraIntervalDSObjClone = OraIntervalDSObj.Clone

備考

元のオブジェクトと同じ値の新規OraIntervalDSオブジェクトを戻します。

Clone(OraIntervalYM)メソッド

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalYMオブジェクトのコピーを戻します。

使用方法

Set OraIntervalYMObjClone = OraIntervalYMObj.Clone

備考

元のオブジェクトと同じ値の新規OraIntervalYMオブジェクトを戻します。

Clone(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトのコピーを戻します。

使用方法

Set OraNumber2 = OraNumber.Clone

備考

元のオブジェクトと同じ値の新規OraNumberオブジェクトを戻します。

Clone(OraObject/Ref)メソッド

適用対象

OraObjectオブジェクト

OraRefオブジェクト

説明

OraObjectまたはOraRefオブジェクトのクローンを戻します。

使用方法

Set OraObjectClone = OraObject.CloneSet OraRefClone = OraRef.Clone

備考

このメソッドは、ValueインスタンスまたはREF値のコピーを作成し、そのコピーに関連付けられているOraObjectまたはOraRefオブジェクトを戻します。このコピーは、ダイナセットの移動操作またはOraSQLStmtのリフレッシュ操作によって変更されることはありません。このメソッドが戻すOraObjectオブジェクトは、基礎となる値インスタンスの属性値にアクセスすることはできますが、その属性値を変更する操作はできません。

例

サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。次の例については、「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。

例: OraObjectオブジェクトに対するCloneメソッド

次の例では、Cloneメソッドの使用方法を示します。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim Address as OraObject
Dim AddressClone as OraObject

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from person_tab
set OraDynaset = OraDatabase.CreateDynaset("select * from person_tab",0&)

'retrieve a address column from person_tab. Here Value property of OraField object
'returns Address OraObject
set Address = OraDynaset.Fields("Addr").Value

'here Address OraObject points to Address value instance in the server
'for the first row
msgbox Address.Street

'move to second row
OraDynaset.MoveNext

'here Address OraObject points to Address value instance in the server
'for the second row
msgbox Address.Street

'get the clone of Address object. This clone points to the copy of
'the value instance for second row
set AddressClone = Address.Clone

'move to third row
OraDynaset.MoveNext

'here Address OraObject points to Address value instance in the server
'for third row
msgbox Address.Street

'here AddressClone OraObject points to copy of Address value instance
' in the server for second row
msgbox AddressClone.Street

例: OraRefオブジェクトに対するCloneメソッド

次の例では、Cloneメソッドの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim Person as OraRef
Dim PersonClone as OraRef

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from customers
set OraDynaset = OraDatabase.CreateDynaset("select * from customers", 0&)

'retrieve a aperson column from customers.
'Here Value property of OraField object 'returns Person OraRef
set Person = OraDynaset.Fields("aperson").Value

'here Person OraRef points to Person Ref value in the server for the first row
msgbox Person.Name

'move to second row
OraDynaset.MoveNext

'here Person OraRef points to Person Ref value in the server for the second row
msgbox Person.Name

'get the clone of Person object.
'This clone points to the copy of the Ref for second row
set PersonClone = Person.Clone

'move to third row
OraDynaset.MoveNext

'here Person OraRef points to Person Ref value
'in the server for the third row
msgbox Person.Name

'here PersonClone OraRef points to Person Ref value
'in the server for the second row
msgbox PersonClone.Name

Clone(OraTimeStamp)メソッド

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトのコピーを戻します。

使用方法

Set OraTimeStampObj1 = OraTimeStampObj.Clone

備考

現行オブジェクトと同じ値の新規OraTimeStampオブジェクトを戻します。

Clone(OraTimeStampTZ)メソッド

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトのコピーを戻します。

使用方法

Set OraTimeStampTZObj1 = OraTimeStampTZObj.Clone

備考

現行オブジェクトと同じ値の新規OraTimeStampTZオブジェクトを戻します。

Closeメソッド

適用対象

OraDatabaseオブジェクト

OraDynasetオブジェクト

OraSQLStmtオブジェクト

OraServerオブジェクト

説明

このメソッドは何も実行しません。Visual Basicとの互換性を保つために追加されています。

備考

OraDatabaseオブジェクトとOraDynasetオブジェクトは、いずれもこのメソッドをサポートしません。OraDatabaseまたはOraDynasetオブジェクトが有効範囲を超えると、参照する対象がなくなり、オブジェクトは自動的にクローズします。

関連項目:

- CreateDynasetメソッド

- OpenDatabaseメソッド

Close(OraBFILE)メソッド

適用対象

OraBFILEオブジェクト

説明

オープンしているBFILEデータ型をクローズします。

使用方法

OraBfile = OraBfile.Close

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] OraBfile

OraBFILE型の有効なオブジェクト。

備考

このメソッドは、BFILEにのみ適用されます。LOBには適用できません。

CloseAll(OraBFILE)メソッド

適用対象

OraBFILEオブジェクト

説明

このメソッドは、この接続上でオープンしているすべてのOraBFILEオブジェクトをクローズします。

使用方法

OraBfile.CloseAll

CommitTransメソッド

適用対象

OraConnectionオブジェクト

OraDatabaseオブジェクト

OraSessionオブジェクト

説明

現在のトランザクションを終了し、保留中の変更をすべてデータベースにコミットします。

使用方法

oraconnection.CommitTrans
oradatabase.CommitTrans
orasession.CommitTrans

備考

これらのオブジェクトに対するCommitTransメソッドの動作は、次のように異なります。

- OraConnectionおよびOraDatabase
CommitTransメソッドは、指定した接続に対して保留中の全トランザクションをコミットします。トランザクションが開始されていない場合、このメソッドは無効です。セッション全体のトランザクションが進行中の場合は、指定された接続用のトランザクションを早い時点でコミットするために、このメソッドを使用できます。

- OraSession
CommitTransメソッドは、セッション内に存在する全トランザクションをコミットします。CommitTransメソッドは、トランザクションが開始されている場合のみ有効です。トランザクションが開始されていないときに、CommitTransを使用するとエラーが発生します。

注意: OraDatabaseオブジェクトがMicrosoft Transaction Server(MTS)にリストされていて、グローバルMTSトランザクションの一部である場合、このメソッドは無効です。

例

この例では、BeginTransメソッドを使用して、ダイナセットに対する一連の編集を1つのトランザクションにグループ化する方法を示します。次に、CommitTransメソッドを使用して変更を受け入れる方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

Dim fld As OraField

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession. OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

'Start Transaction processing.
OraSession.BeginTrans

'Setup a field object to save object references.
Set fld = OraDynaset.Fields("sal")

'Traverse until EOF is reached, setting each employees salary to zero.
Do Until OraDynaset.EOF = True
OraDynaset.Edit
fld.value = 0
OraDynaset.Update
OraDynaset.MoveNext
Loop
MsgBox "All salaries set to ZERO."

'Currently, the changes have NOT been committed
'to the database.

'End Transaction processing. Commit the changes to the database
OraSession.CommitTrans
MsgBox "Salary changes committed."

End Sub

関連項目:

- AutoCommitプロパティ

- BeginTransメソッド

- ResetTransメソッド

- Rollbackメソッド

- Microsoft Transaction Serverのサポート

Compare(OraLOB)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

OraBFILEオブジェクト

説明

OraBLOBまたはOraCLOB(またはOraBFILE)オブジェクトのLOB値の指定した部分を、OraBLOBまたはOraCLOB(またはOraBFILE)入力オブジェクトのLOB値と比較します。

使用方法

IsEqual = OraBlob.Compare srcBlob, amount, Offset, srcOffset
IsEqual = OraClob.Compare srcClob, amount, Offset, srcOffset
IsEqual = OraBfile.Compare srcBfile, amount, Offset, srcOffset

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] srcLOB

値を比較するOraBLOB、OraCLOBまたはOraBFILE入力オブジェクト。

[in] [オプション] amount

比較するバイト数または文字数を指定するInteger。amountのデフォルト値は、Offsetから各LOBの最後までの値です。

[in] [オプション] Offset

このオブジェクトの値に(1を基準とする)Offsetのバイト数(OraBLOBまたはOraBFILE)または文字数(OraCLOB)を指定するためのInteger。デフォルト値は1です。

[in] [オプション] srcOffset

srcLobオブジェクトの値に(1を基準とする)Offsetのバイト数(OraBLOBまたはOraBFILE)または文字数(OraCLOB)を指定するためのInteger。デフォルト値は1です。

[out] IsEqual

比較操作の結果を表すブール値。

備考

Compareメソッドは、比較が正常に終了するとTRUEを戻します。それ以外の場合はFALSEを戻します。

比較するバイト数または文字数が原因で、LOBの一方がその最後を超えて(他方のLOBは超えていない)比較された場合、その比較は失敗となります。この比較では、指定したOffsetから最後までのデータ量が両方のLOBで厳密に同じ場合にのみ成功となります。

このコールは現在、DBMS_LOB.INSTR()を利用するPL/SQLブロックを実行することによって実装されています。

ConnectSessionメソッド

適用対象

OraSessionオブジェクト

説明

指定したセッションのOraClientオブジェクトに関連付けられている、指定した名前のOraSessionオブジェクトを戻します。

使用方法

Set orasession2 = orasession1.ConnectSession(session_name)

引数

このメソッドの引数は、次のとおりです。

引数

説明

session_name

セッション名を指定する文字列。

備考

このメソッドは簡素化の目的で提供されており、現行セッションのOraClientオブジェクトのOraSessionsコレクションを反復してsession_nameという名前のセッションを検索することと同じです。OraSessionsコレクションには、現在のアプリケーションが作成したセッションのみが含まれます。これは、セッションは、複数のアプリケーションでは共有できず、同一のアプリケーション内でのみ共有できることを意味します。

例

この例では、ConnectSessionおよびCreateNamedSessionを使用して、以前に作成されたが保存されていないセッションをアプリケーションで使用する方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim dfltsess As OraSession
Dim OraSession As OraSession

'Create the default OraSession Object.
Set dfltsess = CreateObject("OracleInProcServer.XOraSession")

'Try to connect to "ExampleSession". If it does not exist
'an error is generated.
On Error GoTo SetName
Set OraSession = dfltsess.ConnectSession("ExampleSession")
On Error GoTo 0

'You can specify other processing here, such as creating a
' database and/or dynaset.

Exit Sub

SetName:
'The session named "ExampleSession" was not found, so create it.
Set OraSession = dfltsess.Client.CreateSession("ExampleSession")
Resume Next

End Sub

関連項目:

- CreateSessionメソッド

- OraClientオブジェクト

- OraSessionsコレクション

CopyToClipboardメソッド

適用対象

OraDynasetオブジェクト

説明

ダイナセットの行をクリップボードにテキスト形式でコピーします。

使用方法

OraDynaset.CopyToClipboard(NumOfRows, colsep, rowsep)

引数

このメソッドの引数は、次のとおりです。

引数

説明

NumOfRows

ダイナセットからコピーする行数。

colsep [オプション]

列と列の間に挿入する列セパレータ(CHARデータ型)。

rowsep [オプション]

行と行の間に挿入する行セパレータ(CHARデータ型)。

備考

このメソッドを使用すると、Oracle Objects for OLEのキャッシュ(ダイナセット)とWindowsアプリケーション(ExcelやWordなど)間のデータ転送を簡単に実行できます。CopyToClipboardメソッドは、ダイナセットの現在位置から最終行までのデータをコピーします。

デフォルトの列セパレータは、タブ(ASCII 9)です。

デフォルトの行セパレータは、キャリッジ・リターン(ASCII 13)です。

例

次の例では、ダイナセットからクリップボードへデータをコピーします。このコードをフォームの定義セクションに貼り付けてから、[F5]を押してください。

Sub Form_Load ()
'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

'Now call CopyToClipboard to copy the entire dynaset
OraDynaset.CopyToClipboard -1, chr(9), chr(13)
End Sub

Copy(OraLOB)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

説明

OraBLOBまたはOraCLOB入力オブジェクトの内部LOB値の一部を、このインスタンスの内部LOB値にコピーします。

使用方法

OraBlob.Copy srcBlob, amount, destOffset, srcOffset
OraClob.Copy srcClob, amount, destOffset, srcOffset

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] srcLOB

コピー元のOraCLobまたはOraBLOBオブジェクト。

[in] [オプション] amount

コピーするバイト数または文字数を指定するInteger。デフォルト値は、srcLOBオブジェクトのBLOBまたはCLOB値のサイズです。

[in] [オプション] destOffset

このオブジェクトの値にオフセットのバイト数または文字数を指定するためのInteger。デフォルト値は1です。

[in] [オプション] srcOffset

srcLOBオブジェクトの値にオフセットのバイト数または文字数を指定するためのInteger。デフォルト値は1です。

備考

このメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。

CopyFromFile(OraLOB)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

説明

ローカル・ファイルの一部またはすべてをこのオブジェクトの内部LOB値にロードまたはコピーします。

使用方法

OraBlob.CopyFromFile "blob.bmp" amount, offset, chunksize
OraClob.CopyFromFile "clob.txt" amount, offset, chunksize

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] filename

読み取るファイルの絶対パスとファイル名を指定する文字列。

[in] [オプション] amount

コピーする最大バイト数を指定するためのInteger。デフォルト値は、総ファイル・サイズです。

[in] [オプション] offset

このオブジェクトのBLOBまたはCLOB値の絶対オフセットを指定するためのIntegerで、OraBLOBまたはOraBFILEの場合はバイト数、OraCLOBの場合は文字数を示します。デフォルト値は1です。

[in] [オプション] chunksize

各読込み操作に対するサイズをバイトで指定するためのInteger。chunksizeパラメータが設定されていないか0の場合、amount引数の値が使用され、その量すべてが1つのチャンクで転送されます。

備考

このメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。

ファイルは、NLS_LANG設定と同じ書式である必要があります。

注意:
WriteやCopyFromFileなど、LOBのメソッドを使用したLOBの操作では、古いデータと比較して新しいデータが短い場合、LOBオブジェクトは自動的に切り捨てられません。LOBオブジェクトを新しいデータのサイズに縮小するには、Trim(OraLOB)メソッドを使用します。

例

例: CopyFromFileメソッドの使用方法

この例では、CopyFromFileメソッドの使用方法を示します。

データベースにPART表があり、その表に有効なLOBデータが含まれていることを確認してください。また、「LOBデータ型の例で使用されているスキーマ・オブジェクト」の説明に従ってOraLOBスキーマ・オブジェクトをインストールしていることを確認してください。

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim PartImage as OraBLOB

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create a Dynaset containing a BLOB and a CLOB column
set part = OraDatabase.CreateDynaset ("select * from part where" & _
"part_id = 1234",0)
set PartImage = part.Fields("part_image").Value

'copy the entire content of partimage.jpg file to LOBS
part.Edit
PartImage.CopyFromFile "partimage.jpg"
part.Update

関連項目:
Trim(OraLOB)メソッド

CopyFromBFILE(OraLOB)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

説明

OraBFILEオブジェクトからLOB値の一部またはすべてをこのオブジェクトのLOB値にコピーします。

使用方法

OraBlob.CopyFromBFile srcBFile, amount, destOffset, srcOffset

OraClob.CopyFromBFile srcBFile, amount, destOffset, srcOffset

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] srcBFile

データのコピー元OraBFILEオブジェクト。

[in] [オプション] amount

コピーする最大数を指定するIntegerで、OraCLOBの場合は文字数、OraBLOBまたはOraBFILEの場合はバイト数を示します。デフォルト値は、srcBFileオブジェクトのBFILE値のサイズです。

[in] [オプション] destOffset

このインスタンスの絶対オフセットを指定するためのInteger。デフォルト値は1です。

[in] [オプション] srcOffset

コピー元OraBFILEオブジェクトのBFILE値の絶対オフセットを指定するためのInteger。デフォルト値は1です。

備考

このメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。

シングルバイト・キャラクタ・セットの場合、OraBFileオブジェクトはデータベースと同じキャラクタ・セットである必要があります。

データベースで可変長キャラクタ・セットを使用している場合、OraClob.CopyFromBFileメソッドに渡されるOraBFileオブジェクトはUCS2キャラクタ・セットのファイルを指している必要があります。

CopyToFile(OraLOB/BFILE)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

OraBFILEオブジェクト

説明

このオブジェクトの内部LOB値の一部またはすべてをローカル・ファイルにコピーします。

使用方法

OraBlob.CopyToFile "blob.bmp" amount,offset,chunksize
OraClob.CopyToFile "clob.txt" amount,offset,chunksize
OraBfile.CopyToFile "bfile.bmp" amount,offset,chunksize

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] filename

書込み先ファイルの絶対パスとファイル名を指定する文字列。

[in] [オプション] amount

コピーする最大数を指定するIntegerで、OraBLOB/OraBFILEの場合はバイト数、OraCLOBの場合は文字数を示します。デフォルト値は、LOBまたはBFILEのサイズです。

[in] [オプション] offset

このインスタンスのLOBまたはBFILE値の絶対オフセットを指定するためのIntegerで、OraBLOB/OraBFILEの場合はバイト数、OraCLOBの場合は文字数を示します。デフォルト値は1です。

[in] [オプション] chunksize

各書込み操作に対するサイズをバイト数で指定するためのInteger。chunksizeパラメータが設定されていないか0の場合、amount引数の値が使用され、その量すべてが1つのチャンクで転送されます。

備考

ファイルは、NLS_LANG設定と同じ書式です。

ファイルがすでに存在している場合は、その内容が上書きされます。

例

例: CopyToFileメソッドの使用方法

この例では、CopyToFileメソッドの使用方法を示します。

データベースにPART表があり、その表に有効なLOBデータが含まれていることを確認してください。また、「LOBデータ型の例で使用されているスキーマ・オブジェクト」の説明に従ってOraLOBスキーマ・オブジェクトをインストールしていることを確認してください。

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim PartDesc as OraCLOB

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&

'Create a Dynaset containing a BLOB and a CLOB column
set part = OraDatabase.CreateDynaset ("select * from part where" & _
"part_id = 1234",0)
set PartDesc = part.Fields("part_desc").Value

'Copy the entire LOB content to partdesc.txt file
PartDesc.CopyToFile "partdesc.txt"

Cos(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

ラジアンで指定されたOraNumberオブジェクトのコサインを計算します。

使用方法

OraNumber.Cos

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

CreateAQメソッド

適用対象

OraDatabaseオブジェクト

説明

OraAQオブジェクトのインスタンスを作成します。

使用方法

Set OraAq = OraDatabase.CreateAQ(Qname)

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] Qname

データベース内のキュー名を表す文字列。

備考

なし

CreateCustomDynasetメソッド

適用対象

OraDatabaseオブジェクト

説明

カスタム・キャッシュ・パラメータとフェッチ・パラメータを使用して、ダイナセットを作成します。

使用方法

Set oradynaset = oradatabase.CreateCustomDynaset(sql_statement, options, slicesize, perblock, blocks, FetchLimit, FetchSize, SnapShotID)

引数

このメソッドの引数は、次のとおりです。

引数

説明

sql_statement

有効なOracle SQL SELECT文。

slicesize

キャッシュ・スライス・サイズ。

perblock

ブロック当たりのキャッシュ・スライス。

blocks

キャッシュのブロックの最大数。

FetchLimit

フェッチ配列のサイズ。

FetchSize

フェッチ配列のバッファ・サイズ。

options

ダイナセットのオプション状態を示すビット・フラグ。それぞれの値を追加することで1つ以上のオプションを組み合せることができます。定数ORADYN_DEFAULTまたは値&H0&を指定すると、次のデフォルトがダイナセットに指定されます。

- データベースのVisual Basicモードのように動作します。明示的に設定されていないフィールド値はNULLに設定され、データベース列のデフォルトは上書きされます。

- データベース・パラメータの自動バインディングを実行します。

- データベースから取り出された文字列データから、後続するブランクが削除されます。

- 更新可能なダイナセットを作成します。

- クライアント上でデータをキャッシュします。

- ダイナセットの作成時にMoveFirst操作が強制的に実行されます。

- 読取りの一貫性を保持します。

SnapShotID [オプション]

OraDynasetのSnapShotプロパティから取得するスナップショットのID。

定数

次の表に、オプション・フラグの定数とその値を示します。

定数

値

説明

ORADYN_DEFAULT

&H0&

デフォルトの動作を受け入れる。

ORADYN_NO_AUTOBIND

&H1&

データベース・パラメータの自動的なバインドを実行しない。

ORADYN_NO_BLANKSTRIP

&H2&

データベースから取り出された文字列データから、後続するブランクを削除しない。

ORADYN_READONLY

&H4&

ダイナセットを読取り専用にする。

ORADYN_NOCACHE

&H8&

ダイナセット用のローカル・データ・キャッシュを作成しない。ローカル・キャッシュがない場合は、ダイナセットの以前の行は使用できません。ただし、データベースからのデータの取出し(移動操作)と行からのデータの取出し(フィールド操作)のパフォーマンスは向上します。ダイナセットの列を順に取り出すアプリケーションでは、パフォーマンスを向上し、リソースの使用を減らすため、このオプションを使用します。

ORADYN_ORAMODE

&H10&

データベースのOracleモードと同じように動作するが、作成中のダイナセットにのみ影響を与える。データベースがOracleモードで作成されている場合、ダイナセットは(互換性を保つために)そのプロパティを継承します。

ORADYN_NO_REFETCH

&H20&

データベースのORADB_NO_REFETCHモードと同じように動作するが、作成中のダイナセットにのみ影響を与える。データベースがORADB_NO_REFETCHモードで作成されている場合、ダイナセットは互換性を保つためにそのプロパティを継承します。

ORADYN_N_MOVEFIRST

&H40&

ダイナセットの作成時にMoveFirstを強制的に実行しない。BOFとEOFは両方ともTRUEです。

ORADYN_DIRTY_WRITE

&H80&

UpdateおよびDeleteメソッドで、読取り一貫性をチェックしない。

これらの値は、次の位置にあるoraconst.txtファイルにあります。

ORACLE_BASE\\ORACLE_HOME\rdbms\oo4o

備考

このSQL文はSELECT文である必要があり、そうでない場合はエラーが返されます。簡易ビューやシノニムなどの機能は自由に使用できます。また、スキーマ参照、列の別名、表の結合、ネストしたSELECT文、およびリモート・データベース参照も使用できますが、それぞれの場合において、ダイナセットは読取り専用になります。

"sal + 100"または"abs(sal)"など、複雑な式またはSQLファンクションを列で使用すると、更新可能なダイナセットになりますが、複雑な式に関連付けられている列は更新できません。

通常、オブジェクト名は変更されませんが、場合によっては変更されることがあります。たとえば、列の別名を使用する場合、フィールドを名前で参照するためにその別名を使用する必要があります。複雑な式でスペースを使用する場合、データベースではスペースが削除されるため、スペースなしで列を参照する必要があります。SELECT文ではフィールドは常に番号(序数位置)で参照できます。

SQL SELECT文を実行すると、データベースに対するコミット操作がデフォルトで生成されます。これを回避するには、CreateDynasetメソッドの使用前に、セッション・オブジェクトにBeginTransメソッドを使用します。

結果のダイナセットが更新可能であるかどうかは、Oracle SQLの更新可能性規則、付与されているアクセス権、およびオプション・フラグによって決まります。

更新可能性条件

ダイナセットを更新可能にするためには、次の3つの条件を満たす必要があります。

- SQL文が、単純な列リストまたは列リスト全体を参照していること(*)。

- 文でオプション引数の読取り専用フラグを設定しないこと。

- Oracleで、選択された問合せ行のROWID参照が可能であること。

SQL文はこれらの基準を満たしていない場合でも処理されますが、結果のダイナセットは更新不可になり、ダイナセットのUpdatableプロパティはFALSEを戻します。

このメソッドは、作成されたダイナセットの最初の行に自動的に移動します。

SQLのバインド変数は、OraParametersコレクションと組み合せて使用できます。

例

この例では、CreateCustomDynasetメソッドを示します。このコードをコピーしてフォームの定義セクションに貼り付けてから、[F5]を押してください。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object using sliceSize as 256,perblock size as 16, no. of
'blocks as 20, fetchLimit as 20,FetchSize as 4096

Set OraDynaset = OraDatabase.CreateCustomDynaset("select empno, " & _
"ename from emp", 0&,256,16,20,20,4096)

'Display the first record.
MsgBox "Employee " & OraDynaset.Fields("empno").value & ", #" & _
OraDynaset.Fields("ename").value

End Sub

関連項目:
SnapShotプロパティ

CreateDatabasePoolメソッド

適用対象

OraSessionオブジェクト

説明

OraDatabaseオブジェクトのプールを作成します。プールは1つのOraSessionオブジェクトに1つのみ作成できます。

使用方法

CreateDatabasePool (long initialSize, long maxSize, long timeoutValue, BSTR database_name, BSTR connect_string, long options)

引数

このメソッドの引数は、次のとおりです。

引数

説明

initialSize

プールの初期サイズ。

maxSize

プールが拡大可能な最大サイズ。

timeoutValue

プール内のOraDatabaseオブジェクトが、指定したtimeoutValue値の間アイドル状態の場合、そのオブジェクトが含まれるデータベース接続は切断されます。この接続は、プール内のアイテムが再利用されると再びオープンします。この値は秒単位です。

database_name

データ・コントロールをデータベースに接続するときに使用するOracleネットワーク指定子。

connectString

Oracleデータベースに接続するときに使用するユーザー名とパスワード。

options

データベースのオプション・モードの設定に使用するビット・フラグ文字。options = 0の場合は、デフォルトのモード設定が適用されます。使用可能なモードは、「定数」を参照してください。

備考

Oracle Databaseへの接続を確立するには、OraSessionオブジェクトのOpenDatabaseメソッドが使用されます。このメソッドは、SQL文およびPL/SQLブロックを実行するために使用されるOraDatabaseオブジェクトへの参照を戻します。OO4Oの接続プールは、OraDatabaseオブジェクトのプールです。このプールは、OraSessionインタフェースのCreateDatabasePoolメソッドをコールすることによって作成されます。

このコールでは、次の場合に例外が発生します。

- プールがすでに存在する場合

- Oracleデータベースへの接続時にエラーが発生した場合

- 引数に無効な値が渡されている場合(initialSize > maxSizeなど)

OraSessionオブジェクトのLastServerErrプロパティには、Oracle Databaseのエラーが原因で発生した例外の特定原因を示すコードが含まれます。

次の接続エラーが戻される可能性があります。

ORA-28001 "the password has expired"

ChangePasswordメソッドを使用すると、パスワードを変更できます。

関連項目:

- DestroyDatabasePoolメソッド

- GetDatabaseFromPoolメソッド

- RemoveFromPoolメソッド

- ChangePassword(OraSession)メソッド

- LastServerErrプロパティ

CreateDynasetメソッド

適用対象

OraDatabaseオブジェクト

説明

指定したSQL SELECT文とオプションから、OraDynasetオブジェクトを作成します。

使用方法

Set oradynaset = oradatabase.CreateDynaset(sql_statement, options, SnapShotID)
Set oradynaset = oradatabase.DbCreateDynaset(sql_statement, options, SnapShotID)

引数

このメソッドの引数は、次のとおりです。

引数

説明

sql_statement

有効なOracle SQL SELECT文を含んだ文字列。

options

ダイナセットのオプション状態を示すビット・フラグ。それぞれの値を追加することで1つ以上のオプションを組み合せることができます。定数ORADYN_DEFAULTまたは値&H0&を指定すると、次のデフォルトがダイナセットに指定されます。

- データベースのVisual Basicモードのように動作します。明示的に設定されていないフィールド値はNULLに設定され、データベース列のデフォルトは上書きされます。

- データベース・パラメータの自動バインディングを実行します。

- データベースから取り出された文字列データから、後続するブランクが削除されます。

- 更新可能なダイナセットを作成します。

- クライアント上でデータをキャッシュします。

- ダイナセットの作成時にMoveFirstが強制的に実行されます。

- 読取りの一貫性を保持します。

SnapShotID [オプション]

OraDynasetオブジェクトのSnapShotプロパティから取得するスナップショットのID。

定数

次の表に、オプション・フラグの定数とその値を示します。

定数

値

説明

ORADYN_DEFAULT

&H0&

デフォルトの動作を受け入れる。

ORADYN_NO_AUTOBIND

&H1&

データベース・パラメータの自動的なバインドを実行しない。

ORADYN_NO_BLANKSTRIP

&H2&

データベースから取り出された文字列データから、後続するブランクを削除しない。

ORADYN_READONLY

&H4&

ダイナセットを読取り専用にする。

ORADYN_NOCACHE

&H8&

ダイナセット用のローカル・データ・キャッシュを作成しない。ローカル・キャッシュがない場合は、ダイナセットの以前の行は使用できません。ただし、データベースからのデータの取出し(移動操作)と行からのデータの取出し(フィールド操作)のパフォーマンスは向上します。ダイナセットの列を順に取り出すアプリケーションでは、パフォーマンスを向上し、リソースの使用を減らすため、このオプションを使用します。

ORADYN_ORAMODE

&H10&

データベースのOracleモードと同じように動作するが、作成中のダイナセットにのみ影響を与える。データベースがOracleモードで作成されている場合、ダイナセットは(互換性を保つために)そのプロパティを継承します。

ORADYN_NO_REFETCH

&H20&

データベースのORADB_NO_REFETCHモードと同じように動作するが、作成中のダイナセットにのみ影響を与える。データベースがORADB_NO_REFETCHモードで作成されている場合、ダイナセットは互換性を保つためにそのプロパティを継承します。

ORADYN_NO_MOVEFIRST

&H40&

ダイナセットの作成時にMoveFirstを強制的に実行しない。BOFとEOFは両方ともTRUEです。

ORADYN_DIRTY_WRITE

&H80&

UpdateおよびDeleteメソッドで、読取り一貫性をチェックしない。

これらの値は、oraconst.txtファイルにあります。

備考

簡易ビューやシノニムなどの機能は自由に使用できます。また、スキーマ参照、列の別名、表の結合、ネストしたSELECT文、およびリモート・データベース参照も使用できますが、それぞれの場合において、ダイナセットは読取り専用になります。

"sal + 100"または"abs(sal)"など、複雑な式またはSQLファンクションを列で使用すると、更新可能なダイナセットになりますが、複雑な式に関連付けられている列は更新できません。

通常、オブジェクト名は変更されませんが、場合によっては変更されることがあります。たとえば、列の別名を使用する場合、フィールドを名前で参照するためにその別名を使用する必要があります。また、複雑な式でスペースを使用する場合、データベースではスペースが削除されるため、スペースなしで列を参照する必要があります。SELECT文ではフィールドは常に番号(序数位置)で参照できます。

Updateメソッドを実行すると、データベースに対するコミット操作がデフォルトで生成されます。これを回避するには、CreateDynasetメソッドの使用前に、セッション・オブジェクトにBeginTransメソッドを使用します。

結果のダイナセットが更新可能であるかどうかは、Oracle SQLの更新可能性規則、付与されているアクセス権、およびオプション・フラグによって決まります。ダイナセットを更新可能にするためには、次の条件を満たす必要があります。

- SQL文が、単純な列リストまたは列リスト全体を参照していること(*)。

- 文でオプション引数の読取り専用フラグを設定しないこと。

- Oracle Databaseで、選択された問合せ行のROWID参照が可能であること。

SQL文はこれらの基準を満たしていない場合でも処理されますが、結果のダイナセットは更新不可になり、ダイナセットのUpdatableプロパティはFALSEを戻します。このメソッドは、作成されたダイナセットの最初の行に自動的に移動します。SQLのバインド変数は、OraParametersコレクションと組み合せて使用できます。

SnapShotIDオプションを指定すると、作成したSQLStmtオブジェクト用にスナップショット記述子が作成されます。このプロパティは、他のSQLStmtまたはOraDynasetオブジェクトを作成するために、後で取得して使用できます。実行スナップショットによって、OraDatabaseオブジェクトの複数のコンテキストで実行される複数のコマンドが、データベースのコミット済データの同一スナップショットで操作できるようになります。

例

この例では、CreateObject、OpenDatabaseおよびCreateDynasetメソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select empno, ename from emp", 0&)

'Display the first record.
MsgBox "Employee " & OraDynaset.Fields("empno").value & ", #" & _
OraDynaset.Fields("ename").value

End Sub

関連項目:

- Cloneメソッド

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- MovePreviousn、MoveNextn、MoveRelおよびMoveToメソッド

- OpenDatabaseメソッド

- Updatableプロパティ

- OraDynasetオブジェクト

- OraParameterオブジェクト

- OraParametersコレクション

- Updateメソッド

- BeginTransメソッド

- SnapShotプロパティ

CreateIteratorメソッド

適用対象

OraCollectionオブジェクト

説明

コレクションの要素をスキャンするイテレータを作成します。

使用方法

OraCollection.CreateIterator

備考

このメソッドは、Oracleコレクションの要素をスキャンするイテレータを作成します。イテレータを使用してコレクション要素にアクセスする方が、コレクションのインスタンスで索引を使用するより高速です。

例

例: OraCollectionイテレータ

次の例では、Oracleコレクション・イテレータの使用方法を示します。

サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraCollectionの例で使用されているスキーマ・オブジェクト」を参照してください。

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim CourseList As OraCollection
Dim Course As OraObject

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", scott/tiger", 0&)

'Create a dynaset object from division
Set OraDynaset = OraDatabase.CreateDynaset("select courses from" & _
"division where name='History'", 0&)

'Retrieve a Courses column from Division.
Set CourseList = OraDynaset.Fields("Courses").Value

'Create the iterator
CourseList.CreateIterator

'Initialize the iterator to point to the beginning of a collection
CourseList.InitIterator

'Call IterNext to read CourseList until the end
While CourseList.EOC = False
Set Course = CourseList.ElementValue
course_no = Course.course_no
Title = Course.Title
Credits = Course.Credits
CourseList.IterNext
Wend

'Call IterPrev to read CourseList until the beginning
CourseList.IterPrev

While CourseList.BOC = False
Set Course = CourseList.ElementValue
course_no = Course.course_no
Title = Course.Title
Credits = Course.Credits
CourseList.IterPrev
Wend

関連項目:

- DeleteIteratorメソッド

- InitIteratorメソッド

CreateNamedSessionメソッド

適用対象

OraSessionオブジェクト

説明

新しい名前付きOraSessionオブジェクトを作成し、戻します。

使用方法

orasession = orasession.CreateNamedSession(session_name)

引数

このメソッドの引数は、次のとおりです。

引数

説明

session_name

セッション名を指定する文字列。

備考

このメソッドを使用すると、参照されているセッション・オブジェクトがスコープ内にあるかぎり、後で同じアプリケーションで参照できる名前付きセッションを作成できます。セッションが作成されると、ConnectSessionメソッドまたは各OraClientオブジェクトのOraSessionsコレクションを介して、アプリケーションがそのセッションを参照できます。OraSessionsコレクションには、現在のアプリケーションが作成したセッションのみが含まれます。そのため、複数のアプリケーション間でセッションの共有はできず、同一のアプリケーション内でのみ共有できます。

このメソッドは簡素化の目的で提供されています。OraClientオブジェクトのCreateSessionメソッドと同じです。

例

この例では、ConnectSessionおよびCreateNamedSessionを使用して、以前に作成されたが保存されていないセッションをアプリケーションで使用する方法を示します。このコードをフォームの定義セクションにコピーしてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim dfltsess As OraSession
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the default OraSession Object.
Set dfltsess = CreateObject("OracleInProcServer.XOraSession")

'Try to connect to "ExampleSession". If it does not exist
'an error is generated.
On Error GoTo SetName
Set OraSession = dfltsess.ConnectSession("ExampleSession")
On Error GoTo 0

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

'Display or manipulate data here

Exit Sub

SetName:
'The session named "ExampleSession" was not found, so create it.
Set OraSession = dfltsess.CreateNamedSession("ExampleSession")
Resume Next

End Sub

関連項目:

- CreateSessionメソッド

- ConnectSessionメソッド

- OraClientオブジェクト

- OraSessionsコレクション

CreateOraIntervalDSメソッド

適用対象

OraSessionオブジェクト

説明

OraIntervalDSオブジェクトを作成します。このOraIntervalDSは、Oracle INTERVAL DAY TO SECONDデータ型を表します。

使用方法

Set OraIntervalDSObj = OraSession.CreateOraIntervalDS value

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

Variant型の文字列、数値、OraIntervalDSまたはOraNumberオブジェクト。

戻り値

OraIntervalDSオブジェクト

備考

OraIntervalDSオブジェクトの作成前に、OraSessionオブジェクトを作成する必要があります。

valueがVariant型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。

valueが数値の場合、提供される値は、構成されたOraIntervalDSが表す合計日数を表す必要があります。

Variant型のOraIntervalDSを渡すこともできます。クローンのOraIntervalDSが戻されます。

例

Dim oraIDS as OraIntervalDS
Dim oraIDS2 as OraIntervalDS
Dim oraNum  as OraNumber

'Create an OraIntervalDS using a string which represents 1 days, 2 hours,
'3 minutes, 4 seconds and 500000 nanoseconds
Set oraIDS = oo4oSession.CreateOraIntervalDS("1 2:3:4.005")

'Create an OraIntervalDS using a numeric value which represents
'1 days and 12 hours
Set oraIDS = oo4oSession.CreateOraIntervalDS(1.5)

'Create an OraIntervalDS using an OraIntervalDS
Set oraIDS2 = oo4oSession.CreateOraIntervalDS(oraIDS)

関連項目:

- OraNumberオブジェクト

- OraIntervalDSオブジェクト

CreateOraIntervalYMメソッド

適用対象

OraSessionオブジェクト

説明

OraIntervalYMオブジェクトを作成します。このOraIntervalYMは、Oracle INTERVAL YEAR TO MONTHデータ型を表します。

使用方法

Set OraIntervalYMObj = OraSession.CreateOraIntervalYM value

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

Variant型の文字列、数値またはOraIntervalYMオブジェクト。

戻り値

OraIntervalYMオブジェクト

備考

OraIntervalYMオブジェクトの作成前に、OraSessionオブジェクトを作成する必要があります。

valueがVariant型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。

valueが数値の場合、提供される値は、構成されたOraIntervalYMオブジェクトが表す合計年数を表す必要があります。

Variant型のOraIntervalYMを渡すこともできます。クローンのOraIntervalYMオブジェクトが戻されます。

例

Dim oraIYM as OraIntervalYM
Dim oraIYM2 as OraIntervalYM

'Create an OraIntervalYM using a string which represents 1 year and 2 months
Set oraIYM = oo4oSession.CreateOraIntervalYM("1- 2")

'Create an OraIntervalYM using a numeric value which represents
'1 year and 6 months
Set oraIYM = oo4oSession.CreateOraIntervalYM(1.5)

'Create an OraIntervalYM using an OraIntervalYM
Set oraIYM2 = oo4oSession.CreateOraIntervalYM(oraIYM)

関連項目:

- OraIntervalYMオブジェクト

- OraNumberオブジェクト

CreateOraNumberメソッド

適用対象

OraSessionオブジェクト

説明

OraNumberオブジェクトを作成します。このOraNumberは、Oracle NUMBERデータ型を表します。

使用方法

OraNumber = OraSession.CreateOraNumber(inital_value, format)

引数

このメソッドの引数は、次のとおりです。

引数

説明

initial_value

OraNumberの初期値。Variant型のOraNumber、文字列または数値。

format [オプション]

OraNumber値を表示するときに使用する書式文字列。

戻り値

OraNumberオブジェクト

備考

書式文字列の詳細は、OraNumberオブジェクトのformatプロパティを参照してください。

関連項目:

- ConnectSessionメソッド

- CreateSessionメソッド

- OraClientオブジェクト

- OraNumberオブジェクト

- OraSessionsコレクション

CreateOraObject(OraDatabase)メソッド

適用対象

OraDatabaseオブジェクト

説明

キャッシュに値インスタンス/参照可能オブジェクトを作成し、関連付けられているOO4Oオブジェクトを戻します。

使用方法

OraObject1 = OraDatabase.CreateOraObject(schema_name)
OraRef1 = OraDatabase.CreateOraObject(schema_name,table_name)
OraCollection1 = OraDatabase.CreateOraObject(schema_name)

引数

このメソッドの引数は、次のとおりです。

引数

説明

OraObject1

新しく作成する値インスタンスを表す有効なOraObjectオブジェクト。

OraRef1

新しく作成する参照可能オブジェクトを表す有効なOraRefオブジェクト。

OraCollection

新しく作成するコレクション・インスタンスを表す有効なOraCollectionオブジェクト。

schema_name

作成する値インスタンスのスキーマ名を指定する文字列。

table_name

作成する参照可能オブジェクトの表名を指定する文字列。

備考

table_name引数を指定しないと、クライアントに値インスタンスが作成され、OraObjectまたはOraCollectionオブジェクトが戻されます。table_name引数を指定すると、データベースに参照可能オブジェクトが作成され、関連付けられているOraRefオブジェクトが戻されます。

例

OraObjectオブジェクトの例とOraRefオブジェクトの例を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。

例: OraObjectオブジェクトの作成

次の例では、CreateOraObjectメソッドを使用して値インスタンスを挿入する方法を示します。ADDRESSを含んだ行が値インスタンスとしてデータベースに挿入されます。

ダイナセットの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim AddressNew as OraObject

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", scott/tiger", 0&)

'create a dynaset object from person_tab
set OraDynaset = OraDatabase.CreateDynaset("select * from person_tab", 0&)

' create a new Address object in OO4O
set AddressNew = OraDatabase.CreateOraObject("ADDRESS")

'initialize the Address object attribute to new value
AddressNew.Street = "Oracle Parkway"
AddressNew.State = "CA"

'start the dynaset AddNew operation and
'set the Address field to new address value
OraDynaset.Addnew
OraDynaset.Fields("ADDR").Value = AddressNew
OraDynaset.Update

OraParameterの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim AddressNew as OraObject

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create an  OraParameter object represent Address object bind Variable
OraDatabase.Parameters.Add "ADDRESS", Null, ORAPARM_INPUT, _
ORATYPE_OBJECT, "ADDRESS"

' create a new Address object in OO4O
set AddressNew = OraDatabase.CreateOraObject("ADDRESS")

'initialize the Address object attribute to new value
AddressNew.Street = "Oracle Parkway"
AddressNew.State = "CA"

'set the Address to ADDRESS parameter
Oradatabase.Parameters("ADDRESS").Value = AddressNew

'execute the sql statement which updates Address in the person_tab
OraDatabase.ExecuteSQL ("insert into person_tab values ('Eric',30,:ADDRESS)")

例: OraRefオブジェクトの作成

次の例では、CreateOraObjectメソッドを使用して参照可能オブジェクトを挿入する方法を示します。

この例では、新規PERSONが参照可能オブジェクトとしてデータベースに挿入されます。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim Person  as OraRef

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'CreteOraObject   creates a new referenceable
'object in the PERSON_TAB object table and returns associated OraRef
set Person = OraDatabase.CreateOraObject("PERSON","PERSON_TAB")

'modify the attributes of Person
Person.Name = "Eric"

Person.Age = 35
'Update method inserts modified referenceable object in the PERSON_TAB.
Person.Update

CreateOraTimeStampメソッド

適用対象

OraSessionオブジェクト

説明

新規OraTimeStampオブジェクトを作成します。このOraTimeStampメソッドは、Oracle TIMESTAMPまたはOracle TIMESTAMP WITH LOCAL TIME ZONEデータ型を表します。

使用方法

Set OraTimeStampObj = OraSession.CreateOraTimeStamp value format

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

Variant型の文字列、日付またはOraTimeStamp。

[in] [オプション] format

OraTimeStampオブジェクトを文字列として表示または解析するときに使用するTimeStamp書式文字列。書式を指定しない場合、TimeStamp文字列は、セッションのTIMESTAMP書式(NLS_TIMESTAMP_FORMAT書式)を使用して解析されます。

戻り値

OraTimeStampオブジェクト

備考

OraTimeStampオブジェクトの作成前に、OraSessionオブジェクトを作成する必要があります。

valueがVariant型のStringの場合、文字列の書式は、format引数で指定した日時書式と一致する必要があります。formatを指定しない場合、文字列の書式は、セッションのTIMESTAMP書式(NLS_TIMESTAMP_FORMAT)と一致する必要があります。

formatを指定した場合は、その書式がOraTimeStampのFormatプロパティに格納されます。指定しない場合は、セッションのTIMESTAMP書式がOraTimeStampのFormatプロパティに格納されます。

例

Dim oraTS as OraTimeStamp
Dim oraTS1 as OraTimeStamp
Dim date as Date

'Create an OraTimeStamp using a string assuming the session
'TIMESTAMP format is "DD-MON-RR HH.MI.SSXFF AM"
Set oraTS = oo4oSession.CreateOraTimeStamp("12-JAN-2003 12.0.0.0 PM")

'Create an OraTimeStamp using a string and a format
Set oraTS = oo4oSession.CreateOraTimeStamp("2003-01-12 12:00:00 PM", _
"YYYY-MM-DD HH:MI:SS AM")

'Create an OraTimeStamp using a Date
date = #1/12/2003#

Set oraTS = oo4oSession.CreateOraTimeStamp(date)

'Create an OraTimeStamp  using an OraTimeStamp
Set oraTS1 = oo4oSession.CreateOraTimeStamp(oraTS)

関連項目:

- OraTimeStampオブジェクト

- OraNumberオブジェクト

CreateOraTimeStampTZメソッド

適用対象

OraSessionオブジェクト

説明

新規OraTimeStampTZオブジェクトを作成します。このOraTimeStampTZオブジェクトは、Oracle TIMESTAMP WITH TIME ZONEデータ型を表します。

使用方法

Set OraTimeStampTZObj = OraSession.CreateOraTimeStampTZ value format

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

Variant型の文字列、日付またはOraTimeStampTZ。

[[in] [オプション] format

OraTimeStampTZオブジェクトを文字列として表示または解析するときに使用するTIMESTAMP WITH TIME ZONE書式文字列。書式を指定しない場合、TIMESTAMP WITH TIME ZONE文字列は、セッションのTIMESTAMP WITH TIME ZONE書式(NLS_TIMESTAMP_TZ_FORMAT書式)を使用して解析されます。

戻り値

OraTimeStampTZオブジェクト

備考

OraTimeStampTZオブジェクトの作成前に、OraSessionオブジェクトを作成する必要があります。

valueがVariant型の文字列の場合、文字列の書式は、書式を指定した場合は書式引数で指定した日時書式と一致する必要があります。書式を指定しない場合はセッションのTIMESTAMP WITH TIME ZONE書式(NLS_TIMESTAMP_TZ_FORMAT)と一致する必要があります。

valueがVariant型のDateの場合、Dateの日時値は、セッションのタイムゾーンの日時値として解析されます。OraTimeStampTZオブジェクトのTimeZoneプロパティには、セッションのタイムゾーンが含まれます。

formatを指定した場合は、その書式がOraTimeStampTZオブジェクトのFormatプロパティに格納されます。指定しない場合は、セッションのTIMESTAMP WITH TIME ZONE書式がOraTimeStampTZオブジェクトのFormatプロパティに格納されます。

例

Dim oraTSZ as OraTimeStampTZ
Dim oraTSZ1 as OraTimeStampTZ
Dim date as Date

'Create an OraTimeStampTZ using a string assuming the session
'TIMESTAMP WITH TIME ZONE format is "DD-MON-RR HH.MI.SSXFF AM TZH:TZM"
Set oraTSZ = oo4oSession.CreateOraTimeStampTZ( "12-JAN-2003" & _
"12.0.0.0 PM -03:00")

'Create an OraTimeStampTZ using a string and a format
Set oraTSZ = oo4oSession.CreateOraTimeStampTZ( "2003-01-12" & _
"12:00:00 PM -03:00", "YYYY-MM-DD HH:MI:SS AM TZH:TZM")

'Create an OraTimeStampTZ using a Date
date = #1/12/2003#
Set oraTSZ = oo4oSession.CreateOraTimeStampTZ(date)

'Create an OraTimeStampTZ  using an OraTimeStampTZ
Set oraTSZ1 = oo4oSession.CreateOraTimeStampTZ(oraTSZ)

関連項目:

- OraTimeStampTZオブジェクト

- OraNumberオブジェクト

CreatePLSQLCustomDynasetメソッド

適用対象

OraDatabaseオブジェクト

非推奨。

これらのタスクの実行方法については、「PL/SQLカーソル変数を戻す方法」を参照してください。

説明

カスタム・キャッシュ・パラメータとフェッチ・パラメータを使用して、PL/SQLカーソルからダイナセットを作成します。SQL文は、ストアド・プロシージャまたは無名ブロックである必要があります。作成されるダイナセットは読取り専用です。SQLプロパティを設定しようとすると、エラーになります。ダイナセットは、新しいパラメータを指定してリフレッシュできます。

使用方法

set OraDynaset = CreatePlsqlCustomDynaset(SQLStatement, CursorName, options, slicesize, perblock, blocks, FetchLimit, FetchSize)

引数

このメソッドの引数は、次のとおりです。

引数

説明

SQLStatement

有効なOracle PL/SQLストアド・プロシージャまたは無名ブロック。

CursorName

PL/SQLストアド・プロシージャで作成されるカーソルの名前。

options

ダイナセットのオプション状態を示すビット・フラグ。それぞれの値を追加することで1つ以上のオプションを組み合せることができます。

slicesize

キャッシュ・スライス・サイズ。

perblock

ブロック当たりのキャッシュ・スライス。

blocks

キャッシュのブロックの最大数。

FetchLimit

フェッチ配列のサイズ。

FetchSize

フェッチ配列のバッファ・サイズ。

定数

オプション・フラグの値は、次のとおりです。

定数

値

説明

ORADYN_DEFAULT

&H0&

デフォルトの動作を受け入れる。

ORADYN_NO_AUTOBIND

&H1&

データベース・パラメータの自動的なバインドを実行しない。

ORADYN_NO_BLANKSTRIP

&H2&

データベースから取り出された文字列データから、後続するブランクを削除しない。

ORADYN_NOCACHE

&H8&

ダイナセット用のローカル・データ・キャッシュを作成しない。ローカル・キャッシュがない場合は、ダイナセットの以前の行は使用できません。ただし、データベースからのデータの取出し(移動操作)と行からのデータの取出し(フィールド操作)のパフォーマンスは向上します。ダイナセットの列を順に取り出すアプリケーションでは、パフォーマンスを向上し、リソースの使用を減らすため、このオプションを使用します。

ORADYN_NO_MOVEFIRST

&H40&

ダイナセットの作成時にMoveFirstを強制的に実行しない。BOFとEOFは両方ともTRUEです。

これらの値は、oraconst.txtファイルにあります。

備考

SQL文は、PL/SQLストアド・プロシージャであることが必要で、PL/SQLの無名ブロックを実行する場合のように、コールの前後にBEGINとENDを付ける必要があります(付けない場合は、エラーが戻ります)。CursorName引数は、ストアド・プロシージャ内またはPL/SQLの無名ブロック内で作成されたカーソルと正確に一致する必要があります(一致しない場合は、エラーが戻ります)。ストアド・プロシージャ内で作成されたカーソルは、有効なSQLのSELECT文で記述する必要があります。

ストアド・プロシージャにより、出力パラメータとしてカーソルが戻される場合は、OraParametersのAddメソッドを使用してPL/SQLカーソルの変数をバインドする必要はありません。この場合も、PL/SQLのバインド変数を、OraParametersコレクションと組み合せて使用できます。

このメソッドは、作成されたダイナセットの最初の行に自動的に移動します。

ORADYN_READONLY、ORADYN_ORAMODE、ORADYN_NO_REFETCH、ORADYN_DIRTY_WRITEの各オプションを指定しても、ダイナセットの作成には影響を与えません。

関連項目:

- OraParametersコレクション

- Addメソッド

CreatePLSQLDynasetメソッド

適用対象

OraDatabaseオブジェクト

非推奨。

これらのタスクの実行方法については、「PL/SQLカーソル変数を戻す方法」を参照してください。

説明

PL/SQLカーソルからダイナセットを作成します。SQL文は、ストアド・プロシージャまたは無名ブロックである必要があります。作成されるダイナセットは読取り専用であり、SQLプロパティを設定しようとすると、エラーになります。カーソル以外のダイナセットと同様、新しいパラメータを指定してこのダイナセットをリフレッシュできます。

使用方法

set OraDynaset = CreatePLSQLDynaset(SQLStatement, CursorName, options)

引数

引数

説明

SQLStatement

有効なOracle PL/SQLストアド・プロシージャまたは無名ブロック。

CursorName

PL/SQLストアド・プロシージャで作成されるカーソルの名前。

options

ダイナセットのオプション状態を示すビット・フラグ。それぞれの値を追加することで1つ以上のオプションを組み合せることができます。

定数

オプション・フラグの値は、次のとおりです。

定数

値

説明

ORADYN_DEFAULT

&H0&

デフォルトの動作を受け入れる。

ORADYN_NO_BLANKSTRIP

&H2&

データベースから取り出された文字列データから、後続するブランクを削除しない。

ORADYN_NOCACHE

&H8&

ダイナセット用のローカル・データ・キャッシュを作成しない。ローカル・キャッシュがない場合は、ダイナセットの以前の行は使用できません。ただし、データベースからのデータの取出し(移動操作)と行からのデータの取出し(フィールド操作)のパフォーマンスは向上します。ダイナセットの列を順に取り出すアプリケーションでは、パフォーマンスを向上し、リソースの使用を減らすため、このオプションを使用します。

ORADYN_NO_MOVEFIRST

&H40&

ダイナセットの作成時にMoveFirst操作を強制的に実行しない。BOFとEOFは両方ともTRUEです。

これらの値は、oraconst.txtファイルにあります。

備考

SQL文は、PL/SQLストアド・プロシージャであることが必要で、PL/SQLの無名ブロックを実行する場合のように、コールの前後にBEGIN文とEND文を付ける必要があります(付けない場合は、エラーが戻ります)。CursorName引数は、ストアド・プロシージャ内またはPL/SQLの無名ブロック内で作成されたカーソルと正確に一致する必要があります(一致しない場合は、エラーが戻ります)。ストアド・プロシージャ内で作成されたカーソルは、有効なSQLのSELECT文で記述する必要があります。

ストアド・プロシージャにより、出力パラメータとしてカーソルが戻される場合は、OraParameters.Addメソッドを使用してPL/SQLカーソルの変数をバインドする必要はありません。この場合も、PL/SQLのバインド変数を、OraParametersコレクションと組み合せて使用できます。

このメソッドは、作成されたダイナセットの最初の行に自動的に移動します。

ORADYN_READONLY、ORADYN_ORAMODE、ORADYN_NO_REFETCHまたはORADYN_DIRTY_WRITEの各オプションを指定しても、ダイナセットの作成には影響を与えません。

例

この例では、CreatePlsqlDynasetメソッドおよびRefreshメソッドでPL/SQLカーソルを使用する方法を示します。この例では、PL/SQLカーソルを、DEPTNOパラメータの様々な値を含むダイナセットとして戻します。対応するストアド・プロシージャ(EMPCUR.SQLにある)がOracle Databaseから利用可能であることを確認し、このコードをフォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase

Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

' Create the Deptno parameter
OraDatabase.Parameters.Add "DEPTNO", 10, ORAPARM_INPUT
OraDatabase.Parameters("DEPTNO").ServerType = ORATYPE_NUMBER

' Create OraDynaset based on "EmpCursor" created in stored procedure.
Set OraDynaset = OraDatabase.CreatePLSQLDynaset("Begin Employee.GetEmpData" & _
"(:DEPTNO,:EmpCursor); end;", "EmpCursor", 0&)

'Should display KING
MsgBox OraDynaset.Fields("ENAME").Value

'Should display 7839
MsgBox OraDynaset.Fields("EMPNO").Value

' Now set the deptno value to 20
OraDatabase.Parameters("DEPTNO").Value = 20

'Refresh the dynaset
OraDynaset.Refresh

'Should display JONES
MsgBox OraDynaset.Fields("ENAME").Value

'Should display 7566
MsgBox OraDynaset.Fields("EMPNO").Value

'Remove the parameter.
OraDatabase.Parameters.Remove ("DEPTNO")

End Sub

CreateSessionメソッド

適用対象

OraClientオブジェクト

説明

新しい名前付きOraSessionオブジェクトを作成します。

使用方法

orasession = oraclient.CreateSession(session_name)

引数

このメソッドの引数は、次のとおりです。

引数

説明

session_name

セッション名を指定する文字列。

備考

このメソッドを使用すると、作成時にOraSessionオブジェクトを明示的に保存しなくても、後で同じアプリケーションで参照できる名前付きセッションを作成できます。セッションが作成されると、ConnectSessionメソッドまたは各OraClientオブジェクトのOraSessionsコレクションを介して、アプリケーションがそのセッションを参照できます。OraSessionsコレクションには、現在のアプリケーションが作成したセッションのみが含まれます。これは、セッションは、複数のアプリケーションでは共有できず、同一のアプリケーション内でのみ共有できることを意味します。

例

この例では、クライアント・オブジェクトのCreateSessionメソッドを使用して、セッション・オブジェクトを作成する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraClient As OraClient
Dim OraSession As OraSession
Dim NamedOraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Get the OraClient object.
Set OraClient = OraSession.Client

'Create a named OraSession Object
'Alternatively, you could use the CreateNamedSession
'method of the OraSession Object.

Set NamedOraSession = OraClient.CreateSession("ExampleSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = NamedOraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

End Sub

関連項目:
OraSessionオブジェクト

CreateSQLメソッド

適用対象

OraDatabaseオブジェクト

説明

SQL文を実行し、指定したSQL文とオプションからOraSQLStmtオブジェクトを作成します。

使用方法

Set orasqlstmt = oradatabase.CreateSQL(sql_statement, options)

引数

このメソッドの引数は、次のとおりです。

引数

説明

sql_statement

有効なOracle SQL文。

options

OraSQLStmtのオプション状態を示すビット・フラグ。それぞれの値を追加することで1つ以上のオプションを組み合せることができます。

定数

オプション・フラグの値は、次のとおりです。

定数

値

説明

ORASQL_NO_AUTOBIND

&H1&

データベース・パラメータの自動的なバインドを実行しない。

ORASQL_FAILEXEC

&H2&

エラーを発生させ、SQL文オブジェクトを作成しない。

ORASQL_NONBLK

&H4&

SQLを非ブロック状態で実行する。

これらの値は、oraconst.txtファイルにあります。

備考

SQL文は、ブレークのない連続する1行として指定できます。行をブレークする必要がある場合は、改行(ASCII 10)を使用します。キャリッジ・リターン(ASCII 13)は、基礎となるOracle DatabaseファンクションがNULL終端文字として取り扱うため、使用しないでください。

PL/SQLのバインド変数は、OraParametersと組み合せて使用できます。

SQL文を実行すると、データベースに対するコミットがデフォルトで生成されます。これを回避するには、CreateSQLメソッドの使用前に、セッション・オブジェクトにBeginTransメソッドを使用します。

PL/SQLブロックの実行時またはストアド・プロシージャのコール時は、PL/SQLの無名ブロックを実行する場合のように、コールの前後にBEGIN文とEND文を付ける必要があります。これは、SQL*PlusおよびSQL*DBAのEXECUTEコマンドと同じです。

ORASQL_FAILEXECオプションを使用すると、SQLstmtオブジェクトの作成に失敗したとき(SQLstmtオブジェクトのリフレッシュ時)に、エラーが発生します。SQLstmtオブジェクトは作成されず、リフレッシュもできません。

注意:
実行するSQL文またはPL/SQLブロックは、後で、オープンしているダイナセットでEditメソッドを使用したときにエラーを発生させる可能性があるため、CreateSQLの使用には注意が必要です。

データ型

String

例

この例では、パラメータ、CreateSQLメソッド、Refreshメソッド、およびOraSQLStmtオブジェクトのSQLプロパティの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraSqlStmt As OraSQLStmt

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

OraDatabase.Parameters.Add "EMPNO", 7369, 1
OraDatabase.Parameters("EMPNO").ServerType = 2  'ORATYPE_NUMBER

OraDatabase.Parameters.Add "ENAME", 0, 2
OraDatabase.Parameters("ENAME").ServerType = 1  'ORATYPE_VARCHAR2

Set OraSqlStmt = OraDatabase.CreateSQL("Begin Employee.GetEmpName" & _
"(:EMPNO, :ENAME); end;", 0&)

'Notice that the SQL statement is NOT modified.
MsgBox OraSqlStmt.SQL

'Should display SMITH
MsgBox OraDatabase.Parameters("ENAME").Value

'Change the value of the empno parameter.
OraDatabase.Parameters("EMPNO").Value = 7499

'Refresh the sqlstmt
OraSqlStmt.Refresh

'Should display ALLEN
MsgBox OraDatabase.Parameters("ENAME").Value

'Notice that the SQL statement is NOT modified.
MsgBox OraSqlStmt.SQL

'Remove the parameter.
OraDatabase.Parameters.Remove ("job")

End Sub

関連項目:

- ORASQL_NONBLKオプションの詳細は、「非同期処理」を参照してください。

- BeginTransメソッド

- OraSQLStmtオブジェクト

- CreateSQLメソッド

- ExecuteSQLメソッド

- Refreshメソッド

CreateTempBLOB/CLOBメソッド

適用対象

OraDatabaseオブジェクト

説明

データベースに一時LOBを作成します。

使用方法

Set OraBLOB = OraDatabase.CreateTempBLOB(use_caching) Set OraCLOB = OraDatabase.CreateTempCLOB(use_caching)

引数

このメソッドの引数は、次のとおりです。

引数

説明

use_caching

このLOBにアクセスする際にOracle Databaseでキャッシュを使用するかどうかを指定するブール値。デフォルト値はFALSEです。

備考

一時LOBは、データベースに永続的に存在しないLOBです。OO4Oのプログラミングでは一般的に、一時LOBを、LOB引数を含むストアド・プロシージャおよびファンクションへ渡すために使用します。

一時LOBは、トランザクションには関係ありません。(書込み操作の前にロックを取得する必要はなく、また、ロールバックは一時LOBには影響を与えません。)

use_caching引数は、一時LOBにアクセスする際にOracleでキャッシュを使用するよう指定します。これは、1つのLOBに複数のアクセスが予想される場合に推奨します。LOBを作成してデータを格納し、ストアド・プロシージャに渡した後破棄する、といった通常の場合にはキャッシュは必要ありません。

一時LOBは、対応するOraBLOBまたはOraCLOBへの参照がクライアントに存在しなくなるまで、データベースに存在します。これらの参照には、一時OraBLOBまたはOraCLOBオブジェクトを含む任意のOraParameterまたはOraParamArrayが含まれることに注意してください。

例

例: 一時CLOBをストアド・プロシージャに渡す方法

次の例では、CreateTempClobメソッドを使用してOraCLOBを作成する方法を示します。作成されたOraCLOBは、データが移入され、CLOB型の引数を含むストアド・プロシージャに渡されます。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraClob as OraClob

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.

Set OraDatabase = OraSession.OpenDatabase("ExampleDb","scott/tiger", 0&)

'Create the stored procedure used in this example
OraDatabase.ExecuteSQL ("create or replace procedure GetClobSize" & _
"(in_clob IN CLOB, clobsize OUT NUMBER) as Begin clobsize" & _
" := DBMS_LOB.GETLENGTH(in_clob); End;")

'create an OraParameter object to represent Clob bind Variable
OraDatabase.Parameters.Add "CLOB", Null, ORAPARM_INPUT,  ORATYPE_CLOB

'the size will go into this bind variable
OraDatabase.Parameters.Add "CLOBSIZE", Null, ORAPARM_OUTPUT,  ORATYPE_NUMBER

' create a temporary CLOB
set OraClob = OraDatabase.CreateTempClob

'Populate the OraClob with some data. Note that no row locks are needed.
OraClob.Write "This is some test data"

'set the Parameter Value to the temporary Lob
OraDatabase.Parameters("CLOB").Value = OraClob

'execute the sql statement which updates Address in the person_tab
OraDatabase.ExecuteSQL ("Begin GetClobSize(:CLOB, :CLOBSIZE); end;")

'Display the size
MsgBox OraDatabase.Parameters("CLOBSize").Value

'these two lines force the temporary clob to be freed immediately
OraDatabase.Parameters.Remove "CLOB"
Set OraClob = nothing

Deleteメソッド

適用対象

OraDynasetオブジェクト

説明

指定したダイナセットの現在の行を削除します。

使用方法

oradynaset.Delete
oradynaset.DbDelete

備考

Deleteメソッドの使用前に、行を現在の行にしておく必要があります。行が現在の行になっていない場合は、エラーが発生します。

グローバル・トランザクション(つまり、BeginTransをすでに発行済)のダイナセットの所定の行でDeleteメソッドをコールすると、CommitTransまたはRollbackメソッドをコールするまで、選択した行がロックされたままになります。

削除した行を参照すると、エラーが発生します。(MoveFirst、MovePrevious、MoveNextまたはMoveLastメソッドを使用して)データベース内で移動が発生するまで、削除した行とその直後と直前の行は、現在のまま残ります。移動が発生すると、削除した行を再度現在の行にすることはできません。

トランザクションを使用した場合以外に、削除したレコードを復元する方法はありません。

注意:
Edit、AddNewまたはDeleteメソッドをコールすると、未処理のEditまたはAddNewのコールは処理前に取り消されます。Updateメソッドを使用して保存されていない未処理の変更は、すべて取消処理中に失われます。

例

この例では、Deleteメソッドを使用してデータベースからレコードを削除する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("exampledb", "scott/tiger", 0&)

'Create the OraDynaset Object. Only select the employees in Department 10.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp where" & _
"deptno=10", 0&)

Do Until OraDynaset.EOF
OraDynaset.Delete
OraDynaset.MoveNext
Loop
MsgBox "All employees from department 10 removed."

End Sub

関連項目:

- AddNewメソッド

- BeginTransメソッド

- CommitTransメソッド

- Editメソッド

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- ResetTransメソッド

- Rollbackメソッド

Delete(OraCollection)メソッド

適用対象

OraCollectionオブジェクト

説明

索引を指定して要素を削除します。このメソッドは、ORATYPE_TABLE型(ネストした表)のOraCollectionでのみ使用できます。

使用方法

OraCollection.Delete index

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] index

削除する要素の索引を指定する整数。

備考

Deleteメソッドは、クライアント側のネストした表に穴を作成します。指定した索引の要素がすでに削除されている場合、または指定した索引が所定の表に対して無効な場合、このメソッドはエラーを戻します。

例

次の例では、Deleteメソッドの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraCollectionの例で使用されているスキーマ・オブジェクト」を参照してください。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim CourseList as OraCollection

'create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from division
set OraDynaset = OraDatabase.CreateDynaset("select * from division", 0&)

'retrieve a Courses column from Division.
'Here Value property of OraField object returns CourseList OraCollection
set CourseList = OraDynaset.Fields("Courses").Value

'Delete the CourseList  NestedTable at index 2.
'Before that lock should be obtained
OraDynaset.Edit
CourseList.Delete 2

OraDynaset.Update

関連項目:
Type(OraCollection)プロパティ

Delete(OraRef)メソッド

適用対象

OraRefオブジェクト

説明

データベースの参照可能オブジェクトを削除します。

使用方法

OraRef.Delete

備考

削除したインスタンスの属性にアクセスすると、エラーになります。

例

次の例では、Deleteメソッドの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim Person  as OraRef

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create an  OraParameter object represent Person object bind Variable
OraDatabase.Parameters.Add "PERSON", Null, ORAPARM_OUTPUT, ORATYPE_REF,"PERSON"

'execute the sql statement which selects person
'from the customers table for account = 10
OraDatabase.ExecuteSQL ("BEGIN select aperson into :PERSON from customers" & _
"where account = 10;  END;")

'get the Person object from OraParameter
set Person = OraDatabase.Parameters("PERSON").Value

'delete the Person object in the server for modifying its attributes
Person.Delete

DeleteIteratorメソッド

適用対象

OraCollectionオブジェクト

説明

コレクション・イテレータを削除します。

使用方法

OraCollection.DeleteIterator

備考

なし

例

「例: OraCollectionイテレータ」を参照してください。

関連項目:
CreateIteratorメソッド

Dequeue(OraAQ)メソッド

適用対象

OraAQオブジェクト

説明

メッセージをデキューします。

使用方法

Q.Dequeue()

備考

メッセージの属性は、このオブジェクトに含まれているOraAQMsgインタフェースを使用してアクセスできます。正常に実行された場合、このメソッドはメッセージ識別子をバイト配列で戻します。それ以外の場合は、空の配列(NULL)を戻します。

例

注意:
次のサンプル・コードは、メッセージ・デキューの標準的な例です。
完全なAQサンプルは、\OO4O\VB\SAMPLES\AQディレクトリにあります。

例: RAW型のメッセージのデキュー

'Dequeue the first message available
Q.Dequeue
Set Msg = Q.QMsg

'Display the message content
MsgBox Msg.Value

'Dequeue the first message available without removing it
' from the queue
Q.DequeueMode = ORAAQ_DQ_BROWSE

'Dequeue the first message with the correlation identifier
' equal to "RELATIVE_MSG_ID"
Q.Navigation = ORAAQ_DQ_FIRST_MSG
Q.correlate = "RELATIVE_MESSAGE_ID"
Q.Dequeue

'Dequeue the next message with the correlation identifier

' of "RELATIVE_MSG_ID"
Q.Navigation = ORAAQ_DQ_NEXT_MSG
Q.Dequeue

'Dequeue the first high priority message
Msg.Priority = ORAQMSG_HIGH_PRIORITY
Q.Dequeue

'Dequeue the message enqueued with message id of Msgid_1
Q.DequeueMsgid = Msgid_1
Q.Dequeue

'Dequeue the message meant for the consumer "ANDY"
Q.consumer = "ANDY"
Q.Dequeue

'Return immediately if there is no message on the queue
Q.wait = ORAAQ_DQ_NOWAIT
Q.Dequeue

例: Oracleオブジェクト型のメッセージのデキュー

Set OraObj = DB.CreateOraObject("MESSAGE_TYPE")
Set QMsg = Q.AQMsg(23, "MESSAGE_TYPE","SCOTT")

'Dequeue the first message available without removing it
Q.Dequeue
OraObj = QMsg.Value

'Display the subject and data
MsgBox OraObj("subject").Value & OraObj("Data").Value

Describeメソッド

適用対象

OraDatabaseオブジェクト

説明

スキーマ・オブジェクトを記述します。このメソッドは、OraMetaDataインタフェースのインスタンスを戻します。

使用方法

OraMetaDataObj = OraDatabase.Describe(SchemaObjectName)

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] SchemaObjectName

記述するスキーマ・オブジェクトの名前を表す文字列。

備考

次のタイプのスキーマ・オブジェクトを記述できます。

- 表

- ビュー

- プロシージャ

- ファンクション

- パッケージ

- 順序

- コレクション(VARRAYまたはネストした表)

- 型

その他のスキーマ・オブジェクト(列など)または無効なスキーマ・オブジェクト名を記述しようとすると、エラーになります。ここにリストされていないスキーマ・オブジェクトは、直接記述せずにナビゲートしてください。

このメソッドは、empなどのスキーマ・オブジェクトの名前に基づいて、COMオートメーション・オブジェクト(OraMetaData)を戻します。OraMetaDataオブジェクトは、記述されているスキーマ・オブジェクトのすべての属性(OraMDAttributeコレクション)に動的にナビゲートおよびアクセスするメソッドを提供します。

例

Describeの簡単な例

次のVisual Basicコードでは、Describeメソッドを使用して、emp表の各種属性を取り出し、表示する方法を示します。

Set emp = OraDatabase.Describe("emp")

'Display the name of the Tablespace
MsgBox emp!tablespace
'Display name and data type of each column in the emp table.
Set empColumns = emp!ColumnList
Set ColumnList = empColumns.Value

for i = 0 to ColumnList.Count - 1
Set Column = ColumnList(i).Value
MsgBox "Column: " & Column!Name & " Data Type: " & Column!Data Type
Next i

表の記述例

次の例を実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraMetaDataの例で使用されているスキーマ・オブジェクト」を参照してください。

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim OraMetaData As OraMetaData
Dim OraMDAttribute As OraMDAttribute
Dim ColumnList As OraMetaData
Dim Column As OraMetaData

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDB", "scott/tiger", 0&)

'Use Describe to retrieve the metadata object
Set OraMetaData = OraDatabase.Describe("EMP")

'Display the type of the metadata
MsgBox TypeofMetaData & OraMetaData.Type

'Display the count of attributes belonging to the table
MsgBox NumberOfAttributes & OraMetaData.Count

'Attribute can be accessed using the explicit OraMetaData property: Attribute
'The index can be an integer or the attribute name
Set OraMDAttribute = OraMetaData.Attribute(0)
MsgBox "ObjectID: " & OraMDAttribute.Value

'Since Attribute is the default property of OraMetaData, an attribute can
' be accessed as follows. Here, we use attribute name as an index
Set OraMDAttribute = OraMetaData("ObjectID")
MsgBox "Name: " & OraMDAttribute.Name
MsgBox "Value: " & OraMDAttribute.Value

'Value is the default property of OraMDAttribute, the following shows
'the Value of property "IsClustered" for the table
MsgBox "Is Clustered: " & OraMetaData!IsClustered
MsgBox "Is Partitioned: " & OraMetaData!IsPartitioned

'Retrieve the Column List
Set OraMDAttribute = OraMetaData!ColumnList

' Use IsMDObject property to check whether an attribute's value is an OraMetaData
If (OraMDAttribute.IsMDObject()) Then
Set ColumnList = OraMDAttribute.Value
'Display the name and data type of each column
For I = 0 To ColumnList.Count - 1
Set Column = ColumnList(I).Value

' Each column is again an OraMetaData
MsgBox "Column: " & Column!Name & " data type: " & Column!Data Type
Next I
End If

例: ユーザー定義型の記述

次の例を実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraMetaDataの例で使用されているスキーマ・オブジェクト」を参照してください。

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim OraMetaData As OraMetaData
Dim OraMDAttribute As OraMDAttribute
Dim attrList As OraMetaData
Dim attr As OraMetaData

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDB", "scott/tiger",0&)
Set OraMetaData = OraDatabase.Describe("ORAMD_ADDRESS")
NumAttributes = OraMetaData!NumAttributes
NumMethods = OraMetaData!NumMethods
MsgBox "The Address type has " & NumAttributes & " attributes"
MsgBox "Address Object has " & NumMethods & " methods"

'Retrieve the attribute list of this type object
Set attrList = OraMetaData!Attributes.Value

'Display the name and data type of each attribute
For I = 0 To attrList.Count - 1
Set attr = attrList(I).Value
' each attr is actually an OraMetaData
MsgBox "Attribute Name: " & attr!Name
MsgBox "Attribute Type: " & attr!TypeName

Next I

例: 不明なスキーマ・オブジェクトの記述

次の例を実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraMetaDataの例で使用されているスキーマ・オブジェクト」を参照してください。

Sub RecursiveDescribe(name$, xMD As OraMetaData)

Dim xMDAttr As OraMDAttribute
For I = 0 To xMD.Count - 1
Set xMDAttr = xMD.Attribute(I)

' If an attribute can be described further, describe it,
' otherwise display its attribute name & value
If (xMDAttr.IsMDObject) Then
RecursiveDescribe xMDAttr.name, xMDAttr.Value
Else
MsgBox name & "->" & xMDAttr.name & " = " & xMDAttr.Value
End If
Next I

End Sub
Sub Main()

'This example displays all the attributes of any schema object given
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim xMD As OraMetaData
Dim x As String

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDB", "scott/tiger", 0&)

' x is any database object, here the EMP table is used as an example
x = "EMP"
Set xMD = OraDatabase.Describe(x)
MsgBox x & " is of the type " & xMD.Type
RecursiveDescribe x, xMD

End Sub

関連項目:

- OraMetaDataオブジェクト

- OraMDAttributeオブジェクト

DestroyDatabasePoolメソッド

適用対象

OraSessionオブジェクト

説明

プールの親セッション・オブジェクトが破棄されると、そのプールも暗黙的に破棄されます。DestroyDatabasePoolメソッドをコールすることにより、いつでも明示的に破棄できます。

使用方法

DestroyDatabasePool()

備考

プールが存在しない場合にこのメソッドをコールすると、例外が発生します。

関連項目:
CreateDatabasePoolメソッド

DisableBuffering(OraLOB)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

説明

LOB操作のバッファリングを使用禁止にします。

使用方法

OraBlob.DisableBuffering
OraClob.DisableBuffering

備考

このメソッドは、バッファを自動的にフラッシュしません。バッファリングを使用禁止にする前に、FlushBufferメソッドを使用して変更内容をフラッシュしてください。

関連項目:

- EnableBuffering(OraLOB)メソッド

- FlushBuffer(OraLOB)メソッド

Div(OraIntervalDS)メソッド

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトを除数で除算します。

使用方法

OraIntervalDSObj.Div divisor

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] divisor

除数として使用するVariant型の数値またはOraNumberオブジェクト。

備考

この操作の結果は、OraIntervalDSオブジェクトに格納され、以前の値は上書きされます。戻り値はありません。

Div(OraIntervalYM)メソッド

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalYMオブジェクトを除数で除算します。

使用方法

OraIntervalYMObj.Div divisor

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] divisor

除数として使用するVariant型の数値またはOraNumberオブジェクト。

備考

この操作の結果は、OraIntervalYMオブジェクトに格納され、以前の値は上書きされます。戻り値はありません。

Div(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトを数値の引数で除算します。

使用方法

OraNumber.Div operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

Variant型の文字列、OraNumberオブジェクトまたは数値。

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

operandに0(ゼロ)は指定できません。0(ゼロ)で除算するとエラーになります。

DynasetCacheParamsメソッド

適用対象

OraParameterオブジェクト

説明

PL/SQLカーソルから作成されるダイナセットのキャッシュ・パラメータとフェッチ・パラメータを指定します。

使用方法

oraparameter.DynasetCacheParams SliceSize,perblock, Blocks, FetchLimit,FetchSize

引数

このメソッドの引数は、次のとおりです。

引数

説明

SliceSize

キャッシュ・スライス・サイズ。

perblock

ブロック当たりのキャッシュ・スライス。

Blocks

キャッシュのブロックの最大数。

FetchLimit

フェッチ配列のサイズ。

FetchSize

フェッチ配列のバッファ・サイズ。

備考

このメソッドは、カーソル変数を含むPL/SQLプロシージャの実行前にコールする必要があります。デフォルトでは、レジストリに指定されているキャッシュ・パラメータとフェッチ・パラメータのデフォルト値を使用して、ダイナセットが作成されます。

Editメソッド

適用対象

OraDynasetオブジェクト

説明

コピー・バッファにデータをコピーすることによって、現在の行の編集操作を開始します。

使用方法

oradynaset.Edit
oradynaset.DbEdit

備考

Editメソッドでは、ローカルにキャッシュされたデータがOracle Databaseの対応する行と比較されます。Oracle Databaseのデータが、参照中のデータと同じでない場合は、エラーが生成されます。この操作が成功すると、行は"SELECT ... FOR UPDATE"文を使用してロックされ、Updateメソッドによる編集が完了するまで、または進行中の編集を破棄するようなデータベース内での移動が発生するまでロックされた状態になります。"SELECT ... FOR UPDATE"文の動作は、OpenDatabaseメソッドがコールされたときに使用されたオプション・フラグのLock Waitモードの影響を受けます。

注意:
キャッシュされたデータは、BLOB、CLOB、Object、REFおよびコレクション型についてはデータベースと比較されず、無関係に更新されます(内容を保障しない書込み)。

編集中は、フィールドへの変更はシャドウであるコピー・バッファに保持され、データベースの実際の内容には反映されません。ただし、編集操作を行っている間、行への参照には、新しく変更されたデータが戻されます。

このダイナセットに付加されているデータ・コントロール内でデータを変更した場合は、次のレコード移動時にEditメソッドが自動的にコールされます。そのため、このメソッドが必要になるのは、コード内のフィールド・データを変更するときのみです。

注意:
Edit、AddNewまたはDeleteメソッドをコールすると、未処理のEditまたはAddNewのコールは処理前に取り消されます。Update操作を使用して保存されていない未処理の変更は、すべて取消処理中に失われます。

例

この例では、EditおよびUpdateメソッドを使用して、データベース内の値を更新する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

'Traverse until EOF is reached, settingeach employee's salary to zero
Do Until OraDynaset.EOF
OraDynaset.Edit
OraDynaset.Fields("sal").value = 0
OraDynaset.Update
OraDynaset.MoveNext
Loop
MsgBox "All salaries set to ZERO."

End Sub

関連項目:

- AddNewメソッド

- CreateDynasetメソッド

- Deleteメソッド

- OpenDatabaseメソッド

- Updateメソッド

Edit(OraRef)メソッド

適用対象

OraRefオブジェクト

説明

データベースの参照可能オブジェクトをロックします。

使用方法

OraRef.Edit

備考

OraRefの基礎となる参照可能なオブジェクトの属性を変更する前に、このメソッドをコールします(コールせずに変更しようとするとエラーが発生します)。このコールはネットワーク・ラウンドトリップを作成してデータベース内のオブジェクトをロックします。データベースでオブジェクトが別のユーザーによって変更されると、エラーが発生します。オブジェクトは、EditOptionプロパティを使用するとPINオペレーション中にもロックできます。

例

次の例では、データベースにあるPERSONという参照可能オブジェクトの属性を更新します。

サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。

ダイナセットの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim Person as OraRef

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from customers
set OraDynaset = OraDatabase.CreateDynaset("select * from customers", 0&)

'retrieve a aperson column from customers.
'Here Value property of OraField object 'returns Person OraRef
set Person = OraDynaset.Fields("aperson").Value

'locks the Person object in the server for modifying its attributes
Person.Edit
Person.Name = "Eric"
Person.Age = 35
'Update method flushes the modified referenceable object in the server
Person.Update

パラメータの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim Person as OraRef

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create an  OraParameter object represent Address object bind Variable
OraDatabase.Parameters.Add "PERSON", Null, ORAPARM_OUTPUT, _
ORATYPE_REF,"PERSON"

'execute the sql statement which selects person from the customers table
OraDatabase.ExecuteSQL ("BEGIN select aperson into :PERSON" & _
"from customers where account = 10;  END;")

'get the Person object from OraParameter
set Person = OraDatabase.Parameters("PERSON").Value

'locks the Person object in the server for modifying its attributes
Person.Edit
Person.Name = "Eric"
Person.Age = 35

'Update method flushes the modified referenceable object in the server
Person.Update

関連項目:
EditOption(OraRef)プロパティ

ElementValueメソッド

適用対象

OraCollectionオブジェクト

説明

イテレータが指しているコレクション要素の現在の値を戻します。

使用方法

elem_val = OraCollection.ElementValue

引数

このメソッドの引数は、次のとおりです。

引数

説明

elem_val

コレクションの要素値を表すVariant。

要素の型

Object型およびREF型の要素の場合は、要素の値が、その型に相当するOO4Oオブジェクトとして戻されます。次の表に、要素の型とその要素の戻り値を示します。

要素の型

要素の値

Object

OraObject

REF

OraRef

Date

String

Number

String

CHAR、VARCHAR2

String

Real

Real

Integer

Integer

備考

EOCまたはBOCプロパティがTRUEを戻しているときにこのメソッドをコールするとエラーが発生します。要素のVariant型は、コレクションの要素の型によって決まります。

例

「例: OraCollectionイテレータ」を参照してください。

関連項目:

- CreateIteratorメソッド

- IterNextメソッド

- IterPrevメソッド

EnableBuffering(OraLOB)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

説明

LOB操作のバッファリングを使用可能にします。

使用方法

OraBlob.EnableBuffering
OraClob.EnableBuffering

備考

バッファリングを使用可能にすると、FlushBufferメソッドがコールされるまでLOBバッファリング・サブシステムで変更内容をバッファリングし、ネットワーク・ラウンドトリップ回数を最小に抑えます。LOBの特定の領域に少量の読取りと書込みを繰り返し実行するようなアプリケーションの場合に効果があります。

LOBバッファリングの使用には、多くの注意事項と制限があります。ここでは要約を示しますが、詳細は『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

制限事項

- バッファリングが使用可能であるときには、次のLOBメソッドを使用できません。

- Append

- Copy

- Erase

- Size

- Trim

- CopyFromBFILE

- CopyFromFile

- CopyToFile

- 1回の読取りまたは書込み操作は、512KBに制限されています。

- バッファされた操作に関するエラー報告は、次のデータベース・アクセスまで遅延されます。

- トランザクション・サポートは保証されません。エラーが発生した場合、変更内容のロールバックはユーザーが手動で行う必要があります。

- トランザクション内で、バッファリング・システムをバイパスするLOB列に対して、バッファリング可能なLOBとしての更新を実行しないでください。この状況は、INSERT文の実行で発生する可能性があります。

- バッファリングして所定のLOBに書込みができるLOBオブジェクトは1つのみです。同じLOBを指している他のLOBオブジェクトがバッファリングして書き込もうとすると、エラーになります。

- OraParameterオブジェクトから取得したLOBオブジェクトを、バッファリング可能にしてOUTパラメータにバインドすると、エラーになります。

- バッファリングが可能なLOBに対してCloneメソッドを使用すると、エラーになります。

- LOBの最後に直接追加することはできますが、オフセットを使用してLOBの最後を超えて書込み操作を行うと、空白の埋込み(CLOBの場合)または0(ゼロ)の埋込み(BLOBの場合)となり、エラーになります。

関連項目:
『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』

Enqueue(OraAQ)メソッド

適用対象

OraAQオブジェクト

説明

このオブジェクトに含まれるメッセージ(OraAQMsg)をエンキューします。

使用方法

Msgid = Q.Enqueue

備考

正常に実行された場合、このメソッドはメッセージ識別子をバイト配列で戻します。それ以外の場合は、空の配列(NULL)を戻します。

例

注意:
次のサンプル・コードは、メッセージ・デキューの標準的な例ですが、そのままでは実行できません。
完全なAQサンプルは、\OO4O\VB\SAMPLES\AQディレクトリにあります。

RAW型のメッセージのエンキュー

'Create an OraAQ object for the queue "DBQ"
Dim Q as OraAQ
Dim Msg as OraAQMsg
Dim OraSession as OraSession
Dim DB as OraDatabase

Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set DB = OraSession.OpenDatabase("mydb", “scott/tiger" 0&)
Set Q = DB.CreateAQ("DBQ")

'Get a reference to the AQMsg object
Set Msg = Q.AQMsg
Msg.Value = "Enqueue the first message to a RAW queue."

'Enqueue the message
Q.Enqueue

'Enqueue another message.
Msg.Value = "Another message"
Q.Enqueue

'Enqueue a message with non-default properties.
Msg.Priority = ORAQMSG_HIGH_PRIORITY
Msg.Delay = 5
Msg.Value = "Urgent message"
Q.Enqueue
Msg.Value = "The visibility option used in the enqueue call" & _
"is ORAAQ_ENQ_IMMEDIATE"
Q.Visible = ORAAQ_ENQ_IMMEDIATE
Msgid = Q.Enqueue

'Enqueue Ahead of message Msgid_1
Msg.Value = "First Message to test Relative Message id"
Msg.Correlation = "RELATIVE_MESSAGE_ID"

Msg.delay = ORAAQ_MSG_NO_DELAY
Msgid_1 = Q.Enqueue
Msg.Value = "Second message to test RELATIVE_MESSAGE_ID is queued" & _
" ahead of the First Message "
Q.RelMsgId = Msgid_1
Msgid = Q.Enqueue

Oracleオブジェクト型のメッセージのエンキュー

'Prepare the message. MESSAGE_TYPE is a user defined type in the "AQ" schema
Set OraMsg = Q.AQMsg(23, "MESSAGE_TYPE","SCOTT")
Set OraObj = DB.CreateOraObject("MESSAGE_TYPE")

OraObj("subject").Value = "Greetings from OO4O"
OraObj("text").Value = "Text of a message originated from OO4O"

Msgid = Q.Enqueue

Erase(OraLOB)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

説明

指定したオフセットから始まるこのオブジェクトのLOB値の指定部分を消去します。

使用方法

OraBlob.Erase amount, offset
OraClob.Erase amount, offset

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] amount

消去する最大文字数またはバイト数を指定する整数。

[in] offset [オプション]

LOB値の消去を開始する絶対オフセットを指定するためのInteger。デフォルト値は1です。

備考

このメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。要求した文字数またはバイト数を消去する前にLOB値の最後に達した場合は、実際の文字数またはバイト数と要求した文字数またはバイト数の間に相違が発生します。BLOB型の場合の消去は、既存のLOB値を0(ゼロ)バイト充填文字で上書きします。CLOB型の場合の消去は、既存のLOB値を空白で上書きします。

ExecuteSQLメソッド

適用対象

OraDatabaseオブジェクト

説明

SELECT以外のSQL文またはPL/SQLブロックを1つ実行します。

使用方法

rowcount = oradatabase.ExecuteSQL(sql_statement)
rowcount = oradatabase.DbExecuteSQL(sql_statement)

引数

このメソッドの引数は、次のとおりです。

引数

説明

sql_statement

SELECT以外の有効なOracle SQL文。

備考

SQL文を実行し、その文で処理された行数を戻します。

sql_statement引数は、ブレークのない連続する1行として指定できます。行をブレークする必要がある場合は、改行(ASCII 10)を使用します。キャリッジ・リターン(ASCII 13)は、基礎となるOracle DatabaseファンクションがNULL終端文字として取り扱うため、使用しないでください。

SQL文を実行すると、データベースに対するコミットがデフォルトで生成されます。これを回避するには、ExecuteSQLメソッドの使用前に、セッション・オブジェクトにBeginTransメソッドを使用します。

PL/SQLのバインド変数は、OraParametersと組み合せて使用できます。

PL/SQLブロックの実行時またはストアド・プロシージャのコール時は、PL/SQLの無名ブロックを実行する場合のように、コールの前後にBEGIN文とEND文を付ける必要があります。これは、SQL*PlusおよびSQL*DBAのEXECUTEコマンドと同じです。

注意:
実行するSQL文またはPL/SQLブロックが、現在オープンしているダイナセットに悪影響を与える可能性があるため、ExecuteSQLメソッドの使用には注意が必要です。ExecuteSQLメソッドに使用するOraDatabaseオブジェクトが、ダイナセットを作成するために使用されたオブジェクトと同一の場合は、特に注意してください。不確実な場合は、異なるOraDatabaseオブジェクトを使用してください。

トランザクション・モードでデータベースのコミットが発行された場合は、通常のダイナセット操作が悪影響を受ける可能性があります。これは、SQLのコミット文、データ制御言語(DCL)またはデータ定義言語(DDL)コマンドが発行された場合に発生する可能性があります。CREATE、DROP、ALTER、GRANTおよびREVOKEなど、DCLとDDLのSQLコマンドは、常にコミットを強制し、コマンド以前に実行された内容をすべてコミットします。DCL、DDLおよびトランザクションの詳細は『Oracle Database SQL言語リファレンス』を参照してください。

データ型

Long Integer

例

例: ExecuteSQL

この例では、AddおよびRemoveパラメータ・メソッド、ServerTypeパラメータ・プロパティ、およびストアド・プロシージャGetEmpNameとストアド・ファンクションGetSalをコールするExecuteSQLデータベース・メソッドを使用します。例を実行する前に、ORAEXAMP.SQLファイルを実行して、GetEmpNameとGetSal、およびその他の必要なオブジェクト型とLOBをOracle Databaseに作成してください。次に、このOO4Oコード例をコピーして、フォームの定義セクションに貼り付け、プログラムを実行します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDatabase

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Add EMPNO as an Input/Output parameter and set its initial value.
OraDatabase.Parameters.Add "EMPNO", 7369, ORAPARM_INPUT
OraDatabase.Parameters("EMPNO").ServerType = ORATYPE_NUMBER

'Add ENAME as an Output parameter and set its initial value.
OraDatabase.Parameters.Add "ENAME", 0, ORAPARM_OUTPUT
OraDatabase.Parameters("ENAME").ServerType = ORATYPE_VARCHAR2

'Add SAL as an Output parameter and set its initial value.
OraDatabase.Parameters.Add "SAL", 0, ORAPARM_OUTPUT
OraDatabase.Parameters("SAL").ServerType = ORATYPE_NUMBER

'Execute the Stored Procedure Employee.GetEmpName to retrieve ENAME.
' This Stored Procedure can be found in the file ORAEXAMP.SQL.
OraDatabase.ExecuteSQL ("Begin Employee.GetEmpName (:EMPNO, :ENAME); end;")
'Display the employee number and name.

'Execute the Stored Function Employee.GetSal to retrieve SAL.
' This Stored Function can be found in the file ORAEXAMP.SQL.
OraDatabase.ExecuteSQL ("declare SAL number(7,2); Begin" & _
":SAL:=Employee.GetEmpSal (:EMPNO); end;")

'Display the employee name, number and salary.
MsgBox "Employee " & OraDatabase.Parameters("ENAME").value & ", #" & _
OraDatabase.Parameters("EMPNO").value & ",Salary=" & _
OraDatabase.Parameters("SAL").value

'Remove the Parameters.
OraDatabase.Parameters.Remove "EMPNO"
OraDatabase.Parameters.Remove "ENAME"

OraDatabase.Parameters.Remove "SAL"
End Sub

関連項目:

- 『Oracle Database SQL言語リファレンス』

- CreateDynasetメソッド

- OraParametersコレクション

- Transactionsプロパティ

Exist(OraCollection)メソッド

適用対象

OraCollectionオブジェクト

説明

指定した索引に要素が存在する場合はTrue、それ以外の場合は戻します。ORATYPE_TABLE型のOraCollectionの場合のみ有効です。

使用方法

exists = OraCollection.Exist index

引数

このメソッドの引数は、次のとおりです。

引数

説明

[out] exists

要素の存在状態を示すブール値。

[in] index

要素の索引を指定する整数。

備考

なし

Exp(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

eを底とするOraNumberオブジェクトのべき乗を計算します。

使用方法

OraNumber.Exp

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

FetchOraRefメソッド

適用対象

OraDatabaseオブジェクト

説明

キャッシュに参照可能オブジェクトをフェッチし、関連付けられているOraRefオブジェクトを戻します。

使用方法

Set OraRef = OraDatabase.FetchOraRef(hex_value)

引数

このメソッドの引数は、次のとおりです。

引数

説明

hex_value

16進のREF値を含んだ文字列。

備考

hex_value引数は、OraRef.HexValueプロパティを介して、またはOraDynaset.GetXMLメソッドで生成されたXMLドキュメントから取得できます。

関連項目:

- HexValue(OraRef)プロパティ

- GetXMLメソッド

FieldSizeメソッド

適用対象

OraFieldオブジェクト

説明

LONGまたはLONG RAW型のフィールドに格納されたバイト数を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

data_size = orafield.FieldSize( )
data_size = orafield.DbFieldSize( )

備考

LONGまたはLONG RAW型のフィールドに格納されたバイト数(約64KBの値まで)を戻します。64KBを超える値がフィールドに含まれている場合、FieldSizeは-1を戻します。

Oracle Databaseは、64KBを超える列の長さを戻さないため、長さを判断する唯一の方法は、列を取り出すことです。リソース節約のため、64KBを超える長い列が自動的に取り出されることはありません。

データ型

Long Integer

関連項目:

- AppendChunkメソッド

- GetChunkメソッド

- OraFieldオブジェクト

- Typeプロパティ

FindFirst、FindLast、FindNextおよびFindPreviousメソッド

適用対象

OraDynasetオブジェクト

説明

FindClauseに一致する指定行をダイナセットで検索します。FindClauseは、有効なWHERE句で、WHEREのないものを指定できます。現在のFindClauseが、前回の検索操作の最後の条件句と一致している場合、現在のFindClauseは再解析されません。

これらのメソッドは、一致する行に到達している場合を除いて、アドバイス・オブジェクトをコールすることなく、一致する行に現在の行を直接移動します。一致する行が見つからない場合、NoMatchプロパティはTRUEに設定され、現在の行はそのままになります。

使用方法

oradynaset.FindFirst FindClause
oradynaset.FindLast FindClause
oradynaset.FindNext FindClause
oradynaset.FindPrevious FindClause

備考

FindClauseには、次の種類の式が使用できます。

- 単純な問合せ。例: "deptno = 20"。

- 複雑な式を含む問合せ。例: "sal + 100 > 1000"。

- SQLファンクション・コール。例: "UPPER(ename) = 'SCOTT' "または"NVL(comm, 0) = 0"。

- 副問合せ。例: "deptno in (select deptno from dept)"。

SQLのLIKE演算子は、複数バイト言語では機能しません。ユーザーのスキーマには、DUALという表またはシノニムが必要です。日付値は、「コントロールパネル」で指定された書式であるVisual Basic書式で取り出され、比較されます。したがって、デフォルトのOracle書式「DD-MON-YYYY」などの他の書式が使用されている場合は、日付の比較は失敗します。

SQLファンクションTO_CHAR (date, fmt)は、使用できません。1つ目の引数はネイティブのOracle形式の日付値であることが必要ですが、OO4Oでは文字列の日付のみが処理されるためです。

SQLファンクションTO_DATEでは、文字列が日付に変換されますが、前述のとおり、OO4OによってVisual Basic形式の文字列に再変換されるため、比較はやはり失敗します。

NO_CACHEダイナセットのFindPreviousおよびFindLastメソッドは機能しません。NoMatchはTRUEに設定されます。

注意: エラーを回避するには、Findメソッドのコール前にEOFまたはBOFをチェックします。

例

この例では、FindFirst、FindNext、FindPreviousメソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim OraFields As OraFields
Dim FindClause As String

Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "SCOTT/TIGER", 0&)
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp where empno" & _
">= 7654 and empno <= 7844 ", ORADYN_NO_BLANKSTRIP)

Set OraFields = OraDynaset.Fields

OraDynaset.MoveFirst

'FindClause for job as MANAGER
FindClause = "job LIKE '%GER'"

OraDynaset.FindFirst FindClause

'NoMatch property set to true , if no rows found
If OraDynaset.NoMatch Then
MsgBox "Couldn't find rows "
else
MsgBox OraFields("ename").Value  ' Should display BLAKE

OraDynaset.FindNext FindClause
MsgBox OraFields("ename").Value  ' Should display CLARK

OraDynaset.FindPrevious FindClause
MsgBox OraFields("ename").Value  ' Should display BLAKE

endif

End Sub

関連項目:

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- NoMatchプロパティ

- OraDatabaseオブジェクト

Floor(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトの下限値を計算します。

使用方法

OraNumber.Floor

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

FlushBuffer(OraLOB)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

説明

LOBのバッファリングが使用可能な場合に、LOBのデータをデータベースにフラッシュします(移します)。

使用方法

OraBlob.FlushBuffer OraClob.FlushBuffer

関連項目:
EnableBuffering(OraLOB)メソッド

GetDatabaseFromPoolメソッド

適用対象

OraSessionオブジェクト

説明

プールから、次に使用可能なOraDatabaseオブジェクトを戻します。

使用方法

GetDatabaseFromPool(long waitTime)

引数

このメソッドの引数は、次のとおりです。

引数

説明

waitTime

プールに最大数のオブジェクト数があり、すべてが使用中の場合に、このコールが次に使用可能なオブジェクトを待機している時間(ミリ秒単位)。

備考

プールからOraDatabaseオブジェクトを取り出すには、GetDatabaseFromPoolメソッドをコールします。このファンクションは、OraDatabaseオブジェクトへの参照を戻します。プールに最大許容オブジェクト数に満たないオブジェクトが保有され、それらのオブジェクトがすべて使用中の場合は、暗黙的に追加のOraDatabaseオブジェクトが作成されます。また、プール内のアイテムにタイムアウトしたOraDatabaseオブジェクトが含まれている場合も、新しいオブジェクトが作成されて戻されます。プールから取得したOraDatabaseオブジェクトは、使用中のマークが付けられ、そのオブジェクトがアプリケーションから参照されなくなるとプールに戻されます。

このコールでは、次の場合に例外が発生します。

- 接続プールが存在しない場合

- プールにオブジェクトがない場合

- タイムアウトが発生した場合

OraSessionのLastServerErrプロパティには、例外の特定原因を示すコードが含まれます。

関連項目:
CreateDatabasePoolメソッド

GetChunkメソッド

適用対象

OraFieldオブジェクト

説明

LONGまたはLONG RAW型フィールドの全体または一部分のバイトを含む文字列を戻します。

使用方法

data_string = orafield.GetChunk(offset, numbytes)
data_string = orafield.DbGetChunk(offset, numbytes)

引数

このメソッドの引数は、次のとおりです。

引数

説明

offset

データのコピー前にスキップするフィールド内のバイト数。

numbytes

コピーするバイト数。

備考

GetChunkメソッドは、通常、ローカル・キャッシュから指定されたバイト数を取り出します。キャッシュでデータが見つからない場合、GetChunkメソッドはそれをデータベースに要求します。ダイナセット内のすべてのフィールド(LONGまたはLONG RAW型のフィールドを除く)からデータが取り出されて、一貫性検査のためにキャッシュされている値と比較されます。最後のフェッチ後に変更があった場合、GetChunkメソッドは操作を停止し、エラーが発生してNull文字列が戻されます。

LONGまたはLONG RAW型のフィールドが65280バイト未満の場合は、GetChunkメソッドを使用せずにValueプロパティを使用すると、データを速く取り出すことができます。GetChunkメソッドは、別名を付けたLONGまたはLONG RAW型のフィールドには使用できません。

「LONG RAWからLOBまたはBFILEへの移行」を参照してください。

例

この例では、GetChunkメソッドを使用してデータベース内のLONG RAW型の列を取り出し、ファイルとして保存する方法を示します。この例では、longrawという列を含んだ表を示すOraDynasetという有効なダイナセットが存在していると想定しています。このコードをコピーして、フォームの定義セクションに貼り付けてください。このプロシージャは、有効なファイル名を使用してコールしてください。

Sub GetChunkExample (FName As String)

'Declare various variables
Dim CurSize As Integer, ChunkSize  As Long
Dim I As Integer, FNum As Integer, CurChunk As String

'Set the size of each chunk
ChunkSize = 10240

frmChunk.MousePointer = HOURGLASS

'Get a free file number
FNum = FreeFile

'Open the file
Open FName For Binary As #FNum

I = 0
'Loop through all of the chunks. Oracle does not return the size of columns >
' 64KB. We should loop until the length of our block is less than we asked for.
Do
CurChunk = OraDynaset.Fields("LONGRAW").GetChunk(I * ChunkSize, ChunkSize)
CurSize = Len(CurChunk) 'Get the length of the current chunk.

Put #FNum, , CurChunk   'Write chunk to file.
I = I + 1
Loop Until CurSize < ChunkSize

'Close the file.
Close FNum

frmChunk.MousePointer = DEFAULT

End Sub

関連項目:

- LONG RAWからLOBまたはBFILEへの移行

- AppendChunkメソッド

- FieldSizeメソッド

- GetChunkメソッド

- Typeプロパティ

- Valueプロパティ

- OraFieldオブジェクト

GetChunkByteメソッド

適用対象

OraFieldオブジェクト

説明

LONGまたはLONG RAW型のフィールドからデータを読み込み、バイト配列に格納し、読み込んだデータのサイズを戻します。

使用方法

Size_read = orafield.GetChunkByte(ByteArray, offset, numbytes)

引数

このメソッドの引数は、次のとおりです。

引数

説明

ByteArray

データを格納するバイト配列の最初の要素。

offset

データのコピー前にスキップするフィールド内のバイト数。

numbytes

コピーするバイト数。

備考

可能な場合、GetChunkByteメソッドは、ローカル・キャッシュから指定されたバイト数を取り出します。ただし、一部のデータは、リソース節約のために、ローカルに格納されない場合があります。この場合、GetChunkByteメソッドは、必要に応じてデータベースから必要なデータを要求します。この処理の一部として、ダイナセット内のすべてのフィールド(LONGまたはLONG RAW型のフィールドを除く)からデータが取り出されて、一貫性検査のためにキャッシュされている値と比較されます。元の部分データのフェッチ後に変更があった場合、GetChunkByteメソッドは操作を停止し、エラーが発生します。中止の場合、戻される文字列はNullになります。

LONGまたはLONG RAW型のフィールドが65280バイト未満の場合は、GetChunkByteメソッドを使用せずにValueプロパティを使用すると、データを速く取り出すことができます。GetChunkByteメソッドは、別名を付けたLONGまたはLONG RAW型のフィールドには使用できません。

例

この例では、GetChunkByteメソッドを使用してデータベース内のLONG RAW型の列を取り出し、ファイルとして保存する方法を示します。この例では、longrawという列を含んだ表を示すOraDynasetという有効なダイナセットが存在していると想定しています。このコードをコピーして、フォームの定義セクションに貼り付けてください。このプロシージャは、有効なファイル名を使用してコールしてください。

Sub GetChunkByteExample (FName As String)

'Declare various variables
Dim CurSize As Integer, ChunkSize  As Long
Dim I As Integer, FNum As Integer, CurChunk() As Byte

'Set the size of each chunk
ChunkSize = 10240
'Redim CurChunk Array
ReDim CurChunk(ChunkSize)

frmChunk.MousePointer = HOURGLASS

'Get a free file number
FNum = FreeFile

'Open the file
Open FName For Binary As #FNum

I = 0
'Loop through all of the chunks
'Oracle does not return the size of columns > 64KB. We should loop until the 'length of our block is less than we asked for.

Do
CurSize = OraDynaset.Fields("type_longraw").GetChunkByte(CurChunk(0), I * ChunkSize, ChunkSize)

If CurSize > 0 AND CurSize < ChunkSize Then
ReDim CurChunk(CurSize)
CurSize = OraDynaset.Fields("type_longraw").GetChunkByte(CurChunk(0), I * ChunkSize, CurSize)
End If
Put #FNum, , CurChunk   'Write chunk to file.
I = I + 1
Loop Until CurSize <= 0

'Close the file.
Close FNum

frmChunk.MousePointer = DEFAULT

End Sub

関連項目:
詳細は、「LONG RAWからLOBまたはBFILEへの移行」を参照してください。

GetChunkByteExメソッド

適用対象

OraFieldオブジェクト

説明

LONGまたはLONG RAW型のフィールドからデータを読み込み、Variantに格納し、読み込んだデータのサイズを戻します。

使用方法

amount_read = orafield.GetChunkByteEx(ByteArray, offset, numbytes)

引数

このメソッドの引数は、次のとおりです。

引数

説明

ByteArray

データを格納するVariant型のバイト配列の名前。

offset

データのコピー前にスキップするフィールド内のバイト数。

numbytes

コピーするバイト数。

備考

可能な場合、GetChunkByteExメソッドは、ローカル・キャッシュから指定されたバイト数を取り出します。ただし、一部のデータは、リソース節約のために、ローカルに格納されない場合があります。この場合、GetChunkByteExメソッドは、必要に応じてデータベースから必要なデータを要求します。この処理の一部として、ダイナセット内のすべてのフィールド(LONGまたはLONG RAW型のフィールドを除く)が取り出されて、一貫性検査のためにキャッシュされている値と比較されます。元の部分データのフェッチ後に変更があった場合、GetChunkByteExは操作を中止し、エラーを戻します。

GetChunkByteExメソッドの最初のパラメータは、バイト配列の最初の要素を指定するGetChunkByteメソッドとは異なり、Variantであるため、ASP/IIS環境ではGetChunkByteExメソッドのみ使用可能です。

LONGまたはLONG RAW型のフィールドが65280バイト未満の場合は、GetChunkByteExメソッドを使用せずにValueプロパティを使用すると、データを速く取り出すことができます。

「LONG RAWからLOBまたはBFILEへの移行」を参照してください。

例

GetChunkByteExメソッドを使用してLONG RAW型の列を取り出す例

この例では、GetChunkByteExメソッドを使用してデータベース内のLONG RAW型の列を取り出し、ファイルとして保存する方法を示します。この例では、type_longrawという列を含んだ表を示すOraDynasetという有効なダイナセットが存在していると想定しています。このコードをコピーして、フォームの定義セクションに貼り付けてください。このプロシージャは、有効なファイル名を使用してコールしてください。

Sub GetChunkByteExExample (FName As String)
'Declare various variables
Dim bytesread As Integer, ChunkSize As Long ,

bytearr() as byte
Dim I As Integer, FNum As Integer, CurChunk
'Set the size of each chunk
ChunkSize = 10240

frmChunk.MousePointer = HOURGLASS
'Get a free file number
FNum = FreeFile
'Open the file
Open FName For Binary As #FNum
I = 0
'Loop through all of the chunks
'Oracle does not return the size of columns > 64KB.
'We should loop until the length of our block is
'less than we asked for.
Do
bytesread = OraDynaset.Fields("type_longraw").GetChunkByteEx(CurChunk,_
I * ChunkSize, ChunkSize)
'redim byte array
redim bytearr(bytesread - 1)
bytearr = CurChunk
Put #FNum, , bytearr 'Write chunk to file.
I = I + 1
Loop Until bytesread < ChunkSize
'Close the file.
Close FNum
frmChunk.MousePointer = DEFAULT
End Sub

Active Server Pages(ASP)でGetChunkByteExメソッドを使用する例

'This example is for use with ASP (Active Server Pages)
<%@ LANGUAGE = VBScript %>
<%Response.ContentType = "image/JPEG"%>
<%
Dim OraDatabase, Oradynaset
Dim Chunksize, BytesRead, CurChunkEx
'This assumes a pool of database connections have been created in the global.asa
Set OraDatabase = OraSession.getDatabaseFromPool(10)
'This assumes a table called "art_gallery" and
'displays JPEG images stored in the table
Set OraDynaset = OraDatabase.CreateDynaset("select art from art_gallery " & _
"where artist = 'Picasso'", 0)

BytesRead = 0
'Reading in 32K chunks
ChunkSize= 32768
Do
BytesRead = OraDynaset.Fields("picture").GetChunkByteEx(CurChunkEx, _
i * ChunkSize, ChunkSize)
if BytesRead > 0 then
Response.BinaryWrite CurChunkEx
end if
Loop Until BytesRead < ChunkSize
'Cleanup, remove all local references
Set OraDynaset = Nothing
Set Oradatabase = Nothing
%>

関連項目:
LONG RAWからLOBまたはBFILEへの移行

GetXMLメソッド

適用対象

OraDynasetオブジェクト

説明

ダイナセットの内容に基づいてXMLドキュメントを生成します。

使用方法

XMLstring = oradynaset.GetXML(startrow, maxrows)

引数

このメソッドの引数は、次のとおりです。

引数

説明

startrow

開始する行を示す行識別子(OraDynaset.RowPositionを参照)。この引数のデフォルト値は0(第1行)です。

maxrows

取得する行の最大数(レコード・セットの最後に達した場合、戻される行はこれより少なくなります)。この引数を省略した場合は、すべての行が戻されます。

備考

このメソッドは、XMLドキュメントを含む文字列を返します。

出力XMLの書式は、OraDynasetおよびOraFieldオブジェクトのXMLプロパティを使用してカスタマイズできます。

関連項目:

- OraDynasetオブジェクト

- OraFieldオブジェクト

- RowPositionプロパティ

GetXMLToFileメソッド

適用対象

OraDynasetオブジェクト

説明

XMLドキュメントを生成し、それをファイルに書き込みます。

使用方法

oradynaset.GetXMLToFile (filename, startrow, maxrows)

引数

このメソッドの引数は、次のとおりです。

引数

説明

filename

XMLが書き込まれるファイルの名前。同じ名前の既存ファイルは上書きされます。

startrow

開始する行を示す行識別子(OraDynaset.RowPositionを参照)。この引数のデフォルト値は0(第1行)です。

maxrows

取得する行の最大数(レコード・セットの最後に達した場合、戻される行はこれより少なくなります)。この引数を省略した場合は、すべての行が戻されます。

備考

戻り値はありません。

XML出力の書式は、OraDynasetおよびOraFieldオブジェクトのXMLプロパティを使用してカスタマイズできます。

関連項目:

- OraDynasetオブジェクト

- OraFieldオブジェクト

- RowPositionプロパティ

GetRowsメソッド

適用対象

OraDynasetオブジェクト

説明

ダイナセット・オブジェクトの複数のレコードをVariant型のSAFEARRAYに取り出します。

使用方法

Array =OraDynaset.GetRows(num_rows, start, fields )

引数

このメソッドの引数は、次のとおりです。

引数

説明

num_rows [オプション]

取り出すレコードの数を表すInteger。デフォルト値はダイナセット内の行全体の数です。

start [オプション]

GetRows操作を開始するダイナセットの開始位置を表すInteger。デフォルト値はダイナセットの現在の位置です。

fields [オプション]

単一のフィールド名、フィールド位置、フィールド名の配列またはフィールド位置番号の配列を表すVariant。GetRowsメソッドはこれらのフィールド内のデータのみを戻します。

備考

ダイナセットから2次元の配列にレコードをコピーするには、GetRowsメソッドを使用します。最初の添字はフィールドを識別し、2番目の添字は行番号を識別します。GetRowsメソッドがデータを戻すときに、Array変数は自動的に適切なサイズに設定されます。

GetRowsメソッドのコールは、ダイナセット・オブジェクトの現在の行位置を変更しません。

例

次の例では、GetRowsメソッドを使用してデータを取り出します。

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim row, col As Integer
Dim fields() As String

'Create the OraSession Object
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", _
"scott/tiger", 0&)

Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

'The following line executes GetRows to get all records
data_array = OraDynaset.GetRows()

'Now display all the data in data_array
For row = 0 To UBound(data_array, 2)
For col = 0 To UBound(data_array, 1)
Debug.Print data_array(col, row)
Next col
Next row

'The following lines execute GetRows to get the data from
'the ename and empno fields starting at 5

ReDim fields(2)

fields(0) = "EMPNO"
fields(1) = "ENAME"

'Execute GetRows
data_array = OraDynaset.GetRows(, 5, fields)

'Now display all the data in data_array
For row = 0 To UBound(data_array, 2)
For col = 0 To UBound(data_array, 1)
Debug.Print data_array(col, row)
Next col
Next row

Get_Valueメソッド

適用対象

OraParamArrayオブジェクト

説明

指定した索引にある配列の特定要素の値を戻します。

使用方法

OraParamArray.Get_Value(array, index)

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] array

配列名を表す文字列。

[in] index

オブジェクトの索引値を表す整数。

備考

OraParamArray.Get_Valueメソッドは、フィールドの値をVariantで戻します。パラメータの内容は、data_value = oraparameter.Valueの値によって設定されます。

Oracleのデフォルト日付書式は"DD-MMM-YY"ですが、DATE型のフィールドは、コントロール パネルで指定されているVisual Basicのデフォルト日付書式で戻されることに注意してください。

Value引数には、OraBLOBオブジェクトなどのOracle Database 10gオブジェクトを使用できます。Put_Valueでは、その時点でオブジェクトのコピーが作成されるので、そのインデックス値を参照する新規オブジェクトを取得するためにGet_Valueにアクセスする必要があります。たとえば、iotypeがORATYPE_BOTHで、ダイナセットから取得したOraBLOBオブジェクトが入力値として渡される場合、新たに更新されたParamaterArrayオブジェクトの出力値を取得するためには、SQLコードが実行された後にGet_Valueをコールする必要があります。

ダイナセットと同様に、ParamaterArrayのGet_Valueプロパティから取得したオブジェクトは、常に、そのParamaterArrayの索引について最新の値を参照します。Visual BasicのNULL値を値として渡すこともできます。Visual BasicのEMPTY値は、BLOBおよびCLOBに対しては空のLOBを意味する目的で、Object、VARRAYおよびネストした表のデータ型に対してはオブジェクトの属性がすべてNULLであることを意味する目的で使用できます。

このメソッドは設計時には使用できません。実行時は読取り専用です。

RAW型の列(ServerTypeがORATYPE_RAW_BIN)にバインドする場合、値はバイト配列である必要があります。

HypCos(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトの双曲コサインを計算します。

使用方法

OraNumber.HypCos

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

HypSin(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトの双曲サインを計算します。

使用方法

OraNumber.HypSin

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

HypTan(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトの双曲タンジェントを計算します。

使用方法

OraNumber.HypTan

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

InitIteratorメソッド

適用対象

OraCollectionオブジェクト

説明

コレクションをスキャンするイテレータを初期化します。

使用方法

OraCollection.InitIterator

備考

このメソッドは、イテレータを初期化してコレクションの先頭を指すようにします。このメソッドが同じOracle Database 10gコレクション・インスタンスに対してコールされた場合は、イテレータがコレクションの先頭を指すようにリセットされます。ダイナセットの行ナビゲーションまたはパラメータRefreshメソッドによって基礎となるコレクションが変更された場合、OraCollectionオブジェクトは自動的にイテレータを再初期化します。

InitIteratorメソッドのコール後、IterNextメソッドをコールしないとコレクションの最初の要素が余分に繰り返されます。

例

「例: OraCollectionイテレータ」を参照してください。

関連項目:

- IterNextメソッド

- IterPrevメソッド

IsEqual(OraIntervalDS)メソッド

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトが引数と等しいかどうかをチェックします。

使用方法

isEqual = OraIntervalDSObj.IsEqual value

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

比較するVariant型の文字列、数値またはOraIntervalDSオブジェクト。

備考

ブール値を戻します。OraIntervalDSオブジェクトが引数と等しい場合はTRUE、それ以外の場合はFALSEを戻します。

valueがVariant型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。

valueが数値の場合、提供される値は、構成されたOraIntervalDSオブジェクトが表す合計日数を表す必要があります。

IsEqual(OraIntervalYM)メソッド

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalYMオブジェクトが引数と等しいかどうかをチェックします。

使用方法

isEqual = OraIntervalYMObj.IsEqual value

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

比較するVariant型の文字列、数値またはOraIntervalYMオブジェクト。

備考

ブール値を戻します。OraIntervalYMオブジェクトが引数と等しい場合はTRUE、それ以外の場合はFALSEを戻します。

valueがVariant型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。

valueが数値の場合、提供される値は、構成されたOraIntervalYMオブジェクトが表す合計年数を表す必要があります。

IsEqual(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトが引数の値と等しいかどうかをチェックします。

使用方法

bool  = OraNumber.IsEqual value

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

Variant型の文字列、OraNumberまたは数値。

備考

ブール値を戻します。すべての値が等しい場合はTRUE、それ以外の場合はFALSEを戻します。

IsEqual(OraTimeStamp)メソッド

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトが引数と等しいかどうかをチェックします。

使用方法

isEqual = OraTimeStampObj.IsEqual value format

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

比較するVariant型の文字列、日付またはOraTimeStamp。

[in] [オプション] format

値がString型の場合に、valueの解析に使用されるTIMESTAMPの書式文字列を指定します。formatが指定されていない場合は、値の解析に現行のOraTimeStampオブジェクトのFormatプロパティが使用されます。

備考

ブール値を戻します(OraTimeStampオブジェクトが引数と等しい場合はTRUE、それ以外の場合はFALSEを戻します)。IsEqualメソッドは、OraTimeStampオブジェクトに格納されているすべての日時値を比較します。

valueがString型の場合、文字列の書式は、format引数で指定した書式と一致する必要があります。formatを指定しない場合、文字列の書式は、現行のOraTimeStampオブジェクトのFormatプロパティと一致する必要があります。

IsEqual(OraTimeStampTZ)メソッド

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトが引数と等しいかどうかをチェックします。

使用方法

isEqual = OraTimeStampTZOb.IsEqual value, format

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

比較するVariant型の文字列、日付またはOraTimeStampTZ。

[in] [オプション] format

valueがString型の場合に、valueの解析に使用されるTIMESTAMP WITH TIME ZONEの書式文字列を指定します。formatが指定されていない場合は、valueの解析に現行のOraTimeStampTZオブジェクトのFormatプロパティが使用されます。

備考

ブール値を戻します(OraTimeStampTZオブジェクトが引数と等しい場合はTRUE、それ以外の場合はFALSEを戻します)。IsEqualメソッドは、OraTimeStampTZオブジェクトに格納されている協定世界時(UTC)の日時値のみを比較し、タイムゾーン情報は無視されます。

注意:
UTCは以前グリニッジ標準時と呼ばれていました。

valueがString型の場合、文字列の書式は、format引数で指定した書式と一致する必要があります。formatを指定しない場合、文字列の書式は、現行セッションのOraTimeStampTZオブジェクトのFormatプロパティと一致する必要があります。

valueがDate型の場合、Dateの日時値は、セッションのタイムゾーンの日時値として解析されます。

IsGreater(OraIntervalDS)メソッド

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトが引数より大きいかどうかをチェックします。

使用方法

isGreater = OraIntervalDSObj.IsGreater value

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

比較するVariant型の文字列、数値またはOraIntervalDSオブジェクト。

備考

ブール値を戻します。OraIntervalDSオブジェクトが引数より大きい場合はTRUE、それ以外の場合はFALSEを戻します。

valueがVariant型の文字列の場合は、Day [+/-] HH:MI:SSxFFの書式で記述する必要があります。

valueが数値の場合、提供される値は、構成されたOraIntervalDSオブジェクトが表す合計日数を表す必要があります。

IsGreater(OraIntervalYM)メソッド

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalYMオブジェクトが引数より大きいかどうかをチェックします。

使用方法

isGreater = OraIntervalYMObj.IsGreater value

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

比較するVariant型の文字列、数値またはOraIntervalYMオブジェクト。

備考

ブール値を戻します。OraIntervalYMオブジェクトが引数より大きい場合はTRUE、それ以外の場合はFALSEを戻します。

valueがVariant型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。

valueが数値の場合、提供される値は、構成されたOraIntervalYMオブジェクトが表す合計年数を表す必要があります。

IsGreater(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトが引数の値より大きいかどうかをチェックします。

使用方法

bool  = OraNumber.IsGreater value

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

Variant型の文字列、OraNumberオブジェクトまたは数値。

備考

ブール値を戻します。OraNumberオブジェクトが引数より大きい場合はTRUE、それ以外の場合はFALSEを戻します。

IsGreater(OraTimeStamp)メソッド

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトが引数より大きいかどうかをチェックします。

使用方法

isGreater = OraTimeStampObj.IsGreater value format

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

比較するVariant型の文字列、日付またはOraTimeStamp。

[in] [オプション] format

valueがString型の場合に、値の解析に使用されるTIMESTAMPの書式文字列を指定します。formatが指定されていない場合は、値の解析に現行のOraTimeStampオブジェクトのFormatプロパティが使用されます。

備考

ブール値を戻します(OraTimeStampオブジェクトが引数より大きい場合はTRUE、それ以外の場合はFALSEを戻します)。IsGreaterメソッドは、OraTimeStampオブジェクトに格納されているすべての日時値を比較します。

valueがString型の場合、文字列の書式は、format引数で指定した書式と一致する必要があります。formatを指定しない場合、文字列の書式は、現行のOraTimeStampオブジェクトのFormatプロパティと一致する必要があります。

IsGreater(OraTimeStampTZ)メソッド

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトが引数より大きいかどうかをチェックします。

使用方法

isGreater = OraTimeStampTZObj.IsGreater value, format

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

比較するVariant型の文字列、日付またはOraTimeStampTZオブジェクト。

[in] [オプション] format

valueがString型の場合に、値の解析に使用されるTIMESTAMP WITH TIME ZONEの書式文字列を指定します。formatが指定されていない場合は、valueの解析に現行のOraTimeStampTZオブジェクトのFormatプロパティが使用されます。

備考

ブール値を戻します(OraTimeStampTZオブジェクトが引数より大きい場合はTRUE、それ以外の場合はFALSEを戻します)。IsGreaterメソッドは、OraTimeStampTZオブジェクトに格納されているUTCの日時値のみを比較し、タイムゾーン情報は無視されます。

valueがString型の場合、文字列の書式は、format引数で指定した書式と一致する必要があります。formatを指定しない場合、文字列の書式は、現行のOraTimeStampTZオブジェクトのFormatプロパティと一致する必要があります。

valueがDate型の場合、Dateの日時値は、セッションのタイムゾーンの日時値として解析されます。

IsLess(OraIntervalDS)メソッド

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトが引数より小さいかどうかをチェックします。

使用方法

isLess = OraIntervalDSObj.IsLess value

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

比較するVariant型の文字列、数値またはOraIntervalDSオブジェクト。

備考

ブール値を戻します。OraIntervalDSオブジェクトが引数より小さい場合はTRUE、それ以外の場合はFALSEを戻します。

valueがVariant型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。

valueが数値の場合、提供される値は、構成されたOraIntervalDSオブジェクトが表す合計日数を表す必要があります。

IsLess(OraIntervalYM)メソッド

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalYM objectオブジェクトが引数より小さいかどうかをチェックします。

使用方法

isLess  = OraIntervalYMObj.IsLess value

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

比較するVariant型の文字列、数値またはOraIntervalYMオブジェクト。

備考

ブール値を戻します。OraIntervalYMオブジェクトが引数より小さい場合はTRUE、それ以外の場合はFALSEを戻します。

valueがVariant型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。

valueが数値の場合、提供される値は、構成されたOraIntervalYMオブジェクトが表す合計年数を表す必要があります。

IsLess(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトが引数の値より小さいかどうかをチェックします。

使用方法

bool  = OraNumber.IsLess value

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

Variant型の文字列、OraNumberオブジェクトまたは数値。

備考

ブール値を戻します。OraNumberオブジェクトが引数より小さい場合はTRUE、それ以外の場合はFALSEを戻します。

IsLess(OraTimeStamp)メソッド

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトが引数より小さいかどうかをチェックします。

使用方法

isLessr = OraTimeStampObj.IsLess value format

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

Variant型の文字列、日付またはOraTimeStamp。

[in] [オプション] format

値がString型の場合に、値の解析に使用されるTIMESTAMPの書式文字列を指定します。formatが指定されていない場合は、値の解析に現行のOraTimeStampオブジェクトのFormatプロパティが使用されます。

備考

ブール値を戻します(OraTimeStampが引数より小さい場合はTRUE、それ以外の場合はFALSEを戻します)。IsLessメソッドは、OraTimeStampオブジェクトに格納されているすべての日時値を比較します。

valueがString型の場合、文字列の書式は、format引数で指定した書式と一致する必要があります。formatを指定しない場合、文字列の書式は、現行のOraTimeStampオブジェクトのFormatプロパティと一致する必要があります。

IsLess(OraTimeStampTZ)メソッド

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeSTampTZオブジェクトが引数より小さいかどうかをチェックします。

使用方法

isLess = OraTimeStampTZObj.IsLess value, format

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

Variant型の文字列、日付またはOraTimeStampTZ。

[[in] [オプション] format

valueがString型の場合に、値の解析に使用されるTIMESTAMP WITH TIME ZONEの書式文字列を指定します。formatが指定されていない場合は、valueの解析に現行のOraTimeStampTZオブジェクトのFormatプロパティが使用されます。

備考

ブール値を戻します(OraTimeStampTZオブジェクトが引数より小さい場合はTRUE、それ以外の場合はFALSEを戻します)。IsLessは、OraTimeStampTZオブジェクトに格納されているUTCの日時値のみを比較し、タイムゾーン情報は無視されます。

valueがString型の場合、文字列の書式は、format引数で指定した書式と一致する必要があります。formatを指定しない場合、文字列の書式は、現行のOraTimeStampTZオブジェクトのFormatプロパティと一致する必要があります。

valueがDate型の場合、Dateの日時値は、セッションのタイムゾーンの日時値として解析されます。

IterNextメソッド

適用対象

OraCollectionオブジェクト

説明

イテレータがコレクション内の次の要素を指すように移動します。

使用方法

OraCollection.IterNext

備考

イテレータを使用してコレクション要素にアクセスする方が、索引を使用するより高速です。

この機能を実行する前にイテレータがコレクションの最後の要素を指している場合、このメソッドをコールすると、EOCプロパティにTRUEを戻します。また、イテレータは変更されません。このメソッドを繰り返しコールするときは、EOCプロパティをチェックしてください。

IterNextメソッドは、InitIteratorメソッドの後にコールしてください。そうしないと、コレクションの最初の要素が余分に繰り返されます。

例

「例: OraCollectionイテレータ」を参照してください。

関連項目:

- IterPrevメソッド

- InitIteratorメソッド

IterPrevメソッド

適用対象

OraCollectionオブジェクト

説明

イテレータがコレクション内の前の要素を指すように移動します。

使用方法

OraCollection.IterPrev

備考

イテレータを使用してコレクション要素にアクセスする方が、索引を使用するより高速です。

この機能を実行する前にイテレータがコレクションの最初の要素を指している場合、このメソッドをコールするとBOCプロパティにTRUEを戻します。また、イテレータは変更されません。このメソッドを繰り返しコールするときは、BOCプロパティをチェックしてください。

例

「例: OraCollectionイテレータ」を参照してください。

関連項目:

- IterNextメソッド

- InitIteratorメソッド

LastServerErrResetメソッド

適用対象

OraDatabaseオブジェクト

OraSessionオブジェクト

説明

指定されたオブジェクトのLastServerErrプロパティを値0(ゼロ)に消去し、LastServerErrTextプロパティをNULLに設定します。

使用方法

oradatabase.LastServerErrResetorasession.LastServerErrReset

備考

このメソッドを使用すると、ユーザー・プログラムでは、Oracleエラーが生成されたプログラム要求の判別が容易になります。

関連項目:

- OraDatabaseオブジェクト

- OraSessionオブジェクト

- LastServerErrプロパティ

- LastServerErrTextプロパティ

Ln(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトの自然対数(eを底とする)を計算します。

使用方法

OraNumber.Ln

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

このメソッドでは、OraNumberオブジェクトが0(ゼロ)以下である場合、エラーが発生します。

Log(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトを底として使用し、operandの対数を計算します。

使用方法

OraNumber.Log operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

Variant型の文字列、OraNumberまたは数値。

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

このメソッドでは、OraNumberオブジェクトまたはoperandが0(ゼロ)以下である場合、エラーが発生します。

MatchPos(OraLOB/BFILE)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

OraBFILEオブジェクト

説明

パターンのオフセット位置からn番目のオカレンス位置を戻します。

使用方法

position = OraBlob.MatchPos pattern, offset, nth
position = OraClob.MatchPos pattern, offset, nth
position = OraBFile.MatchPos pattern, offset, nth

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] pattern

LOB内で検索する文字列(CLOB)、またはバイト配列(BLOBまたはBFILE)。

[in] Offset

LOBまたはBFILEで検索を開始する位置。

[in] nth

オカレンス番号。

備考

このコールは現在、DBMS_LOB.INSTR()を使用するPL/SQLブロックを実行することによって実装されています。

Mod(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトをoperandで除算した剰余を取得します。

使用方法

OraNumber.Mod operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

Variant型の文字列、OraNumberまたは数値。

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

operandが0(ゼロ)の場合、エラーが発生します。

MonitorForFailoverメソッド

適用対象

OraDatabaseオブジェクト

説明

アプリケーションのフェイルオーバー通知ハンドラを登録します。

使用方法

OraDatabase.MonitorForFailover FOSink, FOCtx

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] FOSink

フェイルオーバー時に通知されるOnFailoverメソッドを実装するIDispatchインタフェース。

[in] FOCtx

フェイルオーバー時にアプリケーションがOnFailoverメソッドに渡す必要があるコンテキスト固有の情報。

備考

フェイルオーバー通知を受信するには、通知ハンドラがMonitorForFailoverメソッドに登録されている必要があります。通知ハンドラは、OnFailoverメソッドを実装するオートメーション・オブジェクト(Visual Basicのクラス・モジュール)であることが必要です。

このメソッドの構文は、次のとおりです。

Public Function OnFailover(Ctx As Variant, fo_type As Variant,fo_event as Variant, fo_OraDB as Variant)

変数

説明

[in] Ctx

アプリケーションによってMonitorForFailoverメソッドに渡されます。フェイルオーバー時にアプリケーションが渡す必要があるコンテキスト依存の情報です。

[in] fo_type

Failoverタイプ。クライアントが要求したフェイルオーバーのタイプです。次の値を指定できます。

- OO4O_FO_SESSION。要求されたセッションのフェイルオーバーのみを示します。

- OO4O_FO_SELECT。要求された選択フェイルオーバーとセッション・フェイルオーバーを示します。

[in]
fo_event

Failoverイベント。これはフェイルオーバーの状態を示します。次の値をとることができます。

- OO4O_FO_BEGIN。フェイルオーバーで失われた接続が検出され、フェイルオーバーが開始していることを示します。

- OO4O_FO_END。フェイルオーバーが正常に完了したことを示します。

- OO4O_FO_ABORT。フェイルオーバーが失敗し、再試行しないことを示します。

- OO4O_FO_ERROR- フェイルオーバーが失敗したことを示しますが、アプリケーションでエラーを処理してフェイルオーバーを再試行する機会が与えられます。OnFailoverメソッドがOO4O_FO_RETRYを戻すようにプログラミングすることで、アプリケーションはフェイルオーバーを再試行できます。

- OO4O_FO_REAUTH- ユーザー・ハンドルが再認証されたことを示します。これは、シングル・データベース接続でクライアントに複数のユーザー・セッションがある状況に適用されます。初期フェイルオーバー時に、有効なユーザー・セッションのみがフェイルオーバーされます。アプリケーションでその他のセッションを使用するときにそれらのセッションはフェイルオーバーされます。これが、連続フェイルオーバー時にコールバックに渡される値です。

[in] fo_OraDB

フェイルオーバー中のユーザー・セッションのOraDatabaseオブジェクト。fo_event変数がOO4O_FO_REAUTHの場合のみ有効です。

例

フェイルオーバー通知の例

「例: フェイルオーバー通知」を参照してください。

関連項目:
アプリケーション・フェイルオーバー通知

MonitorStart(OraAQ)メソッド

適用対象

OraAQオブジェクト

説明

指定されたメッセージをデキューするモニター・スレッドを開始します。

使用方法

Q.MonitorStart NotificationHandler, CallbackCtx, MsgFilterVal,MsgFilter

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] NotificationHandler

新規メッセージの通知が必要なコールバック・メソッド(NotifyMe)を含むIDispatchインタフェース。

[in] CallbackCtx

アプリケーションがNotifyMeメソッドに渡す必要があるコンテキスト固有の情報。この情報は、ユーザー基準を満たす新しいメッセージがデキューされるたびに、NotifyMeメソッドに渡されます。

[in] [オプション] MsgFilterVal

メッセージ・フィルタの値を含むバイト配列。MsgFilterがORAAQ_ANYの場合は無視されます。

[in] [オプション] MsgFilter

メッセージの選択基準を指定する整数の定数。MsgFilterに指定できる値は、次のとおりです。

- ORAAQ_ANY = 0 - キューに到着したすべてのメッセージに対してコールバックを起動します。これがデフォルト値になります。

- ORAAQ_CONSUMER = 1 - MsgFilterValueに指定されたコンシューマ向けのメッセージがデキューされたときにコールバックを起動します。

- ORAAQ_MSGID = 2 - MsgFilterValに指定された識別子を含むメッセージがデキューされたときにコールバックを起動します。

備考

NotifyMeは通知オブジェクトのコールバック・メソッドです。このメソッドの構文は、次のとおりです。

Public Sub NotifyMe (ByVal Ctx As Variant, ByVal Msgid As Variant)

変数

説明

[in] Ctx

アプリケーションによってMonitorStartメソッドに渡される値。メッセージのデキュー時にアプリケーションが渡す必要があるコンテキスト依存の情報です。

[in] Msgid

新しくデキューされたメッセージのメッセージID。監視中にエラーが発生した場合、Msgid変数はNULLになります。

デフォルトでは、メッセージはRemoveモードでNotifyMeに渡されます。デフォルトのデキュー・オプションは、このインスタンス(OraAQ)のプロパティを設定することによって上書きできます。

MonitorStartメソッドはORAAQ_SUCCESSまたはORAAQ_FAILを戻します。

関連項目:
メッセージの監視

MonitorStop(OraAQ)メソッド

適用対象

OraAQオブジェクト

説明

以前に開始したモニター・スレッドを停止します。

使用方法

Q.MonitorStop

備考

モニターが実行されていない場合は、何も実行しません。

関連項目:
メッセージの監視

MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

適用対象

OraDynasetオブジェクト

説明

指定されたダイナセット内の最初、最後、次または前の行にカーソル位置を変更します。これらの移動メソッドは、削除された行をスキップして、有効な次の行や前の行などにカーソルを移動します。

使用方法

oradynaset.MoveFirst
oradynaset.DbMoveFirst

oradynaset.MoveLast
oradynaset.DbMoveLast

oradynaset.MovePrevious
oradynaset.DbMovePrevious

oradynaset.MoveNext
oradynaset.DbMoveNext

備考

データ・コントロール・ボタンは(左から右または上から下へ)MoveFirst、MovePrevious、MoveNextおよびMoveLastの各メソッドにマップされます。データ・コントロール・ボタンの使用時は、BOFおよびEOFプロパティはTRUEになりません。

最初または最後のレコードがカレント・レコードの場合は、MoveFirstメソッドまたはMoveLastメソッドを使用してもレコードは移動しません。ダイナセットに対してMoveLastメソッドを使用すると、問合せが強制終了します。

MovePreviousメソッドの使用時、最初のレコードがカレント・レコードの場合は、カレント・レコードは存在せず、BOFがTRUEになります。MovePreviousメソッドをもう一度使用すると、BOFはTRUEのままですが、エラーが発生します。MoveNextメソッドの使用時、最後のレコードがカレント・レコードの場合は、カレント・レコードは存在せず、EOFがTRUEになります。MoveNextメソッドをもう一度使用すると、EOFはTRUEのままですが、エラーが発生します。ORADYN_NO_MOVEFIRSTオプションを使用してダイナセットが作成された場合、ダイナセットが空かどうかに関係なく、BOFおよびEOFはTRUEになることに注意してください。

ダイナセットのオープン時、BOFはFALSEで、最初のレコードがカレント・レコードです。ダイナセットが空の場合、BOFおよびEOFは両方ともTRUEで、カレント・レコードは存在しません。

EditまたはAddNew操作が保留中のときに、データ・コントロールを介してMoveメソッドのいずれかを間接的に使用すると、Updateメソッドが自動的にコールされます。ただし、このメソッドはValidateイベント中に停止できます。

EditまたはAddNew操作が保留中のときに、データ・コントロールを介さずにMoveメソッドのいずれかを直接使用すると、保留中のEditまたはAddNew操作によって、既存の変更内容が失われます。ただし、エラーは発生しません。

データはデータベースから必要に応じてフェッチされるため、MoveFirst操作、MoveNext操作の順に実行すると、追加データの先読みを必要とすることなく、ミラー化(キャッシュ)されたローカル・セットが増分作成されます。ただし、MoveLast操作を実行するには、問合せ全体が評価されてローカルに格納される必要があります。

ダイナセットがデータ・コントロールに付加されている場合、これらのメソッドは、まずデータ・コントロールのValidateイベントに、レコードの移動が行われることを通知します。Validateハンドラは移動要求を拒否でき、その場合、要求は無視されます。レコード・ポインタが正常に移動されると、データ・コントロールに付加されているすべてのカスタム・コントロールに、新しいレコード位置が自動的に通知されます。

例

この例では、MoveFirst、MoveNext、MoveLastおよびMovePreviousの各メソッドを使用してダイナセット内のレコードを移動する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select empno, ename from emp", 0&)

MsgBox "Employee #" & OraDynaset.Fields("empno").value & ", " & _
OraDynaset.Fields("ename").value

'Move to the next record and display it.
OraDynaset.MoveNext
MsgBox "Employee #" & OraDynaset.Fields("empno").value & ", " & _
OraDynaset.Fields("ename").value

'Move to the last record and display it.
OraDynaset.MoveLast
MsgBox "Employee #" & OraDynaset.Fields("empno").value & ", " & _
OraDynaset.Fields("ename").value

'Move to the previous record and display it.
OraDynaset.MovePrevious
MsgBox "Employee #" & OraDynaset.Fields("empno").value & ", " & _
OraDynaset.Fields("ename").value

End Sub

関連項目:

- AddNewメソッド

- BOFプロパティ

- EOFプロパティ

- Editメソッド

- EditModeプロパティ

- RecordCountプロパティ

- Updateメソッド

- Validateイベント

MovePreviousn、MoveNextn、MoveRelおよびMoveToメソッド

適用対象

OraDynasetオブジェクト

説明

指定されたダイナセット内の指定された行にカーソル位置を変更します。

使用方法

oradynaset.MovePreviousn offset
oradynaset.MoveNextn offset
oradynaset.MoveRel offset
oradynaset.MoveTo offset

MoveNextnメソッド

オフセットのレコード分、次に進みます。

MovePreviousnメソッド

オフセットのレコード分、前に戻ります。

MoveRelメソッド

現行の行を基準にしてオフセットのレコード分、移動します。正の値(プラス(+)記号で表される)はカーソルを表の下方向に移動し、負の値はカーソルを表の上方向に移動します。

MoveToメソッド

行番号オフセットに直接移動します。

備考

カーソルがMoveNextn、MoveRelまたはMoveToメソッドを使用してダイナセットの最後を超えて移動すると、EOFが設定されます。カーソルがMovePreviousn、MoveRelまたはMoveToメソッドを使用してダイナセットの最初を超えて移動すると、BOFが設定されます。MoveNextn、MovePreviousnおよびMoveToメソッドは正の整数のみオフセットとして受け入れます。MoveRelメソッドは、正と負の両方の整数をオフセットとして受け入れます。

MoveTo rownumは、その行が削除されないかぎり、常に同じ行を取得します。要求された行が削除されていた場合、MoveToメソッドは、有効な次の行に移動します。MoveNextn、MovePreviousn、MoveRelおよびMoveToメソッドでは、削除された行は考慮されないため、行番号の相対的な位置に基づいてこれらのメソッドを使用する場合は注意してください。

データ型

Long Integer

例

この例では、MovePreviousn、MoveNextn、MoveRelおよびMoveToメソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Private Sub Form_Load()
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim OraFields As OraFields

Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "SCOTT/TIGER", 0&)
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp where empno" & _
">=7654 and empno <= 7844 ", ORADYN_NO LANKSTRIP)
Set OraFields = OraDynaset.Fields

'Move to 3rd record from the first record
OraDynaset.MoveNextn 3  'Should set EOF to true
MsgBox OraFields("ename").Value  ' Should be display SCOTT

If OraDynaset.EOF = True Then
MsgBox "End of the record reached"
End If

'Move back from the current record by the offset 2
OraDynaset.MovePreviousn 2
MsgBox OraFields("ename").Value  ' Should be display BLAKE

If OraDynaset.BOF = True Then
MsgBox "Start of the record reached"
End If

'Move relative in the forward direction
OraDynaset.MoveRel 2
MsgBox OraFields("ename").Value  ' Should be display SCOTT

If OraDynaset.EOF = True Then
MsgBox "End of the record reached"
End If

'Move relative in the backward direction
OraDynaset.MoveRel -2
MsgBox OraFields("ename").Value  ' Should be display BLAKE

If OraDynaset.BOF = True Then
MsgBox "Start of the record reached"
End If

'Move to the record position 4 in the current dynaset
OraDynaset.MoveTo 4
MsgBox OraFields("ename").Value  ' Should be display SCOTT

End Sub

Mul(OraIntervalDS)メソッド

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトに乗数を乗算します。

使用方法

OraIntervalDSObj.Mul multiplier

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] multiplier

乗数として使用するVariant型の数値またはOraNumberオブジェクト。

備考

この操作の結果は、OraIntervalDSオブジェクトに格納され、以前の値は上書きされます。戻り値はありません。

Mul(OraIntervalYM)メソッド

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalYMオブジェクトに乗数を乗算します。

使用方法

OraIntervalYMObj.Mul multiplier

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] multiplier

乗数として使用するVariant型の数値またはOraNumberオブジェクト。

備考

この操作の結果は、OraIntervalYMオブジェクトに格納され、以前の値は上書きされます。戻り値はありません。

Mul(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトにoperandを乗算します。

使用方法

OraNumber.Mul operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

Variant型の文字列、OraNumberまたは数値。

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

Neg(OraIntervalDS)メソッド

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトを否定します。

使用方法

OraIntervalDSObj.Neg

備考

この操作の結果は、OraIntervalDSオブジェクトに格納され、以前の値は上書きされます。戻り値はありません。

Neg(OraIntervalYM)メソッド

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalYMオブジェクトを否定します。

使用方法

OraIntervalYMObj.Neg

備考

この操作の結果は、OraIntervalYMオブジェクトに格納され、以前の値は上書きされます。戻り値はありません。

Neg(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトを否定します。

使用方法

OraNumber.Neg

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

Open(OraServer)メソッド

適用対象

OraDatabaseオブジェクト

OraServerオブジェクト

説明

Oracleデータベースへの接続を確立します。

使用方法

OraServer.Open serverAlias

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] serverAlias

データベースへの接続に使用するネットワーク別名を含む文字列。

備考

引数を指定しないと、前回接続を解除したデータベースに接続します。

関連項目:

- BeginTransメソッド

- Closeメソッド

- CommitTransメソッド

- CreateAQメソッド

- CreateCustomDynasetメソッド

- CreateTempBLOB/CLOBメソッド

- CreateDynasetメソッド

- CreateOraObject(OraDatabase)メソッド

- Describeメソッド

- ExecuteSQLメソッド

- FetchOraRefメソッド

- LastServerErrResetメソッド

- MonitorForFailoverメソッド

- RemoveFromPoolメソッド

Open(OraBFILE)メソッド

適用対象

OraBFILEオブジェクト

説明

BFILEをオープンします。

使用方法

OraBfile.Open

備考

このメソッドは、BFILE値にアクセスする前にコールしてください。

OpenDatabaseメソッド

適用対象

OraSessionオブジェクト

OraServerオブジェクト

説明

データベースへのユーザー・セッションを確立します。これは、所定のデータベース名、接続文字列および指定したオプションを使用して、新しいOraDatabaseオブジェクトを作成します。

使用方法

Set oradatabase = orasession.OpenDatabase(database_name,connect_string, options) Set oradatabase = oraserver.OpenDatabase(connect_string, options)

引数

このメソッドの引数は、次のとおりです。

引数

説明

database_name

データ・コントロールをデータベースに接続するときに使用するOracleネットワーク指定子。

connect_string

Oracleデータベースに接続するときに使用するユーザー名とパスワード。

options

データベースのオプション・モードの設定に使用するビット・フラグ文字。options = 0の場合は、デフォルトのモード設定が適用されます。次の表に、それぞれの値を追加することで組み合せることができる、使用可能なモードを示します。

定数

次の表に、オプション・フラグの定数とその値を示します。

定数

値

説明

ORADB_DEFAULT

&H0&

Visual Basicモード(デフォルト):
AddNewまたはEditメソッドの使用時に、明示的に設定されていないフィールド(列)の値はNULLに設定されます。NULL値は、データベースの列値のデフォルトを上書きします。Edit("SELECT...FOR UPDATE")の使用時に、行のロック解除を待機します。

SQLの非ブロック機能は、使用できなくなります。

ORADB_ORAMODE

&H1&

Oracleモード:
AddNewメソッドの使用時に、Oracleデータベースにより、デフォルトのフィールド(列)値が設定されます。挿入または追加操作の後、Oracleのデフォルトの列値はただちにデータベースから再度フェッチされます。

注意: トリガーを使用する場合は、完全なOracleモードを使用してデータを再度フェッチしてください。

ORADB_NOWAIT

&H2&

ロック非待機モード:
行のロック解除を待機しません。Editメソッドを使用して他のユーザーまたはプロセスがロックしている行を更新すると、ロック非待機モードでは、ただちにエラー・コードが戻されます。

注意: このオプションは、OraDynasetオブジェクトにのみ適用されます。これは、OraSQLStmtオブジェクトまたはExecuteSQLコールには影響しません。行がロックされている場合、これによってエラーが発生するのみです。

ORADB_NO_REFETCH

&H4&

Oracleモード(再フェッチなし):
Oracleモードと同様に実行されますが、データはローカル・キャッシュに再フェッチされません。これによってパフォーマンスが向上します。

注意: データベースの列のデフォルトのために、データベースのデータとローカル・キャッシュが不一致になるため、行を編集せずに挿入する場合にのみ、再フェッチなしモードを使用してください。このモードで挿入した後に編集しようとすると、「データは変更されています。」(4119)エラーが発生します。

ORADB_NONBLK

&H8&

非ブロックモード:
SQL文の実行時は、非ブロック・モードをオンにします。非ブロック・モードは、ExecuteSQL、CreateDynasetまたはCreateSQLメソッドを使用して処理するSQL文に影響を与えます。

注意: この機能は使用不可になっています。

ORADB_ENLIST_IN_MTS

&H10&

MTSモードでのリスト:
OraDatabaseオブジェクトをMicrosoft Transaction Server(MTS)モードでリストするかどうかを判断します。

ORADB_ENLIST_FOR_ CALLLBACK

&H20&

コールバック・モードでのリスト:
イベント通知をオンにします。フェイルオーバー通知を受信するには、このモードを使用可能にする必要があります。

これらの値は、oraconst.txtファイルにあります。有効なデータベース別名の作成方法については、『Oracle Net Services管理者ガイド』を参照してください。

有効なconnect_string引数の例は次のとおりです。

- "scott/tiger"

- "system/manager"

- "/"

備考

OraConnectionオブジェクトは自動的に作成され、セッションのOraConnectionsコレクション内に表示されます。データベースのオープンは、接続のオープンに影響を与えますが、SQL処理は実行しません。

次の接続エラーが戻される可能性があります。

ORA-28001 "the password has expired"

ChangePasswordメソッドを使用すると、パスワードを変更できます。

例

この例では、ダイナセットおよび基礎となるすべてのオブジェクトをプログラムで作成する方法を示します。このコードをコピーして、txtEmpNoおよびtxtENameという名前のテキスト・ボックスのあるフォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select empno, ename from emp", 0&)

'Display the first record.
txtEmpNo = OraDynaset.Fields("empno").value
txtEName = OraDynaset.Fields("ename").value

End Sub

関連項目:

- Microsoft Transaction Serverのサポート

- ChangePassword(OraServer)メソッド

- アプリケーション・フェイルオーバー通知

- AddNewメソッド

- Editメソッド

- ExecuteSQLメソッド

- ChangePassword(OraSession)メソッド

- OraConnectionオブジェクト

- OraConnectionsコレクション

OriginalItemメソッド

適用対象

OraFieldsコレクション

説明

ダイナセットのSELECT文で使用された元の列名に基づいてOraFieldオブジェクトを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

set OraField = OraFields.OriginalItem(field_index)
set OraField = OraFields.OriginalItem(original_name)

引数

このメソッドの引数は、次のとおりです。

引数

説明

field_index

元の列名のフィールド索引。

original_name

SQL文に指定した元のフィールド名。

備考

このプロパティは、SQL文に'schema.table.col'のフィールド名が含まれている場合に、その元の名前に固有のフィールド・オブジェクトを取得するときに便利です。

例

次の例では、OriginalItemメソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim OraFields As OraFields

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

Set OraDynaset = OraDatabase.CreateDynaset("select scott.emp.deptno," & _
"dept.deptno from scott.emp, scott.dept where dept.deptno = emp.deptno", 0&)
'Get the Field collection object
Set OraFields = OraDynaset.Fields

'get the original field object. Returns "scott.emp.deptno"

MsgBox OraField.OriginalName

Set OraField = OraFields.OriginalItem(1)

'Returns "dept.deptno"
MsgBox OraField.OriginalName

End Sub

OriginalName

適用対象

OraFieldオブジェクト

説明

(Nameプロパティによって戻されてサーバーに表示されるフィールド名ではなく)ダイナセットのSELECT文で使用された元の列名を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

field_name = Orafield.OriginalName

備考

orafield.OriginalNameメソッドは、指定したOraFieldオブジェクトの名前を戻します。このメソッドにより、ダイナセットの作成時にSQL文に指定された元の列名が戻されます。このプロパティは、SQL文に、フィールドのNameとして'schema.table.col'が含まれている場合に便利です。これにより、重複した列名を参照できるようになります。これにより、重複した列名を参照できるようになります (SQL文で別名を使用することによって、列名の重複を回避する方法もあります)。

例

次の例では、OriginalNameプロパティの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim OraFields As OraFields

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

Set OraDynaset = OraDatabase.CreateDynaset("select scott.emp.deptno," & _
"dept.deptno from scott.emp, scott.dept where dept.deptno = emp.deptno", 0&)

Set OraFields = OraDynaset.Fields

'Returns "DEPTNO"
MsgBox OraFields(0).Name

'Returns "scott.emp.deptno"
MsgBox OraFields(0).OriginalName

'Returns "dept.deptno"
MsgBox OraFields(1).OriginalName

End Sub

Power(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトをオペランド乗します。

使用方法

OraNumber.Power operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

Variant型の文字列、OraNumberまたは数値。

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

Put_Valueメソッド

適用対象

OraParamArrayオブジェクト

説明

表のパラメータに値を挿入します。

使用方法

OraParamArray.Put_Value(value, index)

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] value

挿入する値を表すVariant。

[in] index

オブジェクトの索引値を表す整数。

備考

表の行にアクセスする前に値を挿入するには、このメソッドを使用してください。行に値を割り当てるまで、行には有効な値が含まれません。表内の未割当ての行を参照すると、OLEオートメーション・エラーが発生します。

value引数には、OraBLOBなどのOracle Database 10gオブジェクトを使用できます。Put_Valueでは、その時点でオブジェクトのコピーが作成されるので、そのインデックス値を参照する新規オブジェクトを取得するためにGet_Valueにアクセスする必要があります。たとえば、iotypeがORATYPE_BOTHで、ダイナセットから取得したOraBLOBが入力値として渡される場合、新たに更新されたParamaterArrayの出力値を取得するためには、SQLが実行された後にGet_Valueをコールする必要があります。

ダイナセットと同様に、ParamaterArrayのGet_Valueメソッドから取得したオブジェクトは、常に、そのParamaterArrayの索引について最新の値を参照します。Visual BasicのNULL値を値として渡すこともできます。Visual Basicの値EMPTYは、BLOBおよびCLOBに対しては空のLOBを意味する目的で、OBJECT、VARRAYおよびNESTED TABLEに対しては、オブジェクトの属性がすべてNULLであることを意味する目的で使用できます。

RAW型の列(ServerTypeがORATYPE_RAW_BIN)にバインドする場合、値はバイト配列である必要があります。

Read(OraLOB/BFILE)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

OraBFILEオブジェクト

説明

BLOB、CLOBまたはBFILE値の指定部分をバッファに読み込みます。読込みデータ長の合計数を戻します。

使用方法

amount_read = OraBlob.Read buffer, chunksize
amount_read = OraClob.Read buffer, chunksize
amount_read = OraBfile.Read buffer, chunksize

引数

このメソッドの引数は、次のとおりです。

引数

説明

[out] buffer

OraCLOBの場合はVariant型の文字配列、OraBLOBまたはピースの読込み元のOraBFILEの場合はVariant型のバイト配列。

[in] [オプション] chunksize

読取り量を指定するためのInteger。デフォルト値は、LOBのサイズです。OraBLOBまたはOraBFILEの場合はバイト数、OraCLOBの場合は文字数を示します。

[out] amount_read

読込みデータ長の合計数を表すInteger。OraBLOBまたはOraBFILEの場合はバイト数、OraCLOBの場合は文字数を示します。

備考

Offsetプロパティで指定されたオフセットからLOBデータまたはBFILEデータを読み込みます。複数ピースの読込み操作の場合は、PollingAmountプロパティを読込みデータ長の合計数の値に設定し、Statusプロパティをチェックして各ピースの操作が正常に実行されたことを確認する必要があります。

注意:
LOBの一部を読み込む場合は、chunksizeパラメータを使用せず、PollingAmountプロパティを設定することをお薦めします。これによって、LOB全体が読み込まれる前に別のLOBメソッドが実行された場合に発生するエラーを回避できます。

例

「LOBデータ型の例で使用されているスキーマ・オブジェクト」の説明に従ってOraLOBスキーマ・オブジェクトをインストールしていることを確認してください。

例: LOBの複数ピース読取り

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim PartImage As OraBlob
Dim chunksize As Long
Dim AmountRead As Long
Dim buffer As Variant
Dim buf As String

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb","scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from part", 0&)

'Get OraBlob from OraDynaset
Set PartImage = OraDynaset.Fields("part_image").Value

'Set Offset and PollingAmount property for piecewise Read operation
PartImage.offset = 1
PartImage.PollingAmount = PartImage.Size
chunksize = 50000

'Get a free file number
FNum = FreeFile

'Open the file
Open "image.dat" For Binary As #FNum

'Do the first read on PartImage, buffer must be a variant
AmountRead = PartImage.Read(buffer, chunksize)

'put will not allow Variant type
buf = buffer
Put #FNum, , buf

' Check for the Status property for polling read operation
While PartImage.Status = ORALOB_NEED_DATA
AmountRead = PartImage.Read(buffer, chunksize)
buf = buffer
Put #FNum, , buf
Wend

Close FNum

例: LOBの単一ピース読取り

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim PartDesc As OraClob
Dim AmountRead As Long
Dim buffer As Variant
Dim buf As String

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Add PartDesc as an Output parameter and set its initial value.
OraDatabase.Parameters.Add "PartDesc", Null, ORAPARM_OUTPUT
OraDatabase.Parameters("PartDesc").ServerType = ORATYPE_CLOB

'Execute the statement returning 'PartDesc'
OraDatabase.ExecuteSQL ("BEGIN select part_desc into :PARTDESC from" & _
"part where part_id = 1 for update NOWAIT; END;")

'Get 'PartDesc' from Parameters collection
Set PartDesc = OraDatabase.Parameters("PartDesc").Value

'Get a free file number
FNum = FreeFile

'Open the file.

Open "Desc.Dat" For Binary As #FNum

'Read entire CLOB value, buffer must be a Variant
AmountRead = PartDesc.Read(buffer)

'put will not allow Variant type
buf = buffer
Put #FNum, , buf

Close FNum

関連項目:

- Offset(OraLOB/BFILE)プロパティ

- PollingAmountプロパティ

- Status(OraLOB/BFILE)プロパティ

ReadChunkメソッド

適用対象

OraFieldオブジェクト

説明

LONGまたはLONG RAW型のフィールドの全体または一部のバイト数を含む文字列を戻します。

使用方法

data_string = orafield.ReadChunk(offset, numbytes, bytesread)

引数

このメソッドの引数は、次のとおりです。

引数

説明

offset

データのコピー前にスキップするフィールド内のバイト数。

numbytes

コピーするバイト数。

bytesread

実際に読み込まれたバイト数。

備考

ReadChunkメソッドはGetChunkメソッドと同じように動作しますが、実際に読み込まれたバイト数をbytesread引数で戻します。

関連項目:

- LONG RAWからLOBまたはBFILEへの移行

- GetChunkメソッド

Refreshメソッド

適用対象

OraDynasetオブジェクト

OraSQLStmtオブジェクト

説明

現行のConnect、DatabaseNameおよびSQLプロパティについて、ダイナセットをただちに更新します。

SQL文オブジェクト内のSQL文を再実行することによって、ダイナセットをただちに更新します。

使用方法

oradynaset.Refresh
oradynaset.DbRefresh
orasqlstmt.Refresh
orasqlstmt.DbRefresh

備考

このメソッドは、すべての編集操作(EditおよびAddNewメソッド)を取り消して、SQL文バッファの現在の内容を実行し、結果のダイナセットの最初の行に移動します。Refreshメソッドの発行前に作成されたダイナセット・オブジェクト(ブックマーク、レコード・カウントおよびフィールド・コレクションなど)は無効とみなされます。以前のダイナセットに関連付けられているOraConnectionおよびOraSessionオブジェクトは変更されずにそのまま残ります。

このメソッドを使用してリフレッシュ操作を実行した方が、データ・コントロールによるリフレッシュより効率的です。また、このメソッドを使用すると、変更したSQL文を新しいダイナセットまたはOraSQLStmtオブジェクトを作成せずに実行できます。

必要なデータベース操作(SQLの解析やバインドなど)が最小限に抑えられるため、oradynaset.Refreshまたはorasqlstmt.Refreshは、パラメータ値の変更に役立つリフレッシュ・メソッドです。このメソッドは、パラメータの値のみを変更した場合にパフォーマンスを向上できます。

ダイナセットまたはSQL文オブジェクトのSQLプロパティに無効なSQL文を割り当てた後にRefreshメソッドをコールした場合、これらのオブジェクトは有効なままです。ただし、このような状態のダイナセットでは、行またはフィールドに対するあらゆる操作は許可されません。また、バインド済コントロールも、標準Visual Basicデータ・コントロールのRecordSourceが実行時に無効なSQL文に設定され、その後リフレッシュされた場合に見られるような不適切な動作をします。

有効なSQL文を使用してオブジェクトをリフレッシュすると、通常のダイナセットとSQL文の操作に戻ります。Refreshメソッドは、NULLまたは空のSQL文を無効とみなします。

例

Refreshメソッドの例(OraDynaset)

この例では、パラメータ、RefreshメソッドおよびSQLプロパティを使用して選択レコードを制限する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create a parameter with an initial value.
OraDatabase.Parameters.Add "job", "MANAGER", 1

'Create the OraDynaset Object.
Set OraDynaset =OraDatabase.CreateDynaset("select * from emp where job=:job",0&)

'Notice that the SQL statement is NOT modified.
MsgBox OraDynaset.SQL

'Currently, OraDynaset only contains employees whose job is MANAGER.
'Change the value of the job parameter.

OraDatabase.Parameters("job").Value = "SALESMAN"

'Refresh the dynaset.
OraDynaset.Refresh

'Currently, OraDynaset only contains employees whose job is SALESMAN.
'Notice that the SQL statement is NOT modified.
MsgBox OraDynaset.SQL

'Remove the parameter.
OraDatabase.Parameters.Remove ("job")

End Sub

Refreshメソッドの例(OraSQLStmt)

この例では、パラメータ、Refreshメソッド、およびオブジェクトのSQLプロパティの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraSqlStmt As OraSQLStmt

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

OraDatabase.Parameters.Add "EMPNO", 7369, 1
OraDatabase.Parameters("EMPNO").ServerType = 2  'ORATYPE_NUMBER
OraDatabase.Parameters.Add "ENAME", 0, 2
OraDatabase.Parameters("ENAME").ServerType = 1  'ORATYPE_VARCHAR2

Set OraSqlStmt = OraDatabase.CreateSQL("Begin Employee.GetEmpName (:EMPNO," & _
":ENAME); end;", 0&)

'Notice that the SQL statement is NOT modified.
MsgBox OraSqlStmt.SQL

'Should display SMITH
MsgBox OraDatabase.Parameters("ENAME").Value

'Change the value of the empno parameter.
OraDatabase.Parameters("EMPNO").Value = 7499

'Refresh the dynaset.
OraSqlStmt.Refresh

'Should display ALLEN
MsgBox OraDatabase.Parameters("ENAME").Value

'Notice that the SQL statement is NOT modified.
MsgBox OraSqlStmt.SQL

'Remove the parameter.
OraDatabase.Parameters.Remove ("job")

End Sub

関連項目:

- AddNewメソッド

- Connectプロパティ

- CreateDynasetメソッド

- DatabaseNameプロパティ

- Editメソッド

- OraConnectionオブジェクト

- OraDynasetオブジェクト

- OraSessionオブジェクト

- SQLプロパティ

- RecordSourceプロパティ

Refresh(OraRef)メソッド

適用対象

OraRefオブジェクト

説明

最新のデータベース・スナップショットから参照可能なオブジェクトをリフレッシュします。

使用方法

OraRef.Refresh

Registerメソッド

適用対象

OraSubscriptionオブジェクト

説明

サブスクリプションをアクティブにします。

使用方法

orasubscription.Register

備考

指定したデータベース・イベントが起動すると、このサブスクリプションの作成時に渡されたdbeventハンドラのNotifyDBeventsメソッドがコールされます。

例

詳細な例は、「例: データベース・イベントが通知されるようにアプリケーションを登録する方法」を参照してください。

関連項目:

- データベース・イベント

- OraSubscriptionオブジェクト

- OraSubscriptionsコレクション

Removeメソッド

適用対象

OraParametersコレクション

説明

OraParametersコレクションからパラメータを削除します。

使用方法

oraparameters.Remove(member_name)

引数

このメソッドの引数は、次のとおりです。

引数

説明

member_name

0からCount-1の範囲で整数の添字を指定するVariantまたはパラメータ名。

備考

不要なパラメータの追加と削除を繰り返すのではなく、AutoBindDisableおよびAutoBindEnableメソッドを使用してください。

ORATYPE_CURSOR型のOraParameterの場合は、このメソッドにより、カーソルに関連付けられたダイナセット・オブジェクトが破棄され、ローカル・キャッシュの一時ファイルが消去されます。

例

「例: ExecuteSQL」を参照してください。

関連項目:

- Addメソッド

- AutoBindDisableメソッド

- AutoBindEnableメソッド

- OraDatabaseオブジェクト

- OraParameterオブジェクト

- OraParametersコレクション

Remove(OraSubscriptionsコレクション)メソッド

適用対象

OraSubscriptionsコレクション

説明

OraSubscriptionsコレクションからサブスクリプションを削除します。

使用方法

orasubscriptions.Remove(member)

引数

このメソッドの引数は、次のとおりです。

引数

説明

member

0からCountの範囲で整数の添字を指定するVariantまたはサブスクリプション名。

備考

このメソッドは、アクティブなサブスクリプションを登録解除(削除)し、関連付けられたサブスクリプションを破棄します。

関連項目:

- Add(OraSubscriptionsコレクション)メソッド

- OraSubscriptionオブジェクト

- OraSubscriptionsコレクション

RemoveFromPoolメソッド

適用対象

OraDatabaseオブジェクト

説明

プールからOraDatabaseオブジェクトを削除します。

使用方法

OraDatabase.RemoveFromPool

備考

このメソッドは、GetDatabaseFromPoolメソッドを使用してプールから取り出したOraDatabaseオブジェクトにのみ適用されます。

OraDatabaseオブジェクトがプールのメンバーでない場合、例外またはエラーは発生しません。

このメソッドは、接続がすでに無効になっているプールからOraDatabaseオブジェクトを削除する場合に便利です。

関連項目:

- CreateDatabasePoolメソッド

- DestroyDatabasePoolメソッド

- GetDatabaseFromPoolメソッド

ResetTransメソッド

適用対象

OraConnectionオブジェクト

OraSessionオブジェクト

説明

すべてのトランザクションを無条件にロール・バックし、BeginTransメソッドによって開始されたトランザクション・モードを消去します。

使用方法

oraconnection.ResetTransorasession.ResetTrans

備考

このメソッドでは、イベントもエラーも生成されません。ResetTransメソッドはイベントを生成しないため、ロールバック操作やコミット操作のように、ValidateイベントのResetTransメソッドを取り消すことはできません。

注意: OraDatabaseオブジェクトがMicrosoft Transaction Server(MTS)にリストされていて、グローバルMTSトランザクションの一部である場合、このメソッドは無効です。

例

この例では、BeginTransおよびResetTransメソッドを使用して、ダイナセットに対する一連の編集を1つのトランザクションにグループ化する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)
'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

'Start Transaction processing.
OraDynaset.Session.BeginTrans

'Traverse until EOF is reached, setting each employee's salary to zero.
Do Until OraDynaset.EOF
OraDynaset.Edit
OraDynaset.Fields("sal").value = 0
OraDynaset.Update
OraDynaset.MoveNext
Loop
MsgBox "All salaries set to ZERO."

'Currently, the changes have NOT been committed to the database.
'End Transaction processing.
'Using ResetTrans means the rollback cannot be canceled in the Validate event.
OraDynaset.Session.ResetTrans
MsgBox "Salary changes rolled back."

End Sub

関連項目:

- BeginTransメソッド

- CommitTransメソッド

- OraSessionオブジェクト

- Rollbackメソッド

- Microsoft Transaction Serverのサポート

- Validateイベント

Rollbackメソッド

適用対象

OraConnectionオブジェクト

OraDatabaseオブジェクト

OraSessionオブジェクト

説明

現在のトランザクションを終了し、保留中の変更すべてをデータベースにロールバックします。

使用方法

oraconnection.Rollback
orasession.Rollback
oradatabase.Rollback

備考

このメソッドをコールすると、指定したセッションまたは接続を共有するすべてのOraDynasetオブジェクトに対して、ロールバック要求を取り消す機会が与えられます。要求を取り消さない場合は、ロールバックが正常終了した時点でオブジェクトに通知されます。

この機能は、Oracle Data Control操作の一部として作成されるダイナセットに特に便利です。これらのダイナセットに対して、Validateイベントを送信し、ロールバック要求を取り消すことができるようにします。

- OraConnectionおよびOraDatabase:
Rollbackメソッドは、指定した接続内で保留中の全トランザクションをロールバックします。トランザクションが開始されていない場合、このメソッドは無効です。セッション全体のトランザクションが進行中の場合は、指定された接続用のトランザクションを早い時点でロールバックするために、このコールを使用できます。

- OraSession:
Rollbackメソッドは、指定したセッション内で保留中の全トランザクションをロールバックします。Rollbackメソッドは、トランザクションが開始されている場合のみ有効です。トランザクションが開始されていないときに、Rollbackメソッドを使用するとエラーが発生します。

注意:
OraDatabaseオブジェクトがMicrosoft Transaction Server(MTS)にリストされていて、グローバルMTSトランザクションの一部である場合、このメソッドは無効です。

例

この例では、BeginTransおよびRollbackメソッドを使用して、ダイナセットに対する一連の編集を1つのトランザクションにグループ化する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)
'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

'Start Transaction processing.
OraDynaset.Session.BeginTrans

'Traverse until EOF is reached, setting each employee's salary to zero.
Do Until OraDynaset.EOF
OraDynaset.Edit
OraDynaset.Fields("sal").value = 0
OraDynaset.Update
OraDynaset.MoveNext
Loop
MsgBox "All salaries set to ZERO."

'Currently, the changes have NOT been committed to the database.
'End Transaction processing.
OraDynaset.Session.Rollback
MsgBox "Salary changes rolled back."

End Sub

関連項目:

- AutoCommitプロパティ

- BeginTransメソッド

- CommitTransメソッド

- OraSessionオブジェクト

- OraConnectionオブジェクト

- ResetTransメソッド

- Microsoft Transaction Serverのサポート

- Validateイベント

Round(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトを指定された小数位に四捨五入します。

使用方法

OraNumber.Power decplaces

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] decplaces

小数点から右の桁数を指定して四捨五入する位置を示すInteger。負の値も指定可能で、小数点から左の桁数を示します。

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

SetPi(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトをπ(パイ)に設定します。

使用方法

OraNumber.SetPi

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

Sin(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

ラジアンで指定されたOraNumberオブジェクトのサインを計算します。

使用方法

OraNumber.Sin

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

Sqrt(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトの平方根を計算します。

使用方法

OraNumber.Sqrt

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

OraNumberオブジェクトが0(ゼロ)未満である場合、このメソッドはエラーを戻します。

Sub(OraIntervalDS)メソッド

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトから引数を減算します。

使用方法

OraIntervalDSObj.Sub operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

減算するVariant型の文字列、数値またはOraIntervalDSオブジェクト。

備考

この操作の結果は、OraIntervalDSオブジェクトに格納され、以前の値は上書きされます。戻り値はありません。

operandがVariant型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。

operandが数値の場合、提供される値は、構成されたOraIntervalDSオブジェクトが表す合計日数を表す必要があります。

Sub(OraIntervalYM)メソッド

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalYMオブジェクトから引数を減算します。

使用方法

OraIntervalYMObj.Sub operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

減算するVariant型の文字列、数値またはOraIntervalYMオブジェクト。

備考

この操作の結果は、OraIntervalYMオブジェクトに格納され、以前の値は上書きされます。戻り値はありません。

operandがVariant型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。

operandが数値の場合、提供される値は、構成されたOraIntervalYMオブジェクトが表す合計年数を表す必要があります。

Sub(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberオブジェクトから数値引数を減算します。

使用方法

OraNumber.Sub operand

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] operand

Variant型の文字列、OraNumber型または数値。

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

Tan(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

ラジアンで指定されたOraNumberオブジェクトのタンジェントを計算します。

使用方法

OraNumber.Tan

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

ToDateメソッド

適用対象

OraTimeStampオブジェクト

OraTimeStampTZオブジェクト

説明

OraTimeStampまたはOraTimeStampTZオブジェクトからDate型のコピーを戻します。

使用方法

Set date = OraTimeStampObj.ToDate
Set date = OraTimeStampTZObj.ToDate

備考

このメソッドは、日時値をDateデータ型で戻します。その結果、日時値がVB日付の許容範囲外の場合は調整されます。

- OraTimeStampオブジェクトの場合:
現行のOraTimeStampオブジェクトと同じ日時値の新規Dateオブジェクトを戻します。ただし、ナノ秒部分は切り捨てられます。

- OraTimeStampTZオブジェクトの場合:
現行のOraTimeStampTZオブジェクトと同じ日時値の新規Dateオブジェクトを戻します。ただし、ナノ秒部分とタイムゾーン部分は切り捨てられます。

例

OraTimeStampオブジェクトの使用方法

Dim OraTimeStamp As OraTimeStamp

...
'Create OraTimeStamp using a string
Set OraTimeStamp = OraSession.CreateOraTimeStamp("1999-APR-29 12:10:23.444 AM", _
"YYYY-MON-DD HH:MI:SS.FF AM")

' returns a Date type with date value set to "1999-APR-29 12:10:23 AM"
' note that the fractional part is dropped
Set date = OraTimeStamp.ToDate

OraTimeStampTZオブジェクトの使用方法

Dim OraTimeStampTZ As OraTimeStampTZ

...
'Create OraTimeStampTZ using a string
Set OraTimeStampTZ = OraSession.CreateOraTimeStampTZ("2000-12-28" & _
"12:10:23.444 -07:00", "YYYY-MM-DD HH:MI:SS.FF TZH:TZM")

'returns a Date type with date value set to "2000-12-28 12:10:23"
'note that Time Zone and nanosecond portions are dropped
Set date = OraTimeStampTZ.ToDate

ToOraNumber(OraIntervalDS)メソッド

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトが指定する日数の合計を表す値を含むOraNumberオブジェクトを戻します。

使用方法

Set OraNumberObj = OraIntervalDSObj.ToOraNumber

ToOraTimeStampメソッド

適用対象

OraTimeStampTZオブジェクト

説明

現行のOraTimeStampTZオブジェクトの指定したタイムゾーンの日時値を持つOraTimeStampオブジェクトのコピーを戻します。

OraTimeStampTZオブジェクトからOraTimeStampオブジェクトのコピーを戻します。

使用方法

Set OraTimeStampObj = OraTimeStampTZObj.ToOraTimeStamp

備考

現行のOraTimeStampTZオブジェクトの指定したタイムゾーンの日時値を持つ新規OraTimeStampオブジェクトを戻します。

例

Dim OraTimeStampTZ As OraTimeStampTZ

...
'Create OraTimeStampTZ using a string
Set OraTimeStampTZ = OraSession.CreateOraTimeStampTZ("2000-12-28" & _
"12:10:23.444 -07:00", "YYYY-MM-DD HH:MI:SS.FF TZH:TZM")

'returns a new OraTimeStamp object with date value equal to
' "2000-12-28 12:10:23.444"
'note that Time Zone portion is dropped
Set OraTimeStamp = OraTimeStampTZ.ToOraTimeStamp

ToOraTimeStampLTZメソッド

適用対象

OraTimeStampTZオブジェクト

説明

現行のOraTimeStampTZオブジェクトのセッション・タイムゾーンに正規化された日時値を持つOraTimeStampオブジェクトのコピーを戻します。

使用方法

Set OraTimeStampObj = OraTimeStampTZObj.ToOraTimeStampLTZ

備考

現行のOraTimeStampTZオブジェクトのセッション・タイムゾーンに正規化された日時値を持つ新規OraTimeStampオブジェクトを戻します。

例

Dim OraTimeStampTZ As OraTimeStampTZ

...
'Create OraTimeStampTZ using a string
Set OraTimeStampTZ = OraSession.CreateOraTimeStampTZ("2003-APR-29" & _
"12:00:00 -07:00", "YYYY-MON-DD HH:MI:SS TZH:TZM")

'Assuming that the Session Time Zone is "-08:00"
'returns a new OraTimeStamp object with date value normalized to
'session Time Zone, "2003-APR-29 11:00:00"

Set OraTimeStamp = OraTimeStampTZ.ToOraTimeStampLTZ
...

ToOraTimeStampTZメソッド

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトからOraTimeStampTZオブジェクトのコピーを戻します。

使用方法

Set OraTimeStampTZObj = OraTimeStampObj.ToOraTimeStampTZ

備考

現行のOraTimeStampオブジェクトと同じ日時値の新規OraTimeStampTZオブジェクトを戻します。戻されたOraTimeStampTZオブジェクトのタイムゾーン情報は、セッション・タイムゾーンに設定されます。

例

Dim OraTimeStamp As OraTimeStamp

...
'Create OraTimeStamp using a string
Set OraTimeStamp = OraSession.CreateOraTimeStamp("1999-APR-29" & _
"12:10:23.444 AM", "YYYY-MON-DD HH:MI:SS.FF AM")

' assuming that the session Time Zone is "-07:00" returns a new
' OraTimeStampTZ object with date value equal to "1999-APR-29 12:10:23 -07:00"
Set OraTimeStampTZ = OraTimeStamp.ToOraTimeStampTZ

ToUniversalTimeメソッド

適用対象

OraTimeStampTZオブジェクト

説明

現行のOraTimeStampTZオブジェクトの協定世界時(UTC)に正規化された日時値を持つOraTimeStampTZオブジェクトのコピーを戻します。

使用方法

Set OraTimeStampTZObj1 = OraTimeStampTZObj.ToUniversalTime

備考

現行のOraTimeStampTZオブジェクトのUTCに正規化された日時値を持つ新規OraTimeStampTZオブジェクトを戻します。

注意:
UTCは以前グリニッジ標準時と呼ばれていました。

例

Dim OraTimeStampTZ As OraTimeStampTZ
Dim OraTimeStampTZ_UTC As OraTimeStampTZ
...
'Create OraTimeStampTZ using a string
Set OraTimeStampTZ = OraSession.CreateOraTimeStampTZ("2003-APR-29 " & _
"12:00:00 -07:00", "YYYY-MON-DD HH:MI:SS TZH:TZM")

'returns a new OraTimeStampTZ object with date value normalized to
'UTC time, "2003-APR-29 19:00:00 00:00"
Set OraTimeStampTZ_UTC = OraTimeStampTZ.ToUniversalTime
...

Trim(OraCollection)メソッド

適用対象

OraCollectionオブジェクト

説明

コレクションの最後から指定した数の要素を切り捨てます。

使用方法

OraCollection.Trim size

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] size

切り捨てる要素の数を指定する整数。

備考

コレクションの最後から要素を削除します。現在のコレクションのサイズを超えるサイズを指定すると、エラーになります。

例

次の例では、Trimメソッドの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraCollectionの例で使用されているスキーマ・オブジェクト」を参照してください。

例: OraCollectionオブジェクトに対するTrimメソッド

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim EnameList as OraCollection

'create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from department
set OraDynaset = OraDatabase.CreateDynaset("select * from department", 0&)

'retrieve a Enames column from Department.
'Here Value property of OraField object returns EnameList OraCollection
set EnameList = OraDynaset.Fields("Enames").Value

'display the size of the collection
msgbox  EnameList.Size

'Trim the EnameList collection by one. Before that row level
'lock should be obtained

OraDynaset.Edit
EnameList.Trim 1
OraDynaset.Update

'display the new size of the collection
msgbox EnameList.Size

Trim(OraLOB)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

説明

LOBの値を短く切り捨てます。

使用方法

OraBlob.Trim NewLen
OraClob.Trim NewLen

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] NewLen

現在の長さ以下である必要がある、LOBの新しい長さを指定する整数。

備考

このメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。

注意:
WriteやCopyFromFileなど、LOBのメソッドを使用したLOBの操作では、古いデータと比較して新しいデータが短い場合、LOBオブジェクトは自動的に切り捨てられません。LOBオブジェクトを新しいデータのサイズに縮小するには、Trim(OraLOB)メソッドを使用します。

Trunc(OraNumber)メソッド

適用対象

OraNumberオブジェクト

説明

OraNumberを指定された小数位で切り捨てます。

使用方法

OraNumber.Trunc decplaces

引数

このメソッドの引数は、次のとおりです。

引数

説明

[in] decplaces

小数点から右の桁数を指定して切捨て位置を示すInteger。負の値も指定可能で、小数点から左の桁数を示します。

備考

この操作の結果は、OraNumberオブジェクトに格納されます。戻り値はありません。

Unregisterメソッド

適用対象

OraSubscriptionオブジェクト

説明

このサブスクリプションの登録を解除し、特定のデータベース・イベントに関する通知をオフにします。

使用方法

orasubscription.UnRegister

備考

サブスクリプションの登録を解除すると、今後そのサブスクリプションまたはデータベース・イベントに関連する通知は送信されなくなります。通知を再開するには、そのサブスクリプションを再登録します。

例

データベース・イベントが通知されるようにアプリケーションを登録する例

「例: データベース・イベントが通知されるようにアプリケーションを登録する方法」を参照してください。

関連項目:

- データベース・イベント

- OraSubscriptionオブジェクト

- OraSubscriptionsコレクション

Updateメソッド

適用対象

OraDynasetオブジェクト

説明

指定したダイナセットにコピー・バッファを保存します。

使用方法

oradynaset.Update
oradynaset.DbUpdate

備考

Updateメソッドは、AddNewまたはEdit操作を完了して、そのセッションでBeginTrans操作が保留されていないかぎり、ただちに変更内容をデータベースにコミットします。

グローバル・トランザクション(つまり、BeginTrans操作が発行済)内のダイナセットの所定の行でUpdateメソッドをコールすると、CommitTransまたはRollbackメソッドをコールするまで、選択した行がロックされたままになります。

ミラー化されたデータ・イメージも更新されるため、データの参照および更新を続行するために問合せを再評価する必要はありません。ミラー・イメージの更新に使用するメソッドは、このダイナセットのOraDatabaseオブジェクトを作成したOpenDatabaseメソッドに渡されたオプション・フラグによって決まります。

このダイナセットがデータ・コントロールに付加されている場合、データ・コントロール・コードのValidateイベントで、必要に応じて、更新要求を取り消すことができます。更新が完了すると、ダイナセットに関連付けられているすべてのバインド済コントロールに更新内容が通知されるため、データの変更内容が自動的に反映されます。

例

この例では、AddNewおよびUpdateメソッドを使用して、ダイナセットに新規レコードを追加する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

'Begin an AddNew.
OraDynaset.AddNew

'Set the field(column) values.
OraDynaset.Fields("EMPNO").Value = "1000"
OraDynaset.Fields("ENAME").Value = "WILSON"
OraDynaset.Fields("JOB").Value = "SALESMAN"
OraDynaset.Fields("MGR").Value = "7698"
OraDynaset.Fields("HIREDATE").Value = "19-SEP-92"
OraDynaset.Fields("SAL").Value = 2000
OraDynaset.Fields("COMM").Value = 500

OraDynaset.Fields("DEPTNO").Value = 30

'End the AddNew and Update the dynaset.
OraDynaset.Update

End Sub

関連項目:

- AddNewメソッド

- Editメソッド

- OpenDatabaseメソッド

- OraDatabaseオブジェクト

- Validateイベント

Update(OraRef)メソッド

適用対象

OraRefオブジェクト

説明

変更した参照可能オブジェクトをデータベースにフラッシュします。

使用方法

OraRef.Update

備考

Updateメソッドは、Edit操作を完了し、セッションにBeginTrans操作が保留されていないかぎりは、変更内容をデータベースにコミットします。

例

次の例では、データベースにあるPERSONという参照可能オブジェクトの属性を更新します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。

属性値の更新: ダイナセットの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim Person as OraRef

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from customers
set OraDynaset = OraDatabase.CreateDynaset("select * from customers", 0&)

'retrieve a aperson column from customers. Here Value property of OraField
'object returns Person OraRef
set Person = OraDynaset.Fields("aperson").Value

'locks the Person object in the server for modifying its attributes
Person.Edit
Person.Name = "Eric"
Person.Age = 35

'Update method flushes the modified referenceable object in the server
Person.Update

属性値の更新: パラメータの例

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim Person  as OraRef

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create an  OraParameter object represent Address object bind Variable
OraDatabase.Parameters.Add "PERSON", Null, ORAPARM_OUTPUT, ORATYPE_REF,"PERSON"

'execute the sql statement which selects person from the customers table
OraDatabase.ExecuteSQL ("BEGIN select aperson into :PERSON from customers" & _
"where account = 10; END;")

'get the Person object from OraParameter
set Person = OraDatabase.Parameters("PERSON").Value

'locks the Person object in the server for modifying its attributes
Person.Edit
Person.Name = "Eric"
Person.Age = 35

'Update method flushes the modified referenceable object in the server
Person.Update

Write(OraLOB)メソッド

適用対象

OraBLOB、OraCLOBオブジェクト

説明

バッファをこのオブジェクトのBLOBまたはCLOB値に書き込み、書込みデータ長の合計を戻します。

使用方法

amount_written = OraBlob.Write buffer, chunksize, piece
amount_written = OraClob.Write buffer, chunksize, piece

引数

このメソッドの引数は、次のとおりです。

引数

説明

in] buffer

OraCLOBオブジェクトの場合は文字配列、ピースの書込み元のOraBLOBオブジェクトの場合はバイト配列。

[in] [オプション] chunksize

バッファの長さを指定するためのIntegerで、OraCLOBオブジェクトの場合は文字数、OraBLOBまたはOraBFILEオブジェクトの場合はバイト数を示します。デフォルト値は、バッファの引数のサイズです。

[in] [オプション] piece

バッファを書き込むピースを指定するためのInteger。次の値を指定できます。

- ORALOB_ONE_PIECE - バッファを単一ピースで書き込みます。これがデフォルトになります。

- ORALOB_FIRST_PIECE - バッファは、書き込まれるLOBデータの最初のピースを表します。

- ORALOB_NEXT_PIECE - バッファは、書き込まれるLOBデータの次のピースを表します。

- ORALOB_LAST_PIECE - バッファは、書き込まれるLOBデータの最後のピースを表します。

[out] amount_written

書込み量を表す整数。OraCLOBオブジェクトの場合は文字数、OraBLOBまたはOraBFILEオブジェクトの場合はバイト数を示します。

備考

Writeメソッドのコール前に、行レベルまたはオブジェクト・レベルでロックを取得する必要があります。このメソッドは、Offsetプロパティで指定されたオフセットからBLOBデータまたはCLOBデータを書き込みます。複数ピースの書込み操作の場合は、PollingAmountプロパティを書込みデータ長の合計数の値に設定でき、Statusプロパティをチェックして各ピースの操作が正常に実行されたことを確認する必要があります。合計数が不明な場合、PollingAmountプロパティを0に設定でき、ピースの型がOraLob_pieceでない場合は、ポーリングが引き続き発生します。

最後のピースについては、ピース引数をORALOB_LAST_PIECEに設定します。ポーリングの量をバイト数または文字数で書き込む必要があります。PollingAmountプロパティがゼロ以外の場合、Write操作を早期に終了することはできません。

OraLOBのPollingamountが0で、OraLOBのWriteのピースの型がORALOB_ONE_PIECEでない場合は、ポーリングが引き続き発生します。ORALOB_LAST_PIECEがWriteメソッドへのコールの引数として送信されると、ポーリングが完了します。これは、OraCLOB.Writeメソッドを可変長キャラクタ・セットでコールする際、文字の合計数を事前にカウントすると負荷がかかる場合に便利です。

注意:
WriteやCopyFromFileなど、LOBのメソッドを使用したLOBの操作では、古いデータと比較して新しいデータが短い場合、LOBオブジェクトは自動的に切り捨てられません。LOBオブジェクトを新しいデータのサイズに縮小するには、Trim(OraLOB)メソッドを使用します。

例

「LOBデータ型の例で使用されているスキーマ・オブジェクト」の説明に従ってOraLOBスキーマ・オブジェクトをインストールしていることを確認してください。

LOBの複数ピース書込みの例

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim PartDesc As OraClob
Dim buffer As String
Dim chunksize As Long
Dim amount_written As Long

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object
Set OraDynaset = OraDatabase.CreateDynaset("select * from part", 0&)
Set PartDesc = OraDynaset.Fields("part_desc").Value
chunksize = 32000

'Re adjust the buffer size
buffer = String$(chunksize, 32)
FNum = FreeFile

'Open the file.
Open "partdesc.dat" For Binary As #FNum

'set the offset and PollingAmount properties for piece wise
'Write operation
PartDesc.offset = 1
PartDesc.PollingAmount = LOF(FNum)
remainder = LOF(FNum)

'Lock the row for write operation
OraDynaset.Edit
Get #FNum, , buffer

'Do first write operation
amount_written = PartDesc.Write(buffer, chunksize, ORALOB_FIRST_PIECE)

While PartDesc.Status = ORALOB_NEED_DATA
remainder = remainder - chunksize
If remainder < chunksize Then
piecetype = ORALOB_LAST_PIECE
chunksize = remainder
Else
piecetype = ORALOB_NEXT_PIECE
End If
Get #FNum, , buffer

amount_written = PartDesc.Write(buffer, chunksize, piecetype)
Wend

Close FNum

'call Update method to commit the transaction
OraDynaset.Update

LOBの単一ピース書込みの例

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim PartImage As OraBlob
Dim buffer() As Byte

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Add PartDesc as an Output parameter and set its initial value.
OraDatabase.Parameters.Add "PartImage", Null, ORAPARM_OUTPUT
OraDatabase.Parameters("PartImage").ServerType = ORATYPE_BLOB

'Begin the transaction
OraSession.BeginTrans

'Execute the statement returning 'PartDesc'
OraDatabase.ExecuteSQL ("BEGIN select part_image into :PARTIMAGE" & _
"from part where part_id = 1 for update NOWAIT; END;")

'Get 'PartDesc' from Parameters collection
Set PartImage = OraDatabase.Parameters("PartImage").Value

'Get a free file number
FNum = FreeFile

'Open the file.
Open "PartImage.Dat" For Binary As #FNum

'Re adjust the buffer size to hold entire file data
ReDim buffer(LOF(FNum))
Get #FNum, , buffer

'Do one write operation
amount_written = PartImage.Write(buffer)

Close FNum
MsgBox "Amount written to the LOB data is " & amount_written

'Ends the transaction
OraSession.CommitTrans

関連項目:

- Offset(OraLOB/BFILE)プロパティ

- PollingAmountプロパティ

- Status(OraLOB/BFILE)プロパティ

- Trim(OraLOB)メソッド

- LOBデータの書込み

11 サーバー・プロパティ

この章では、Oracle Objects for OLEのサーバー・プロパティについて説明します。

サーバー・オブジェクトの概要は、「Oracle Objects for OLEインプロセス・オートメーション・サーバー」を参照してください。

内容は次のとおりです。

- サーバー・プロパティ: AからF

- サーバー・プロパティ: EからL

- サーバー・プロパティ: MからO

- サーバー・プロパティ: PからT

- サーバー・プロパティ: UからZ

サーバー・プロパティ: AからF

- Address(OraAQAgent)プロパティ

- ArraySizeプロパティ

- AutoCommitプロパティ

- BOCプロパティ

- BOFプロパティ

- Bookmarkプロパティ

- BookMarkableプロパティ

- CacheBlocksプロパティ

- CacheChangedプロパティ

- CacheMaximumSizeプロパティ

- CacheOptimalSizeプロパティ

- CacheSliceSizeプロパティ

- CacheSlicesPerBlockプロパティ

- Clientプロパティ

- Connectプロパティ

- Connectionプロパティ

- ConnectionOKプロパティ

- Connectionsプロパティ

- Consumer(OraAQ)プロパティ

- Correlate(OraAQ)プロパティ

- Correlation(OraAQMsg)プロパティ

- Countプロパティ

- Count(OraMetaData)プロパティ

- Count(OraObject/Ref)プロパティ

- Databaseプロパティ

- DatabaseNameプロパティ

- Databasesプロパティ

- Day(OraTimeStamp)プロパティ

- Day(OraTimeStampTZ)プロパティ

- Daysプロパティ

- DbPoolCurrentSizeプロパティ

- DbPoolInitialSizeプロパティ

- DbPoolMaxSizeプロパティ

- Delay(OraAQMsg)プロパティ

- DequeueMode(OraAQ)プロパティ

- DequeueMsgId(OraAQ)プロパティ

- DirectoryNameプロパティ

- DynasetOptionプロパティ

サーバー・プロパティ: EからL

- EditModeプロパティ

- EditOption(OraRef)プロパティ

- ElementTypeプロパティ

- EOCプロパティ

- EOFプロパティ

- ExceptionQueueプロパティ

- Existsプロパティ

- Expiration(OraAQMsg)プロパティ

- FetchLimitプロパティ

- FetchSizeプロパティ

- FieldIndexプロパティ

- FieldNameプロパティ

- FieldOriginalNameプロパティ

- FieldOriginalNameIndexプロパティ

- Fieldsプロパティ

- FileNameプロパティ

- Filterプロパティ

- Format(OraNumber)プロパティ

- Format(OraTimeStamp)プロパティ

- Format(OraTimeStampTZ)プロパティ

- HexValue(OraRef)プロパティ

- Hour(OraTimeStamp)プロパティ

- Hour(OraTimeStampTZ)プロパティ

- Hoursプロパティ

- IsLocator(OraCollection)プロパティ

- IsMDObjectプロパティ

- IsNull(OraCollection)プロパティ

- IsNull(OraLOB/BFILE)プロパティ

- IsNull(OraObject)プロパティ

- IsOpen(OraBFILE)プロパティ

- IsRefNull(OraRef)プロパティ

- LastErrorTextプロパティ

- LastModifiedプロパティ

- LastServerErrプロパティ

- LastServerErrPosプロパティ

- LastServerErrTextプロパティ

サーバー・プロパティ: MからO

- MaxSize(OraCollection)プロパティ

- MinimumSizeプロパティ

- Minute(OraTimeStamp)プロパティ

- Minute(OraTimeStampTZ)プロパティ

- Minutesプロパティ

- Month(OraTimeStamp)プロパティ

- Month(OraTimeStampTZ)プロパティ

- Monthsプロパティ

- Nameプロパティ

- Name(AQAgent)プロパティ

- Name(OraAttribute)プロパティ

- Name(OraMDAttribute)プロパティ

- Nanosecond(OraTimeStamp)プロパティ

- Nanonsecond(OraTimeStampTZ)プロパティ

- Nanonsecondsプロパティ

- Navigation(OraAQ)プロパティ

- NoMatchプロパティ

- NonBlockingStateプロパティ

- Offset(OraLOB/BFILE)プロパティ

- OIPVersionNumberプロパティ

- Optionsプロパティ

- OraIDataTypeプロパティ

- OraMaxDSizeプロパティ

- OraMaxSizeプロパティ

- OraNullOKプロパティ

- OraPrecisionプロパティ

- OraScaleプロパティ

サーバー・プロパティ: PからT

- Parametersプロパティ

- PinOption(OraRef)プロパティ

- PollingAmountプロパティ

- Priority(OraAQMsg)プロパティ

- RDMSVersionプロパティ

- RecordCountプロパティ

- RelMsgId(OraAQ)プロパティ

- RowPositionプロパティ

- SafeArray(OraCollection)プロパティ

- Second(OraTimeStamp)プロパティ

- Second(OraTimeStampTZ)プロパティ

- Secondsプロパティ

- Serverプロパティ

- ServerTypeプロパティ

- Sessionプロパティ

- Sessionsプロパティ

- Sizeプロパティ

- Size(OraCollection)プロパティ

- Size(OraLOBおよびOraBFILE)プロパティ

- SnapShotプロパティ

- Sortプロパティ

- SQLプロパティ

- Statusプロパティ

- Status(OraLOB/BFILE)プロパティ

- Subscriptionsプロパティ

- TableName(OraRef)プロパティ

- TableSize(OraCollection)プロパティ

- TimeZone(OraTimeStampTZ)プロパティ

- TotalDaysプロパティ

- TotalYearsプロパティ

- Transactionsプロパティ

- Truncatedプロパティ

- Typeプロパティ

- Type(OraAttribute)プロパティ

- Type(OraCollection)プロパティ

- Type(OraMetaData)プロパティ

- TypeName(OraObjectおよびOraRef)プロパティ

サーバー・プロパティ: UからZ

- Updatableプロパティ

- Valueプロパティ

- Value(OraAttribute)プロパティ

- Value(OraAQMsg)プロパティ

- Value(OraIntervalDS)プロパティ

- Value(OraIntervalYM)プロパティ

- Value(OraMDAttribute)プロパティ

- Value(OraNumber)プロパティ

- Value(OraTimeStamp)プロパティ

- Value(OraTimeStampTZ)プロパティ

- Version(OraObjectおよびRef)プロパティ

- Visible(OraAQ)プロパティ

- Wait(OraAQ)プロパティ

- XMLAsAttributeプロパティ

- XMLCollIDプロパティ

- XMLEncodingTagプロパティ

- XMLNullIndicatorプロパティ

- XMLOmitEncodingTagプロパティ

- XMLRowIDプロパティ

- XMLRowsetTagプロパティ

- XMLRowTagプロパティ

- XMLTagNameプロパティ

- XMLUpperCaseプロパティ

- Year(OraTimeStamp)プロパティ

- Year(OraTimeStampTZ)プロパティ

- Yearsプロパティ

Address(OraAQAgent)プロパティ

適用対象

OraAQAgentオブジェクト

説明

プロトコル固有の受信者アドレスを示す128バイトの文字列を戻します。書式は、[schema.]queue[@dblink]です。

使用方法

agent_address = qMsg.AQAgent.Address

データ型

String

ArraySizeプロパティ

適用対象

OraParamArrayオブジェクト

説明

OraParameter文字列バッファの配列サイズ(配列内の要素の数)を指定します。設計時には使用できません。実行時は読取り専用です。

使用方法

OraParamArray.ArraySize

データ型

Integer

備考

ArraySizeはAddTableで指定します。OraParamArrayオブジェクトのAddTableメソッドを参照してください。

関連項目:
AddTableメソッド

AutoCommitプロパティ

適用対象

OraDatabaseオブジェクト

説明

OraDatabaseオブジェクトのAutoCommitプロパティを取得または設定します。

使用方法

autocommit = OraDatabase.AutoCommit
OraDatabase.AutoCommit = [ True | False

データ型

ブール

備考

AutoCommitプロパティがTRUEに設定されている場合、データベース内のデータを変更するすべての操作は、その操作を行う文の実行後に自動的にコミットされます。

AutoCommitプロパティがFALSEに設定されている場合は、OraDatabaseトランザクション・メソッド(BeginTrans、CommitTransおよびRollback)またはトランザクションを制御するSQL文を使用する必要があります。

例

次の例では、AutoCommitプロパティをFALSEに設定した後に、SQL文を使用してトランザクションを制御する方法を示します。

Dim session As OraSession
Dim MyDb As OraDatabase
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set MyDb = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0)
MyDb.AutoCommit = False
MyDb.ExecuteSQL ("update emp set sal = 100000" & _
"where ename = 'JOHN SMITH' ")
MyDb.ExecuteSQL ("commit")

関連項目:

- BeginTransメソッド

- CommitTransメソッド

- Rollbackメソッド

BOCプロパティ

適用対象

OraCollectionオブジェクト

説明

コレクション・イテレータがコレクションの最初の要素の前に移動した場合はTRUEになります。

使用方法

boc_flag = OraCollection.BOC

データ型

ブール

例

「例: OraCollectionイテレータ」を参照してください。

BOFプロパティ

適用対象

OraDynasetオブジェクト

説明

ダイナセットのカレント・レコードの位置が最初のレコードより前かどうかを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

bof_status = oradynaset.BOF

データ型

Integer(ブール)

備考

MovePreviousメソッドを使用してダイナセットの最初のレコードより前に移動しようとした場合はTRUEを戻します。それ以外の場合はFALSEを戻します。

レコードセットが空の場合、BOFとEOFは両方ともTRUEを戻します。

例

この例では、BOFおよびEOFプロパティを使用して、レコードセットの範囲を検出する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object
Set OraDynaset = OraDatabase.CreateDynaset("select empno, ename from emp", 0&)

'Traverse until EOF is reached
Do Until OraDynaset.EOF
OraDynaset.MoveNext
Loop
MsgBox "Reached EOF"

'When EOF is True there is no current record.
'The current recordset position is now AFTER the last record.
OraDynaset.MoveLast

Do Until OraDynaset.BOF
OraDynaset.MovePrevious
Loop
MsgBox "Reached BOF"

'When BOF is True there is no current record.
'The current recordset position is now BEFORE
'AFTER the last record.

OraDynaset.MoveFirst
'The recordset is now positioned at the first record.

End Sub

関連項目:

- EOFプロパティ

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

Bookmarkプロパティ

適用対象

OraDynasetオブジェクト

説明

レコード・セットのカレント・レコードを決定します。設計時には使用できず、実行時は読取りおよび書込みができます。

使用方法

row_bookmark = oradynaset.Bookmark
oradynaset.Bookmark = row_bookmark

データ型

値はバイナリ・データの文字列ですが、StringまたはVariantデータ型の変数に格納できます。文字列の長さは予測できないため、固定長の文字列は使用しないでください。

備考

使用方法の最初の書式では、現在の行のBookmarkプロパティを戻します。2番目の書式では、ダイナセット内の特定のレコードを参照するように、Bookmarkプロパティの位置を移動します。

Bookmarkオブジェクトは、ダイナセットが有効な間のみ存在し、特定のダイナセットに限定されます。これらのオブジェクトを複数のダイナセットで共有することはできません。ただし、ダイナセットとそのクローン間ではBookmarkオブジェクトを交換できます。

Bookmarkオブジェクトを使用する前に、そのダイナセットのBookMarkableプロパティをチェックして、ダイナセットがブックマークをサポートしていることを確認してください。

例

この例では、Bookmarkプロパティを使用して、以前の既知レコードに迅速に戻る方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables as OLE Objects.
Dim OraClient As OraClient
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim Bookmark2 As String

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Get the client object.
Set OraClient = OraSession.Client

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

'Move to the second record and display empno.
OraDynaset.MoveNext
MsgBox "Second Record, Employee #" & OraDynaset.Fields("EMPNO").value
Bookmark2 = OraDynaset.Bookmark

'Move to the last record and display empno.
OraDynaset.MoveLast
MsgBox "Last Record, Employee #" & OraDynaset.Fields("EMPNO").value

'Move back to the second record using the bookmark.

OraDynaset.Bookmark = Bookmark2
MsgBox "Second Record, Employee #" & OraDynaset.Fields("EMPNO").value

End Sub

関連項目:

- BookMarkableプロパティ

- Cloneメソッド

- LastModifiedプロパティ

BookMarkableプロパティ

適用対象

OraDynasetオブジェクト

説明

指定したダイナセットがBookmarkオブジェクトをサポートできるかどうかを示します。設計時には使用できません。実行時は読取り専用です。

使用方法

if_bookmarkable = oradynaset.Bookmarkable

データ型

Integer(ブール)

備考

指定したダイナセットの作成時に非キャッシュ・モードが設定されていないかぎり、このプロパティはTRUEを戻します。非キャッシュ・モードが設定されている場合はFALSEを戻します。

関連項目:

- Bookmarkプロパティ

- CreateDynasetメソッド

CacheBlocksプロパティ

適用対象

OraDynasetオブジェクト

説明

キャッシュの最大ブロック数を取得または設定します。

使用方法

set blocks = oradynaset.CacheBlocks
oradynaset.CacheBlocks = blocks

データ型

Integer

CacheChangedプロパティ

適用対象

OraDynasetオブジェクト

説明

キャッシュ・パラメータまたはフェッチ・パラメータが変更されている場合はTRUEになります。

使用方法

set Changed = oradynaset.CacheChanged

データ型

ブール

CacheMaximumSizeプロパティ

適用対象

OraDatabaseオブジェクト

説明

クライアント側のオブジェクト・キャッシュの最大サイズ(最高水位標)を、最適サイズに対するパーセントで設定します。デフォルト値は10%です。

使用方法

Oradatabase.CacheMaximumSize maxsize

データ型

Long

備考

キャッシュ内で現在オブジェクトが占有するメモリーが最高水位標(最大オブジェクト・キャッシュ・サイズ)を超えた場合、キャッシュは、マークされていないオブジェクト(確保カウントが0(ゼロ)のオブジェクト)を自動的に解放し始めます。キャッシュ内のメモリー使用が最適サイズになるまで、または解放できるオブジェクトがなくなるまで、このようなオブジェクトの解放が続きます。

CacheOptimalSizeプロパティ

適用対象

OraDatabaseオブジェクト

説明

クライアント側のオブジェクト・キャッシュの最適サイズをバイト単位で設定します。デフォルト値は200KBです。

使用方法

Oradatabase.CacheOptimalSize optimalsize

データ型

Long

備考

このパラメータは、クライアント側のオブジェクト・キャッシュ・サイズを増加します。キャッシュ内で現在オブジェクトが占有するメモリーが最高水位標(最大オブジェクト・キャッシュ・サイズ)を超えた場合、キャッシュは、マークされていないオブジェクト(確保カウントが0(ゼロ)のオブジェクト)を自動的に解放し始めます。キャッシュ内のメモリー使用が最適サイズになるまで、または解放できるオブジェクトがなくなるまで、このようなオブジェクトの解放が続きます。オブジェクト・キャッシュがOracle Database 10gから取り出したすべてのオブジェクト・インスタンスを格納できるように、このパラメータを適切な値に設定する必要があります。このプロパティは、Oracle Database 10gオブジェクト・インスタンスのアクセス用にパフォーマンスを調整する場合に便利です。

CacheSliceSizeプロパティ

適用対象

OraDynasetオブジェクト

説明

キャッシュ・スライス・サイズを取得または設定します。

使用方法

set Slicesize = oradynaset.CacheSliceSize
oradynaset.CacheSliceSize = Slicesize

データ型

Integer

CacheSlicesPerBlockプロパティ

適用対象

OraDynasetオブジェクト

説明

ブロック当たりのキャッシュ・スライスを取得または設定します。

使用方法

set Perblock = oradynaset.CacheSlicePerBlock
oradynaset.CacheSlicePerBlock  = Perblock

データ型

Integer

Clientプロパティ

適用対象

OraSessionオブジェクト

説明

指定したセッションに関連付けられているOraClientオブジェクトを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

Set oraclient = orasession.Client

データ型

OLEオブジェクト(OraClient)

備考

各コンピュータは1つのクライアント・オブジェクトのみを保有しているため、このプロパティは同一コンピュータ上のすべてのセッションに対して同じオブジェクトを戻します。

関連項目:
OraClientオブジェクト

Connectプロパティ

適用対象

OraConnectionオブジェクト

OraDatabaseオブジェクト

説明

接続に関連付けられている接続文字列のユーザー名を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

connect_string = oraconnection.Connect
connect_string = oradatabase.Connect

データ型

String

備考

- OraConnection.Connect
接続に関連付けられている接続文字列のユーザー名を戻します。

- OraDatabase.Connect
指定したデータベースに関連付けられている接続文字列のユーザー名を戻します。これは、OraDatabase.Connection.Connectを参照することと同じです。

ユーザー名に関連付けられているパスワードが戻ることはありません。

例

この例では、ConnectおよびDatabaseNameプロパティを使用して、接続しているユーザー名とデータベース名を表示する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Display the username and database to which we are connected.
MsgBox "Connected to " & OraDatabase.Connect & "@" & OraDatabase.DatabaseName

End Sub

関連項目:

- OpenDatabaseメソッド

- DatabaseNameプロパティ

Connectionプロパティ

適用対象

OraDatabaseオブジェクト

OraDynasetオブジェクト

OraSQLStmtオブジェクト

説明

指定したデータベース、ダイナセットまたはOraSQLStmtオブジェクトに関連付けられているOraConnectionオブジェクトを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

Set oraconnection = oradatabase.Connection
Set oraconnection = oradynaset.Connection
Set oraconnection = orasqlstmt.Connection

データ型

OLEオブジェクト(OraConnection)

備考

- OraDatabase.Connection
指定したデータベースに関連付けられている接続オブジェクトを戻します。各データベースは1つの接続オブジェクトに関連付けられていますが、複数のデータベースで同じ接続オブジェクトを共有できます。

- OraDynaset.Connection
このダイナセットに関連付けられている接続オブジェクトを戻します。これは、oradynaset.Database.Connectionを参照することと同じです。

- OraSQLStmt.Connection
このOraSQLStmtオブジェクトに関連付けられている接続オブジェクトを戻します。これは、orasqlstmt.Database.Connectionを参照することと同じです。

関連項目:
OraConnectionオブジェクト

ConnectionOKプロパティ

適用対象

OraDatabaseオブジェクト

OraConnectionオブジェクト

説明

OraConnectionオブジェクトに関連付けられているデータベース接続の状態を示すブール値を戻します。TRUEが戻る場合は、指定したデータベースに関連付けられている接続オブジェクトの接続が有効であることを示します。接続が切断されている場合、このプロパティはFALSEを戻します。

設計時には使用できません。実行時は読取り専用です。

使用方法

ConnectionStat = OraDatabase.ConnectionOK
ConnectionStat = OraDatabase.Connection.ConnectionOK

データ型

ブール

備考

- OraDatabase.ConnectionOK
指定したデータベースに関連付けられている接続オブジェクトの状態を戻します。各データベースは1つの接続オブジェクトに関連付けられていますが、複数のデータベースで同じ接続オブジェクトを共有できます。

- OraConnection.ConnectionOK
データベースへの基礎となる接続の状態を戻します。これは、OraDatabase.OraConnection.ConnectionOKを参照することと同じです。

関連項目:

- Connectionプロパティ

- 失われた接続の検出

Connectionsプロパティ

適用対象

OraSessionオブジェクト

説明

指定したセッションのOraConnectionsコレクションを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

Set oraconnections_collection = orasession.Connections

データ型

OLEオブジェクト(OraParameters)

備考

このコレクション内の接続には、添字(順序を示す整数)を使用することでアクセスできます。戻されたコレクションのCountプロパティを使用すると、コレクション内の接続数を取得できます。整数の添字は0で開始し、Count - 1で終了します。範囲外の索引値と無効な名前を指定すると、NULLのOraConnectionオブジェクトが戻ります。

関連項目:

- Countプロパティ

- OraConnectionオブジェクト

- OraConnectionsコレクション

Consumer(OraAQ)プロパティ

適用対象

OraAQオブジェクト

説明

デキュー操作にのみ適用できます。

使用方法

Q.Consumer = consumer_name

データ型

String

備考

値は、コンシューマの名前を表す文字列です。コンシューマ名と一致するメッセージにのみ、アクセスします。

例

Dim DB As OraDatabase
Dim Q as OraAQ
set Q = DB.CreateAQ("Q_MSG_MULTIPLE")
'Dequeue only message meant for ANDY
Q.consumer = "ANDY"
'other processing...
Q.Dequeue

Correlate(OraAQ)プロパティ

適用対象

OraAQオブジェクト

説明

メッセージのデキュー時に検索する識別子を指定します。

使用方法

Q.Correlate = "RELATIVE_MESSAGE_ID"

データ型

String

備考

デキュー操作にのみ適用できます。

Correlation(OraAQMsg)プロパティ

適用対象

OraAQMsgオブジェクト

説明

メッセージの識別子を指定します。特定のメッセージをデキューする手段として使用できます。

使用方法

Msg.Correlation = my_message

データ型

String

備考

エンキューしているメッセージに対してのみ適用できます。128バイトまでの文字列を戻します。

この識別子を使用してデキューする方法は、Correlateを参照してください。

関連項目:
Correlate(OraAQ)プロパティ

Countプロパティ

適用対象

OraConnectionsコレクション

OraFieldsコレクション

OraParametersコレクション

OraSessionsコレクション

OraSubscriptionsコレクション

説明

指定したコレクションに含まれるオブジェクト数を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

connection_count = oraconnections.Count
field_count = orafields.Count
parameter_count = oraparameters.Count
session_count = orasessions.Count
subscriptions_count = OraSubscriptions.Count

データ型

Integer

備考

このプロパティを使用して、指定したコレクションのオブジェクト数を判断します。

例

この例では、Countプロパティを使用して、OraSessions、OraConnectionsおよびOraFieldsコレクションにあるオブジェクト数を表示する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables as OLE Objects.
Dim OraClient As OraClient
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Get the client object.
Set OraClient = OraSession.Client

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

MsgBox "You have " & OraClient.Sessions.Count & " OraSession Object(s)."
MsgBox "You have " & OraSession.Connections.Count & " OraConnection Object(s)."
MsgBox "You have " & OraDynaset.Fields.Count & " OraField Object(s)."

End Sub

関連項目:

- OraConnectionオブジェクト

- OraFieldオブジェクト

Count(OraMetaData)プロパティ

適用対象

OraMetaDataオブジェクト

説明

このコレクションに含まれているOraMDAttributeオブジェクトの数を表す整数を戻します。

使用方法

count = OraMetaData.Count

データ型

Integer

関連項目:
OraMDAttributeオブジェクト

Count(OraObject/Ref)プロパティ

適用対象

OraObjectオブジェクト

OraRefオブジェクト

説明

コレクション内のOraAttributeオブジェクトの数を戻します。これは、OraRefの基礎となる参照可能オブジェクトまたはOraObjectの基礎となる値インスタンスの属性の総数と同じです。実行時は読取り専用です。

使用方法

attrcount = OraRef.Count
attrcount = OraObject.Count

データ型

Integer

備考

添字または属性名を使用すると、個々の属性にアクセスできます。OraObjectまたはOraRef属性の索引は1から開始します。

例

次の例では、Countプロパティの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim Address as OraObject

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from person_tab
set OraDynaset = OraDatabase.CreateDynaset("select * from  person_tab",0&)

'retrieve a address column from person_tab.
'Here Value property of OraField object returns Address OraObject
set Address = OraDynaset.Fields("Addr").Value

'access the attribute by dot notation
msgbox Address.Street

'access the attribute using '!' notation ( early binding application)
msgbox Address!Street

'access the attribute by index
msgbox Address(1)

'access the attribute by name
msgbox Address("Street")

'access all the attributes of Address OraObject in the dynaset
Do Until OraDynaset.EOF
For index = 1 To Address.Count
msgbox Address(index)
Next Index
OraDynaset.MoveNext

Loop

関連項目:
OraAttributeオブジェクト

Databaseプロパティ

適用対象

OraDynasetオブジェクト

OraSQLStmtオブジェクト

説明

指定したダイナセットまたはSQL文オブジェクトに関連付けられているOraDatabaseオブジェクトを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

Set oradatabase = oradynaset.Database
Set oradatabase = orasqlstmt.Database

データ型

OLEオブジェクト(OraDatabase)

備考

OraDynaset.Databaseプロパティは、指定したダイナセットが作成される基礎となったOraDatabaseオブジェクトを戻します。

OraSQLStmt.Databaseプロパティは、指定したSQLStmtオブジェクトが作成される基礎となったOraDatabaseオブジェクトを戻します。

関連項目:

- CreateDynasetメソッド

- OraDatabaseオブジェクト

DatabaseNameプロパティ

適用対象

OraConnectionオブジェクト

OraDatabaseオブジェクト

説明

指定したオブジェクトに関連付けられているデータベース名を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

database_name = oraconnection.DatabaseName
database_name = oradatabase.DatabaseName

データ型

String

備考

- oraconnection.DatabaseName
OpenDatabaseメソッドで指定されたとおりのデータベース名を戻します。

- oradatabase.DatabaseName
接続に関連付けられているデータベース名を戻します。これは、oradatabase.Connection.DatabaseNameを参照することと同じです。

例

この例では、ConnectおよびDatabaseNameプロパティを使用して、接続したユーザー名とデータベースを表示する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Display the username and database to which you have connected.
MsgBox "Connected to " & OraDatabase.Connect & "@" & OraDatabase.DatabaseName

End Sub

関連項目:

- Connectプロパティ

- Connectionプロパティ

- OpenDatabaseメソッド

Databasesプロパティ

適用対象

OraServerオブジェクト

説明

このオブジェクトを使用して確立された全ユーザー・セッションを含むコレクション・インタフェースを戻します。

使用方法

Set myCollection = oraserver.Databases

データ型

OLEオブジェクト(OraCollection)

関連項目:
OraCollectionオブジェクト

Day(OraTimeStamp)プロパティ

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトのDay属性を取得および設定します。

使用方法

day= OraTimeStampObj.Day
OraTimeStampObj.Day= day

引数

引数

説明

[in] day

OraTimeStampオブジェクトのDay属性。

データ型

Integer

Day(OraTimeStampTZ)プロパティ

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトのDay属性を取得または設定します。

使用方法

day= OraTimeStampTZObj.Day
OraTimeStampTZObj.Day= day

引数

引数

説明

[in] day

OraTimeStampTZオブジェクトのDay属性。

データ型

Integer

Daysプロパティ

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトのDays属性を取得および設定します。

使用方法

days = OraIntervalDSObj.Days
OraIntervalDSObj.Days = days

引数

引数

説明

[in] days

OraIntervalDSオブジェクトのDays属性の値を指定するための整数。

データ型

Integer

DbPoolCurrentSizeプロパティ

適用対象

OraSessionオブジェクト

説明

プール内で現在アクティブなデータベース・オブジェクトの数が含まれます。これは読取り専用のプロパティです。

使用方法

curr_size = OraSession.DbPoolCurrentSize

データ型

Integer

備考

プール内のアクティブなデータベース・オブジェクトには、データベースへの有効な接続も含まれます。

DbPoolInitialSizeプロパティ

適用対象

OraSessionオブジェクト

説明

プールの初期サイズが含まれます。これは読取り専用のプロパティです。

使用方法

init_size = OraSession.DbPoolInitialSize

データ型

Integer

DbPoolMaxSizeプロパティ

適用対象

OraSessionオブジェクト

説明

最大プール・サイズが含まれます。これは読取り専用のプロパティです。

使用方法

max_size = OraSession.DbPoolMaxSize

データ型

Integer

Delay(OraAQMsg)プロパティ

適用対象

OraAQMsgオブジェクト

説明

エンキューされたメッセージを遅延させる秒数を指定します。メッセージの即時使用を遅延するには、このプロパティを設定します。

使用方法

Msg.Delay = seconds

データ型

Integer

備考

エンキューされているメッセージに対してのみ適用できます。

このプロパティは、メッセージをデキュー可能になった時点から遅延させる秒数を示します。

次の値を指定できます。

- 有効な正の整数

- ORAAQ_MSG_NO_DELAY
デフォルトは0秒です。メッセージはただちに使用可能になります。

DequeueMode(OraAQ)プロパティ

適用対象

OraAQオブジェクト

説明

デキュー操作に関連するロック動作を指定します。

使用方法

Q.DequeueMode = locking_mode

データ型

Integer

備考

次の値を指定できます。

- ORAAQ_DQ_BROWSE(1)
デキュー時にメッセージをロックしません。

- ORAAQ_DQ_LOCKED(2)
メッセージを読み込み、そのメッセージの書込みロックを取得します。

- ORAAQ_DQ_REMOVE(3)(デフォルト)
メッセージを読み込み、そのメッセージを更新または削除します。

DequeueMsgId(OraAQ)プロパティ

適用対象

OraAQオブジェクト

説明

デキューされるメッセージの識別子を表すRAWバイトの配列を戻します。

使用方法

Q.DequeueMsgid = msg_id

データ型

String

備考

デキュー操作にのみ適用できます。

DirectoryNameプロパティ

適用対象

OraBFILEオブジェクト

説明

ディレクトリの別名を取得または設定します。

使用方法

diralias = OraBFile.DirectoryName
OraBFile.DirectoryName = diralias

引数

引数

説明

[in] [out] diralias

取得または設定するディレクトリ名を指定する文字列。

データ型

String

備考

この文字列は、大/小文字が区別されます。

DynasetOptionプロパティ

適用対象

OraParameterオブジェクト

説明

PL/SQLカーソルから作成したダイナセットのオプションを指定します。

使用方法

oraparameter.DynasetOption = dyn_opts

備考

このプロパティは、カーソル変数を含むPL/SQLプロシージャの実行前にコールする必要があります。デフォルトでは、ダイナセットはORADYN_READONLYオプションで作成されます。

設定できる値は、次のとおりです。

設定可能な値

値

説明

ORADYN_DEFAULT

&H0&

デフォルトの動作を使用します。

ORADYN_NO_BLANKSTRIP

&H2&

データベースから取り出された文字列データから、後続するブランクを削除しません。

ORADYN_NOCACHE

&H8&

ダイナセット用のローカル・データ・キャッシュを作成しません。ローカル・キャッシュがない場合は、ダイナセットの以前の行は使用できません。ただし、データベースからのデータの取出し(移動操作)と行からのデータの取出し(フィールド操作)のパフォーマンスは向上します。ダイナセットの列を順に取り出すアプリケーションでは、パフォーマンスを向上し、リソースの使用を減らすため、このオプションを使用します。

ORADYN_NO_MOVEFIRST

&H40&

ダイナセットの作成時にMoveFirst操作を強制的に実行しません。BOFとEOFは両方ともTRUEです。

関連項目:

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- BOFプロパティ

- EOFプロパティ

EditModeプロパティ

適用対象

OraDynasetオブジェクト

説明

現在の行の編集状態を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

edit_mode = oradynaset.EditMode

データ型

Integer

備考

EditModeプロパティの値は、次のとおりです。

定数

値

説明

ORADATA_EDITNONE

0

編集中ではありません。

ORADATA_EDITMODE

1

既存の行を編集しています。

ORADATA_EDITADD

2

新規レコードを追加中のため、コピー・バッファは現在、データベース内の実際の行を表していません。

これらの値はORACLE_BASE\\ORACLE_HOME\oo4o\oraconst.txtファイルにあり、Visual Basicのconstant.txtファイルの同じ定数に対応するように作成されています。

このプロパティに影響を与えるメソッドは、Edit、AddNewおよびUpdateのみです。

関連項目:

- AddNewメソッド

- Editメソッド

- Updateメソッド

EditOption(OraRef)プロパティ

適用対象

OraRefオブジェクト

説明

PIN操作でオブジェクトをロックするかどうかを指定します。

使用方法

edit_option = OraRef.EditOption
OraRef.EditOption = edit_option

引数

引数

説明

[in] [out] edit_option

編集オプションを表す整数。

データ型

Integer

備考

このプロパティは、Ref値のPIN操作を行う前、つまり、OraRefオブジェクトで属性に初めてアクセスする前にコールしてください。PIN操作の直後にオブジェクトの属性が変更された場合は、このオプションが有効です。PIN操作でオブジェクト・インスタンスをロックすることで、Edit(OraRef)操作全体のデータベースへのラウンドトリップが抑制されます。

edit_optionに指定できる値は、次のとおりです。

定数

値

説明

ORAREF_NO_LOCK

1

データベースのオブジェクトをロックしません(デフォルト)。

ORAREF_EXCLUSIVE_LOCK

2

データベースのオブジェクトを排他ロックします。

ORAREF_NOWAIT_LOCK

3

待機なしオプションで、データベースのオブジェクトを排他ロックします。

例

次の例では、EditOptionプロパティの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim Person as OraRef

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from customers
set OraDynaset = OraDatabase.CreateDynaset("select * from customers", 0&)

'retrieve a aperson column from customers. Here Value property of OraField object

'returns Person OraRef
set Person = OraDynaset.Fields("aperson").Value

'set the ORAREF_EXCLUSIVE_LOCK EditOption on the Person object.
Person.EditOption = ORAREF_EXCLUSIVE_LOCK

'pin the Person Ref. This operation also locks the underlying
'referenceable 'object in the server
MsgBox Person.Name

'call Edit method on Person OraRef.
'This method does not make any network round-trip

Person.Edit
Person.Name = "Eric"
Person.Age = 35
Person.Update

関連項目:
Edit(OraRef)メソッド

ElementTypeプロパティ

適用対象

OraCollectionオブジェクト

説明

要素のサーバー型を表す整数のコードを戻します。このプロパティは、実行時は読取り専用です。

使用方法

elem_type = OraCollection.ElementType

データ型

Integer

備考

コードは、Oracleの外部データ型に対応しています。次に示すOracleの外部データ型がサポートされています。

定数

値

外部データ型

ORATYPE_VARCHAR2

1

VARCHAR2

ORATYPE_NUMBER

2

NUMBER

ORATYPE_SINT

3

SIGNED INTEGER

ORATYPE_FLOAT

4

FLOAT

ORATYPE_VARCHAR

9

VARCHAR

ORATYPE_DATE

12

DATE

ORATYPE_UINT

68

UNSIGNED INTEGER

ORATYPE_CHAR

96

CHAR

ORATYPE_CHARZ

97

NULL文字で終了するCHAR

ORATYPE_BFLOAT

100

BINARY_FLOAT

ORATYPE_BDOUBLE

101

BINARY_DOUBLE

ORATYPE_OBJECT

108

Object

ORATYPE_REF

110

Ref

EOCプロパティ

適用対象

OraCollectionオブジェクト

説明

コレクション・イテレータがコレクションの最後の要素の後に移動した場合はTRUEを戻します。

使用方法

eoc_flag = OraCollection.EOC

データ型

ブール

例

「例: OraCollectionイテレータ」を参照してください。

EOFプロパティ

適用対象

OraDynasetオブジェクト

説明

ダイナセットのカレント・レコードの位置が最後のレコードより後かどうかを示します。設計時には使用できません。実行時は読取り専用です。

使用方法

eof_status = oradynaset.EOF

データ型

Integer(ブール)

備考

MoveNextメソッドを使用してダイナセットの最後のレコードより後に移動しようとした場合はTRUEを戻します。それ以外の場合はFALSEを戻します。

レコードセットが空の場合、BOFとEOFは両方ともTRUEを戻します。

例

この例では、BOFおよびEOFプロパティを使用して、レコードセットの範囲を検出する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the OraDynaset Object
Set OraDynaset = OraDatabase.CreateDynaset("select empno, ename from emp", 0&)

'Traverse until EOF is reached
Do Until OraDynaset.EOF
OraDynaset.MoveNext
Loop
MsgBox "Reached EOF"

'When EOF is True there is no current record. The current recordset
' position is now AFTER the last record
OraDynaset.MoveLast

Do Until OraDynaset.BOF
OraDynaset.MovePrevious
Loop
MsgBox "Reached BOF"

'When BOF is True there is no current record. The current recordset
'position is now BEFORE AFTER the last record.

OraDynaset.MoveFirst

'The recordset is now positioned at the first record.

End Sub

関連項目:

- BOFプロパティ

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

ExceptionQueueプロパティ

適用対象

OraAQMsgオブジェクト

説明

正常に実行できない場合に移動するメッセージのキュー名を指定します。

使用方法

Msg.ExceptionQueue queue_name

データ型

String

備考

エンキューしているメッセージに対してのみ適用できます。

次の値を指定できます。

- 有効なキューの名前を含む文字列

- NULL(デフォルト)

デキューしようとした数がすべて終了している場合、またはデキューしようとした数がDBMS_AQADM.CREATE_QUEUEコマンドに指定されたmax_retriesを超えた場合、メッセージは例外キューに移動します。

Existsプロパティ

適用対象

OraBFILEオブジェクト

説明

OraBFILEがデータベースにあるBFILEを指す場合はTRUEを戻します。

使用方法

exists = OraBFile.Exists

データ型

ブール

備考

このプロパティを使用するには、BFILEが存在するディレクトリに対する読込み権限が必要です。ユーザーがディレクトリを確実に読込み可能であるためには、そのディレクトリに対してオペレーティング・システム固有の許可が必要です。

事前に適切な権限がデータベースに設定されている必要があります。たとえば、Existsプロパティを介してユーザー(scott)がディレクトリ(BfileDirectory)を読み込むには、次のSQL文を実行する必要があります。

GRANT READ ON DIRECTORY BfileDirectory TO scott;

Expiration(OraAQMsg)プロパティ

適用対象

OraAQMsgオブジェクト

説明

メッセージがデキュー可能になる時間を秒数で指定します。

使用方法

Msg.Expiration = seconds

データ型

Integer

備考

このプロパティは遅延からのオフセットです。エンキューしているメッセージに対してのみ適用できます。

次の値を指定できます。

- 整数

- ORAAQ_MSG_NO_XPIRE(0)
デフォルトは0で、メッセージは期限切れになりません。

FetchLimitプロパティ

適用対象

OraDynasetオブジェクト

説明

フェッチの配列サイズを取得または設定します。

使用方法

set Limit = oradynaset.FetchLimit
oradynaset.FetchLimit = Limit

データ型

Integer

FetchSizeプロパティ

適用対象

OraDynasetオブジェクト

説明

フェッチの配列バッファ・サイズを取得または設定します。

使用方法

set Size = oradynaset.FetchSize
oradynaset.FetchSize = Size

データ型

Integer

FieldIndexプロパティ

適用対象

OraDynasetオブジェクト

説明

field_name引数が指しているフィールドの索引を戻します。

使用方法

set index = oradynaset.FieldIndex(field_name)

引数

引数

説明

[in] field_name

ダイナセットが最近使用したSQL文に出現したフィールド名。

データ型

Integer

備考

ダイナセットのフィールドは、名前でアクセスするよりも索引を使用してアクセスしたほうが効率的です。特定のフィールドに複数回アクセスする必要がある場合は、このメソッドを使用して名前を索引に変換します。

関連項目:

- FieldNameプロパティ

- FieldOriginalNameプロパティ

- FieldOriginalNameIndexプロパティ

FieldNameプロパティ

適用対象

OraDynasetオブジェクト

説明

ダイナセット内のSELECT文で使用されるフィールド名を戻します。

使用方法

set field_name = oradynaset.FieldName(index)

引数

引数

説明

[in] index

SQL文で使用されるとおりのフィールド名の索引。

データ型

String

関連項目:

- FieldIndexプロパティ

- FieldOriginalNameプロパティ

- FieldOriginalNameIndexプロパティ

FieldOriginalNameプロパティ

適用対象

OraDynasetオブジェクト

説明

ダイナセット内のSELECT文で使用された元のフィールド名を取得します。

使用方法

set field_name = oradynaset.FieldOriginalName(index)

引数

引数

説明

[in] index

SQL文で使用されたとおりの元のフィールド名のフィールド索引を指定するための整数。

データ型

String

備考

FieldOriginalNameプロパティは、ダイナセット作成時にSQL文に指定した元の列名を含む文字列を戻します。SQL文に、SCHEMA.TABLE.COLのフィールド名が含まれている場合に便利です。これにより、重複した列名を参照できるようになります。列の重複を避けるには、SQL文に別名を指定する方法もあります。

関連項目:

- FieldIndexプロパティ

- FieldNameプロパティ

- FieldOriginalNameIndexプロパティ

FieldOriginalNameIndexプロパティ

適用対象

OraDynasetオブジェクト

説明

SQL SELECT文で使用された元のフィールド名が指しているフィールドの索引を戻します。

使用方法

set index = oradynaset.FieldOriginalNameIndex(name)

引数

引数

説明

[in] name

SQL文で使用されたとおりの元のフィールド名。

データ型

Integer

備考

ダイナセットのフィールドは、名前でアクセスするよりも索引でアクセスしたほうが効率的です。特定のフィールドに複数回アクセスする必要がある場合は、このメソッドを使用して元の名前を索引に変換します。

関連項目:

- FieldIndexプロパティ

- FieldNameプロパティ

- FieldOriginalNameプロパティ

Fieldsプロパティ

適用対象

OraDynasetオブジェクト

説明

現在の行のフィールドのコレクションを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

Set orafields_collection = oradynaset.Fields

データ型

OLEオブジェクト(OraFields)

備考

このコレクションのフィールドには、添字(順序を示す整数)を使用して、またはフィールド(列)名を示す文字列を使用することでアクセスできます。戻されたコレクションのCountプロパティを使用すると、フィールドの数を取得できます。コレクションの範囲(0からCount - 1)外の添字を指定すると、NULLのOraFieldオブジェクトが戻ります。

関連項目:

- Countプロパティ

- OraFieldsコレクション

FileNameプロパティ

適用対象

OraBFILEオブジェクト

説明

ファイル名を取得または設定します。実行時は読取り/書込みができます。

使用方法

filename  = OraBFile.FileName
OraBFile.FileName = filename

引数

引数

説明

[in] [out] filename

取得または設定するディレクトリ名を指定する文字列。

データ型

String

備考

データベースのオペレーティング・システムによっては、この文字列は大/小文字が区別される場合があります。

関連項目:
OraFieldオブジェクト

Filterプロパティ

備考

OraDynasetオブジェクトはこのプロパティをサポートしていません。レコードの選択は、SQL WHERE句またはSQLパラメータを使用して絞込みできます。

関連項目:

- CreateDynasetメソッド

- OraDynasetオブジェクト

- OraFieldsコレクション

- OraParameterオブジェクト

Format(OraNumber)プロパティ

適用対象

OraNumberオブジェクト

説明

OraNumber操作で使用する書式文字列を戻します。書式文字列の詳細は、『Oracle Database SQLクイック・リファレンス』を参照してください。実行時は読取り/書込みができます。

使用方法

OraNumber.Format = formatstring
formatstring = OraNumber.Format

引数

引数

説明

[in] formatstring

OraNumber操作に使用する書式文字列。

データ型

String

備考

書式文字列に無効な値を設定すると、エラーが戻ります。書式をデフォルトにリセットするには、空の文字列を設定します。

関連項目:
『Oracle Database SQLクイック・リファレンス』

Format(OraTimeStamp)プロパティ

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトを文字列として表示するために使用するTIMESTAMP書式を取得または設定します。

使用方法

format = OraTimeStampObj.Format
OraTimeStampObj.Format = format

引数

引数

説明

[in] format

OraTimeStampオブジェクトを文字列として表示するために使用する書式。

データ型

String

備考

FormatプロパティがNULLの場合は、OraTimeStampオブジェクトを文字列として表示する際に、セッションのTIMESTAMP書式が使用されます。

Format(OraTimeStampTZ)プロパティ

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトを文字列として表示するために使用するTIMESTAMP WITH TIME ZONE書式を取得または設定します。

使用方法

format = OraTimeStampTZObj.Format
OraTimeStampTZObj.Format = format

引数

引数

説明

[in] format

OraTimeStampTZオブジェクトを文字列として表示するために使用する書式。

データ型

String

備考

FormatプロパティがNULLの場合は、OraTimeStampTZオブジェクトを文字列として表示する際に、セッションのTIMESTAMP WITH TIME ZONE書式が使用されます。

HexValue(OraRef)プロパティ

適用対象

OraRefオブジェクト

説明

REFの16進値を戻します。

使用方法

hexstring = OraRef.HexValue

備考

REFの16進値は、OraDatabase.FetchOraRefメソッドで使用されます。

関連項目:
FetchOraRefメソッド

Hour(OraTimeStamp)プロパティ

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトのHour属性を取得または設定します。

使用方法

hour = OraTimeStampObj.Hour
OraTimeStampObj.Hour = hour

引数

引数

説明

[in] hour

OraTimeStampオブジェクトのHour属性。

データ型

Integer

Hour(OraTimeStampTZ)プロパティ

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトのHour属性を取得または設定します。

使用方法

hour = OraTimeStampTZObj.Hour
OraTimeStampTZObj.Hour = hour

引数

引数

説明

[in] hour

OraTimeStampTZオブジェクトのHour属性。

データ型

Integer

Hoursプロパティ

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトのHours属性を取得および設定します。

使用方法

hours = OraIntervalDSObj.Hours
OraIntervalDSObj.Hours = hours

引数

引数

説明

[in] hours

OraIntervalDSオブジェクトのHours属性の値を指定するための整数。

データ型

Integer

IsLocator(OraCollection)プロパティ

適用対象

OraCollectionオブジェクト

説明

OraCollectionオブジェクトのコレクション・インスタンスがロケータ・ベースの場合はTRUEを戻します。それ以外の場合はFALSEを戻します。

使用方法

islocator = OraCollection.IsLocator

データ型

Integer(ブール)

IsMDObjectプロパティ

適用対象

OraMDAttributeオブジェクト

説明

Valueプロパティが別のOraMetaDataオブジェクトの場合はTRUEを戻します。それ以外の場合はFALSEを戻します。

使用方法

isobject = OraMDAttribute.IsMDObject

データ型

ブール

IsNull(OraCollection)プロパティ

適用対象

OraCollectionオブジェクト

説明

OraCollectionオブジェクトのコレクション値がNULLの場合はTRUEを戻します。

使用方法

isnull = OraObject.IsNull

データ型

Integer(ブール)

備考

NULLのコレクション要素にアクセスすると、エラーになります。基礎となるコレクションの要素にアクセスする前に、IsNullプロパティをチェックしてください。

IsNull(OraLOB/BFILE)プロパティ

適用対象

OraBLOB、OraCLOBオブジェクト

OraBFILEオブジェクト

説明

データベース内のLOBまたはBFILEがNULL値を参照するとTRUE、それ以外の場合はFALSEを戻します。このプロパティは読取り専用です。

使用方法

IsNull = OraBfile.IsNull
IsNull = OraBlob.IsNull
IsNull = OraClob.IsNull

データ型

ブール

備考

LOBまたはBFILEの一部のプロパティとメソッドは、LOBまたはBFILEがNULLの場合は無効です。このプロパティを使用して、NULL値かどうかを検証してエラーを回避します。

IsNull(OraObject)プロパティ

適用対象

OraObjectオブジェクト

説明

OraObjectオブジェクトの基礎となる値インスタンスがNULLの場合はTRUEを戻します。実行時は読取り専用です。

使用方法

isnull = OraObject.IsNull

データ型

Integer(ブール)

備考

値インスタンスがNULLの属性にアクセスすると、エラーになります。基礎となる値インスタンスの属性にアクセスする前に、IsNullプロパティをチェックできます。

例

次の例では、IsNullプロパティの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim Address as OraObject
Dim AddressClone as OraObject

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from person_tab
set OraDynaset = OraDatabase.CreateDynaset("select * from person_tab", 0&)

' insert a Null Address value instance in the table
OraDynaset.AddNew
OraDynaset.Fields("Name").value = "Eric"
OraDynaset.Fields("Addr").Value  = Null
OraDynaset.update

'move to the newly added value instance
OraDynaset.MoveLast

'retrieve a address column from person_tab. This Address object points to Null
' value instance
set Address = OraDynaset.Fields("Addr").Value

'try to access attributes of Address. the following line will result an error
msgbox Address.Street    '---------ERROR------------'

'use the IsNull property to check the nullstatus
If Address.IsNull = False Then
MsgBox Address!Street
End if

IsOpen(OraBFILE)プロパティ

適用対象

OraBFILEオブジェクト

説明

OraBFILEオブジェクトがオープンしている場合はTRUEを戻します。

使用方法

IsOpen = OraBFile.IsOpen

データ型

ブール

備考

オブジェクトOraBFILEがオープンしているかどうかは、そのOraBFILEオブジェクトに対してローカルです。データベース内の同じBFILEを指す2つのOraBFILEオブジェクトがあり、一方のOraBFILEオブジェクトはOpenメソッドをコールしていて他方はコールしていない場合、コールしたOraBFILEオブジェクトのIsOpenプロパティはTRUEを戻します。他方はFALSEを戻します。

関連項目:
Open(OraBFILE)メソッド

IsRefNull(OraRef)プロパティ

適用対象

OraRefオブジェクト

説明

OraRefオブジェクトの基礎となるRef値がNULLの場合はTRUEを戻します。

使用方法

isnull = OraRef.IsRefNull

データ型

Integer(ブール)

備考

Ref値がNULLの属性にアクセスすると、エラーになります。基礎となる参照可能オブジェクトの属性にアクセスする前に、IsRefNullプロパティをチェックしてください。このプロパティは、実行時は読取り専用です。

LastErrorTextプロパティ

適用対象

OraParamArrayオブジェクト

説明

最後のエラー・メッセージを取得します。設計時には使用できません。実行時は読取り専用です。

使用方法

OraParamArray.LastErrorText

データ型

String

LastModifiedプロパティ

適用対象

OraDynasetオブジェクト

説明

EditまたはAddNew操作によって最後に変更された行のBookmarkオブジェクトをを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

last_modified_bookmark = oradynaset.LastModified

データ型

値はバイナリ・データの文字列ですが、StringまたはVariantデータ型の変数に格納できます。文字列の長さは予測できないため、固定長の文字列は使用しないでください。

備考

このプロパティを使用して、最後に変更されたレコードをカレント・レコードにします。

関連項目:

- AddNewメソッド

- Bookmarkプロパティ

- Editメソッド

LastServerErrプロパティ

適用対象

OraDatabaseオブジェクト

OraSessionオブジェクト

説明

指定したオブジェクトに対してOracle Databaseファンクションによって生成された、ゼロ以外の最後のエラー・コードを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

error_number = oradatabase.LastServerErr
error_number = orasession.LastServerErr

データ型

Long Integer

備考

このプロパティは、Oracle Call Interface(OCI)データベース・ファンクションからのゼロ以外の最後の戻り値を表し、最後のLastServerErrReset要求以降エラーが発生していない場合はゼロになります。効率化のためにゼロ以外の戻り値のみが戻されるため、ゼロ以外の値であっても、必ずしも、直近にコールされたOCIデータベース・ファンションでエラーが発生したというわけではありません(戻り値ゼロはLastServerErrメソッドによって戻されないため)。

- Orasession.LastServerErr
OpenDatabase、BeginTrans、CommitTrans、RollbackおよびResetTransメソッドでのエラーなど、接続に関連するすべてのエラーを戻します。

- Oradatabase.LastServerErr
ダイナセットやExecuteSQLメソッドでのエラーなど、Oracleカーソルに関連するすべてのエラーを戻します。

例

この例では、LastServerErrおよびLastServerErrTextプロパティを使用して、CreateDynasetメソッドの使用時にOracleエラーが発生したかどうかを判断し、各エラー・メッセージを表示する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables as OLE Objects.
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Set up an error handler.
On Error GoTo errhandler

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Attempt to Create the OraDynaset Object.
'Notice that the FROM keyword is missing from the SQL statement.
Set OraDynaset = OraDatabase.CreateDynaset("select * emp", 0&)

Exit Sub

errhandler:

'Check to see if an Oracle error has occurred.
If OraDatabase.LastServerErr <> 0 Then
MsgBox OraDatabase.LastServerErrText
Else 'Must be some non-Oracle error
MsgBox "VB:" & Err & " " & Error(Err)
End If

Exit Sub

End Sub

関連項目:

- ExecuteSQLメソッド

- LastServerErrResetメソッド

- LastServerErrTextプロパティ

- OpenDatabaseメソッド

- BeginTransメソッド

- CommitTransメソッド

- Rollbackメソッド

- ResetTransメソッド

LastServerErrPosプロパティ

適用対象

OraDatabaseオブジェクト

説明

SQL文で解析エラーが発生した位置を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

error_pos = oradatabase.LastServerErrPos

データ型

Integer

備考

LastServerErrPosプロパティは、SQL文が解析されていない場合は0、最後の解析が正常に終了した場合は-1、最後の解析が失敗した場合は0以上を戻します。実行(CreateDynasetまたはExecuteSQLメソッドを使用)する前にSQL文が解析されます。

関連項目:

- CreateDynasetメソッド

- ExecuteSQLメソッド

- LastServerErrプロパティ

- LastServerErrTextプロパティ

LastServerErrTextプロパティ

適用対象

OraDatabaseオブジェクト

OraSessionオブジェクト

説明

指定したオブジェクトの現在のLastServerErrプロパティに関連付けられているテキスト形式のメッセージを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

error_text = orasession.LastServerErrText
error_text = oradatabase.LastServerErrText

データ型

String

備考

戻り値は、次の3つの状態のいずれか1つを示します。

1. NULLの場合は、Oracle Call Interface(OCI)データベース・ファンクションが、最新のLastServerErrResetプロパティ以降エラーを戻していないことを示します。

2. NULL以外の値は、OCIファンクションがエラー・コードを戻したことを示します。戻された文字列は関連メッセージです。

3. メッセージが空の場合は、追加情報がないことを示します。

例

この例では、LastServerErrおよびLastServerErrTextプロパティを使用して、CreateDynasetメソッドの使用時にOracleエラーが発生したかどうかを判断し、エラー・メッセージを表示する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables as OLE Objects.
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Set up an error handler.
On Error GoTo errhandler

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Attempt to Create the OraDynaset Object.
'Notice that the FROM keyword is missing from the SQL statement.
Set OraDynaset = OraDatabase.CreateDynaset("select * emp", 0&)

Exit Sub

errhandler:

'Check to see if an Oracle error has occurred.
If OraDatabase.LastServerErr <> 0 Then
MsgBox OraDatabase.LastServerErrText
Else 'Must be some non-Oracle error.
MsgBox "VB:" & Err & " " & Error(Err)
End If

Exit Sub

End Sub

関連項目:

- LastServerErrプロパティ

- LastServerErrResetメソッド

- CreateDynasetメソッド

MaxSize(OraCollection)プロパティ

適用対象

OraCollectionオブジェクト

説明

コレクションの最大サイズを戻します。

使用方法

max_size  = OraCollection.MaxSize

データ型

Integer

備考

ORATYPE_TABLE型のOraCollectionオブジェクトの場合、このプロパティは削除した要素を含んだコレクションの現在のサイズを戻します。ORATYPE_VARRAY型のOraCollectionオブジェクトの場合、このプロパティはコレクションの最大サイズを戻します。

MinimumSizeプロパティ

適用対象

OraParameterオブジェクト

OraParamArrayオブジェクト

説明

OraParameterまたはOraParamArray文字列バッファ、またはByteArray(ORATYPE_RAW_BINの場合)の最小サイズを戻します。OraParamArrayオブジェクトの場合、MinimumSizeプロパティは実行時に読取り専用です。OraParameterオブジェクトの場合、MinimumSizeプロパティは実行時に読取り/書込みができます。

使用方法

oraparameter.MinimumSize
oraparamarray.MinimumSize

データ型

Integer

備考

このプロパティを使用して、配列の各要素に割り当てる最小文字数またはバイト数を取得します。OraParamArrayオブジェクトの場合、サイズはAddTableメソッドを使用して指定されます。

例

注意: この例では、EmployeeLong.GetEmpNameと呼ばれるPL/SQLプロシージャを実行する必要があります。このプロシージャは、列名ENAME_LONGを備えた表を使用して、約200文字の長いenameを戻します。

Sub Form_Load ()

' Declare variables as OLE Objects.
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

' Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

' Create the OraDatabase Object.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

' Add EMPNO as an Input/Output parameter and set its initial value.
OraDatabase.Parameters.Add "EMPNO", 9999, ORAPARM_INPUT

' Add ENAME as an Output parameter and set its initial value.
OraDatabase.Parameters.Add "ENAME_LONG", "foo", ORAPARM_OUTPUT
OraDatabase.Parameters("ENAME_LONG").MinimumSize = 201
'Since we require to hold a value of more than 128 bytes

' Execute the Stored Procedure Employee.GetEmpName to retrieve ENAME_LONG.
OraDatabase.ExecuteSQL ("Begin EmployeeLong.GetEmpName (:EMPNO," & _
"NAME_LONG); end;")

関連項目:

- Addメソッド

- AddTableメソッド

- ExecuteSQLメソッド

Minute(OraTimeStamp)プロパティ

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトのMinute属性を取得または設定します。

使用方法

minute = OraTimeStampObj.Minute
OraTimeStampObj.Minute = minute

引数

引数

説明

[in] minute

OraTimeStampオブジェクトのMinute属性。

データ型

Integer

Minute(OraTimeStampTZ)プロパティ

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトのMinute属性を取得または設定します。

使用方法

minute = OraTimeStampTZObj.Minute
OraTimeStampTZObj.Minute = minute

引数

引数

説明

[in] minute

OraTimeStampTZオブジェクトのMinute属性。

データ型

Integer

Minutesプロパティ

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトのMinutes属性を取得および設定します。

使用方法

minutes = OraIntervalDSObj.Minutes
OraIntervalDSObj.Minutes = minutes

引数

引数

説明

[in] minutes

OraIntervalDSオブジェクトのMinutes属性の値を指定するための整数。

データ型

Integer

Month(OraTimeStamp)プロパティ

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトのMonth属性を取得または設定します。

使用方法

month = OraTimeStampObj.Month
OraTimeStampObj.Month = month

引数

引数

説明

[in] month

OraTimeStampオブジェクトのMonth属性。

データ型

Integer

Month(OraTimeStampTZ)プロパティ

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトのMonth属性を取得または設定します。

使用方法

month = OraTimeStampTZObj.Month
OraTimeStampTZObj.Month = month

引数

引数

説明

[in] month

OraTimeStampTZオブジェクトのMonth属性。

データ型

Integer

Monthsプロパティ

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalYMオブジェクトのMonths属性を取得および設定します。

使用方法

months = OraIntervalYMObj.Months
OraIntervalYMObj.Months = months

引数

引数

説明

[in] month

OraIntervalYMオブジェクトのMonths属性の値を指定するための整数。

データ型

Integer

Nameプロパティ

適用対象

OraClientオブジェクト

OraFieldオブジェクト

OraParameterオブジェクト

OraSessionオブジェクト

OraParamArrayオブジェクト

OraServerオブジェクト

OraSubscriptionオブジェクト

説明

指定したオブジェクトの識別に使用される名前を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

client_name = oraclient.Name
field_name = orafield.Name
parameter_name = oraparameter.Name
paramarray_name = oraparamarray.Name
session_name = orasession.Name
server_name = oraserver.Name
subscription_name = orasubscription.Name

データ型

String

備考

- oraclient.Name
指定したOraClientオブジェクトの名前を戻します。この値は常にlocalです。

- orafield.Name
指定したOraFieldオブジェクトの名前を戻します。これが本当の(別名でない)データベース・フィールドの場合は、データベースで使用されるとおりのフィールド名が戻ります。たとえば、計算済の選択リスト項目や列の別名を指定したSQL文が実行された場合、戻される名前は、SQLのSELECT文に指定した実際のテキストです。

- oraparameter.Name
指定したOraParameterオブジェクトの名前を戻します。パラメータ名は、パラメータ・コレクション内でパラメータを識別するのみではなく、パラメータをバインドする目的でSQL文およびPL/SQL文のプレースホルダを一致させるためにも使用されます。

- oraparamarray.Name
指定したOraParamArrayオブジェクトの名前を戻します。パラメータ名は、パラメータ・コレクション内でパラメータを識別するのみではなく、パラメータをバインドする目的でSQL文およびPL/SQL文のプレースホルダを一致させるためにも使用されます。

- orasession.Name
指定したOraSessionオブジェクトの名前を戻します。自動的に作成されたセッションの場合は、システムによって割り当てられた名前(通常は16進数)が戻ります。ユーザーが作成したセッションの場合は、CreateSessionメソッドに当初指定された名前が戻ります。作成後にセッション名を変更することはできません。

- oraserver.Name
指定したOraServerオブジェクトの物理的な接続名を戻します。

- orasubscription.Name
サブスクリプションを表すために使用する名前を戻します。Nameは、シングル・コンシューマ・キューに対する登録の場合は文字列'SCHEMA.QUEUE'の形式、複数コンシューマ・キューに対する登録の場合は文字列'SCHEMA.QUEUE:CONSUMER_NAME'の形式のサブスクリプション名です。

関連項目:

- CreateSessionメソッド

- Oracle Databaseのイベントの詳細は、『Oracle Database概要』を参照してください。

Name(AQAgent)プロパティ

適用対象

OraAQAgentオブジェクト

説明

エージェント名を表す30バイトの文字列を戻します。

使用方法

agent_name = qMsg.AQAgent.Name

データ型

String

Name(OraAttribute)プロパティ

適用対象

OraAttributeオブジェクト

説明

属性の名前を含む文字列を戻します。

使用方法

name  = OraAttribute.Name

データ型

String

備考

実行時は読取り専用です。

関連項目:
OraAttributeオブジェクト

Name(OraMDAttribute)プロパティ

適用対象

OraMDAttributeオブジェクト

説明

属性の名前を含む文字列を戻します。

使用方法

name = OraMDAttribute.Name

データ型

String

Nanosecond(OraTimeStamp)プロパティ

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトのNanosecond属性を取得または設定します。

使用方法

nanosecond = OraTimeStampObj.NanosecondOraTimeStampObj.Nanosecond= nanosecond

引数

引数

説明

[in] nanosecond

OraTimeStampオブジェクトのNanosecond属性。

データ型

Integer

Nanonsecond(OraTimeStampTZ)プロパティ

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトのNanosecond属性を取得または設定します。

使用方法

nanosecond = OraTimeStampTZObj.NanosecondOraTimeStampTZObj.Nanosecond= nanosecond

引数

引数

説明

[in] nanosecond

OraTimeStampTZオブジェクトのNanosecond属性。

データ型

Integer

Nanonsecondsプロパティ

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalDSオブジェクトのNanoseconds属性を取得および設定します。

使用方法

nanoseconds = OraIntervalDSObj.NanosecondsOraIntervalDSObj.Nanoseconds = nanoseconds

引数

引数

説明

[in] nanoseconds

OraIntervalDSオブジェクトのNanoseconds属性の値を指定するための整数。

データ型

Integer

Navigation(OraAQ)プロパティ

適用対象

OraAQオブジェクト

説明

取り出されるメッセージの位置を指定します。

使用方法

Q.Navigation = position

データ型

Integer

備考

次の値を指定できます。

- ORAAQ_DQ_FIRST_MSG(1)
検索条件に一致した使用可能な最初のメッセージを取り出します。

- ORAAQ_DQ_NEXT_TRANS(2)
現行のトランザクションの残りをスキップし(残りがある場合)、次のトランザクション・グループの最初のメッセージを取り出します。キューに対するメッセージのグループ化が可能な場合のみ使用できます。

- ORAAQ_DQ_NEXT_MSG(3)(デフォルト)
検索条件に一致した使用可能な次のメッセージを取り出します。

NoMatchプロパティ

適用対象

Address(OraAQAgent)プロパティを使用するOraDynasetオブジェクト

説明

FindFirst、FindLast、FindNextまたはFindPreviousメソッドへの最後のコールが失敗した場合はTRUEを戻します。

使用方法

Set nomatch_status = oradynaset.NoMatch

データ型

ブール

関連項目:
FindFirst、FindLast、FindNextおよびFindPreviousメソッド

NonBlockingStateプロパティ

適用対象

ORASQL_NONBLKオプションを使用して作成された「OraSQLStmtオブジェクト」

説明

現在実行しているSQLの状態を戻します。状態は次のとおりです。

- ORASQL_STILL_EXECUTING
これは操作が進行中の場合に戻ります。

- ORASQL_SUCCESS
これは操作が正常に完了した場合に戻ります。

エラーは、例外として発生します。

SQL文の実行が正常に完了した後、アプリケーションは、ブロック操作の場合と同様に出力パラメータにアクセスできます(出力パラメータがある場合)。

使用方法

status = OraSQL.NonBlockingState
if status = ORASQL_STILL_EXECUTING
MsgBox "Still in execution"
else
MsgBox "Execution completed successfully"

戻り値

ORASQL_STILL_EXECUTING(-3123) or ORASQL_SUCCESS(0)

エラーは、例外として発生します。

関連項目:

- CreateSQLメソッド

- 非同期処理

Offset(OraLOB/BFILE)プロパティ

適用対象

OraBLOB、OraCLOBオブジェクト

OraBFILEオブジェクト

説明

次回のReadまたはWrite操作ために、LOBまたはBFILEに1を基準とするオフセットを取得または設定します。このプロパティは、実行時に読取り/書込みができます。

使用方法

offsetbytes = OraBFile.Offset
OraBFile.Offset = offsetbytes

offsetbytes = OraBlob.Offset
OraBlob.Offset = offsetbytes

offsetchars = OraClob.Offset
OraClob.Offset = offsetchars

データ型

Integer

備考

この値は、OraBLOBおよびOraBFILEオブジェクトの場合はバイト数、OraCLOBオブジェクトの場合は文字数で表されます。デフォルト値は1です。この値を0に設定するとエラーになります。PollingAmountプロパティが0でない(ポーリング可能な)場合は、最初のReadまたはWrite操作の前、または現在のポーリング操作が完了した後にのみ、Offsetプロパティを設定できます。

関連項目:
PollingAmountプロパティ

OIPVersionNumberプロパティ

適用対象

OraSessionオブジェクト

説明

Oracle Object for OLEのバージョン番号を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

version_number = orasession.OIPVersionNumber

データ型

String

備考

このプロパティは、Oracle Object for OLEの各リリースに対して一意の識別子を戻します。

Optionsプロパティ

適用対象

OraDatabaseオブジェクト

OraDynasetオブジェクト

OraSQLStmtオブジェクト

説明

指定したオブジェクトに初めに渡されたオプション・フラグを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

options = oradatabase.Options
options = oradynaset.Options
options = orasqlstmt.Options

データ型

Long Integer

備考

oradatabase.Optionsに指定できる値については、OpenDatabaseメソッドを参照してください。

oradynaset.Optionsに指定できる値については、CreateDynasetメソッドを参照してください。

orasqlstmt.Optionsに指定できる値については、CreateSQLメソッドを参照してください。

関連項目:

- CreateDynasetメソッド

- CreateSQLメソッド

- OpenDatabaseメソッド

OraIDataTypeプロパティ

適用対象

OraFieldオブジェクト

説明

指定したフィールドにおけるOracleの内部データ型のコードを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

field_idatatype = orafield.OraIDataType

データ型

Long Integer

備考

次に示すOracleの内部データ型が戻ります。

定数

値

内部データ型

ORATYPE_VARCHAR2

1

VARCHAR2

ORATYPE_NUMBER

2

NUMBER

ORATYPE_LONG

8

LONG

ORATYPE_DATE

12

DATE

ORATYPE_RAW

23

RAW

ORATYPE_LONGRAW

24

LONG RAW

ORATYPE_CHAR

96

CHAR

ORATYPE_BFLOAT

100

BINARY_FLOAT

ORATYPE_BDOUBLE

101

BINARY_DOUBLE

ORATYPE_MLSLABEL

105

MLSLABEL

ORATYPE_OBJECT

108

OBJECT

ORATYPE_REF

110

REF

ORATYPE_CLOB

112

CLOB

ORATYPE_BLOB

113

BLOB

ORATYPE_BFILE

114

BFILE

ORATYPE_TIMESTAMP

187

TIMESTAMP

ORATYPE_TIMESTAMPTZ

188

TIMESTAMPWITHTIMEZONE

ORATYPE_INTERVALYM

189

INTERVAL YEAR TO MONTH

ORATYPE_INTERVALDS

190

INTERVAL DAY TO SECOND

ORATYPE_TIMESTAMPLTZ

232

TIMESTAMPWITHLOCALTIMEZONE

ORATYPE_VARRAY

247

VARRAY

ORATYPE_TABLE

248

NESTED TABLE

これらの値は、ORACLE_BASE\\ORACLE_HOME\oo4o\oraconst.txtファイルにあります。

関連項目:

- OraMaxDSizeプロパティ

- OraMaxSizeプロパティ

- OraNullOKプロパティ

- OraPrecisionプロパティ

- OraScaleプロパティ

OraMaxDSizeプロパティ

適用対象

OraFieldオブジェクト

説明

指定したフィールドにおけるOracleの最大表示サイズを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

field_maxdisplaysize = orafield.OraMaxDSize

データ型

Long Integer

備考

この値は、戻り値が文字列の場合にのみ意味があります。特に、SUBSTRやTO_CHARなどのファンクションを使用して列の表現を変更する場合などです。

関連項目:

- OraIDataTypeプロパティ

- OraMaxSizeプロパティ

- OraNullOKプロパティ

- OraPrecisionプロパティ

- OraScaleプロパティ

OraMaxSizeプロパティ

適用対象

OraFieldオブジェクト

説明

Oracleデータ・ディクショナリに格納されているOracleの列の最大サイズを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

field_maxsize = orafield.OraMaxSize

データ型

Long Integer

備考

戻り値は、Oracleの内部データ型によって異なります。次の値が戻ります。

Oracleの列の型

値

CHAR、VARCHAR2、RAW

表の列の長さ

NUMBER

22 (内部的な長さ)

DATE

7 (内部的な長さ)

LONG、LONG RAW

0

ROWID

システムに依存

内部データ型1を戻すファンクション(TO_CHAR()など)

orafield.MaxDSizeと同じ

関連項目:

- OraIDataTypeプロパティ

- OraMaxDSizeプロパティ

- OraNullOKプロパティ

- OraPrecisionプロパティ

- OraScaleプロパティ

OraNullOKプロパティ

適用対象

OraFieldオブジェクト

説明

その列でNULL値が許可されているかどうかを示します。設計時には使用できません。実行時は読取り専用です。

使用方法

field_nullok = orafield.OraNullOK

データ型

Integer(ブール)

備考

NULL値を使用できる場合はTRUE、それ以外の場合はFALSEを戻します。

関連項目:

- OraIDataTypeプロパティ

- OraMaxDSizeプロパティ

- OraMaxSizeプロパティ

- OraPrecisionプロパティ

- OraScaleプロパティ

OraPrecisionプロパティ

適用対象

OraFieldオブジェクト

説明

数値列の精度を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

field_precision = orafield.OraPrecision

データ型

Long Integer

備考

この値は、戻り値が数値の場合にのみ意味があります。精度は、数値の桁数です。

関連項目:

- OraIDataTypeプロパティ

- OraMaxDSizeプロパティ

- OraMaxSizeプロパティ

- OraNullOKプロパティ

- OraScaleプロパティ

OraScaleプロパティ

適用対象

OraFieldオブジェクト

説明

数値列のスケールを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

field_scale = orafield.OraScale

データ型

Long Integer

備考

この値は、戻り値が数値の場合にのみ意味があります。SQLのREAL、DOUBLE PRECISION、FLOATおよびFLOAT(N)型では、-127の位取りが戻ります。

関連項目:

- OraIDataTypeプロパティ

- OraMaxDSizeプロパティ

- OraMaxSizeプロパティ

- OraNullOKプロパティ

- OraPrecisionプロパティ

Parametersプロパティ

適用対象

OraDatabaseオブジェクト

説明

指定したデータベースのOraParametersコレクションを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

Set oraparameters_collection = oradatabase.Parameters

データ型

OLEオブジェクト(OraParameters)

備考

このコレクションのパラメータにアクセスするには、添字(順序を示す整数)を使用するか、またはそのパラメータの作成時に指定したパラメータ名を使用します。戻されたコレクションのCountプロパティを使用すると、コレクション内のパラメータ数を取得できます。整数の添字は0で開始し、Count-1で終了します。範囲外の索引値と無効な名前を指定すると、NULLのOraParameterオブジェクトが戻ります。

コレクションでは、パラメータへアクセスできるほか、Addメソッドを使用してパラメータを作成したり、Removeメソッドを使用して破棄することができます。

関連項目:

- Addメソッド

- Countプロパティ

- OraParameterオブジェクト

- OraParametersコレクション

- Removeメソッド

PinOption(OraRef)プロパティ

適用対象

OraRefオブジェクト

説明

PIN操作での参照可能オブジェクトに対するPinオプションを取得および設定します。

使用方法

pin_option = OraRef.PinOptionOraRef.PinOption = pin_option

引数

引数

説明

[in] PinOption

Pinオプションを表す整数。

データ型

Integer(ブール)

備考

pin_optionプロパティの戻り値は、次のとおりです。

定数

値

説明

ORAREF_READ_ANY

3

オブジェクトがすでにオブジェクト・キャッシュにある場合はキャッシュから戻し、それ以外の場合はデータベースから取り出します(デフォルト)。

ORAREF_READ_RECENT

4

トランザクション中にオブジェクトがキャッシュに取り出される場合は、キャッシュから戻します。それ以外の場合はデータベースからオブジェクトを取り出します。

ORAREF_READ_LATEST

5

常にデータベースから最新の値を取り出します。

例

次の例では、PinOptionプロパティの使用方法を示します。サンプル・コードを実行する前に、必要なデータ型と表がデータベース内にあることを確認してください。「OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト」を参照してください。

Dim OraSession as OraSession
Dim OraDatabase as OraDatabase
Dim OraDynaset as OraDynaset
Dim Person as OraRef

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'create a dynaset object from customers
set OraDynaset = OraDatabase.CreateDynaset("select * from customers",  0&)

'retrieve a aperson column from customers. Here Value
'property of OraField object returns Person OraRef
set Person = OraDynaset.Fields("aperson").Value

'set the ORAREF_READ_LATEST read option on the Person object.
Person.PinOption = ORAREF_READ_LATEST

'pin the Person Ref and get the latest copy of referenceable
'object for Ref from the database
MsgBox Person.Name
MsgBox Person.Age

PollingAmountプロパティ

適用対象

OraBLOB、OraCLOBオブジェクト

OraBFILEオブジェクト

説明

ReadおよびWrite操作を複数回に分けて行う場合(ポーリング)の読取り量または書込み量の合計を取得または設定します。0(ゼロ)の値は、ポーリングが使用されないことを意味します。このプロパティは、実行時に読取り/書込みができます。

使用方法

pollamountbytes = OraBFile.PollingAmount
OraBfile.PollingAmount = pollamountbytes

pollamountbytes = OraBlob.PollingAmount
OraBlob.PollingAmount = pollamountbytes

pollamountchars= OraClob.PollingAmount
OraClob.PollingAmount = pollamountchars

データ型

Integer

備考

この値は、OraBLOBおよびOraBFILEオブジェクトの場合はバイト数、OraCLOBオブジェクトの場合は文字数で表されます。複数回の読取りまたは書込み操作を開始する前に、これを設定します。これを設定した後は、LOBのStatusプロパティによってORALOB_NEED_DATAが戻されなくなる(PollingAmountに設定されたバイト数または文字数がすべて処理される)まで、一連のReadまたはWrite操作を発行する必要があります。ポーリング操作の途中で別のLOB操作を実行しようとすると、エラーになります。

Priority(OraAQMsg)プロパティ

適用対象

OraAQMsgオブジェクト

説明

メッセージの優先順位を指定します。

使用方法

Msg.Priority = msg_priority

データ型

Integer

備考

番号が小さいほど、優先順位は高くなります。

次の値を指定できます。

- 整数(負数も可)

- ORAAQ_NORMAL(デフォルト): 0

- ORAAQ_HIGH: -10

- ORAAQ_LOW: 10

このプロパティは、エンキューしているときに設定でき、優先順位に基づいてデキューするために使用されます。

RDMSVersionプロパティ

適用対象

OraDatabaseオブジェクト

説明

データベースのバージョンを戻します。

使用方法

Set Version = oradatabase.RDBMSVersion

データ型

String

RecordCountプロパティ

適用対象

OraDynasetオブジェクト

OraSQLStmtオブジェクト

説明

- OraDynaset
ダイナセット内のレコードの総数を戻します。

- OraSQLStmt
INSERT、UPDATEまたはDELETE文で処理されたレコード数を戻します。SQL文の実行でエラーが発生した場合にも処理されたレコード数が戻ります。

設計時には使用できません。実行時は読取り専用です。

使用方法

record_count = oradynaset.RecordCountrecord_count = orasqlstmt.RecordCount

データ型

Long Integer

備考

このプロパティを参照するときは、レコード数を判断するために、Oracleデータベースから結果表全体をただちにフェッチする必要があります。この処理はパフォーマンスに深刻な影響を与える可能性があるため、このプロパティを使用せず、かわりにCOUNT(*)句を使用して別の問合せを実行し、時間的な整合性が保証されているSnapshotIDプロパティを使用してください。使用例は、SnapShotプロパティを参照してください。

CreateDynasetメソッドのORADYN_NOCACHEオプションを使用して、このプロパティを参照すると、暗黙的なMoveLast操作が発生し、カレント・レコードがダイナセットの最終レコードになります。

例

RecordCountの例(OraDynaset)

この例では、RecordCountプロパティを使用して、SELECT文およびOraDynasetを介して取得したレコード数を判断する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables as OLE Objects.
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the dynaset.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

'Display the number of records. Note that this causes
'all records to be fetched to ensure an accurate count.

MsgBox OraDynaset.RecordCount & " records retrieved."

End Sub

RecordCountの例(OraSQLStmt)

次の例では、INSERT文およびOraSQLStmtを使用した後に、データベースに挿入されたレコード数を表示する方法を示します。

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim OraSqlStmt As OraSQLStmt
Dim OraPArray1 As OraParamArray
Dim OraPArray2 As OraParamArray
Dim I As Integer

On Error GoTo ERR_array_sql

'Test case for inserting/updating/deleting multiple rows using parameter arrays
'with SQL statements
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("exampledb", "scott/tiger", 0&)

'Create table
OraDatabase.ExecuteSQL ("create table part_nos(partno number, description" & _
"char(50), primary key(partno))")

OraDatabase.Parameters.AddTable "PARTNO", ORAPARM_INPUT, ORATYPE_NUMBER, 10, 22
OraDatabase.Parameters.AddTable "DESCRIPTION", ORAPARM_INPUT, ORATYPE_CHAR, _
10, 50
If OraDatabase.LastServerErr <> 0 Or OraDatabase.LastServerErrText <> "" Then
MsgBox "Error"
End If

Set OraPArray1 = OraDatabase.Parameters("PARTNO")
Set OraPArray2 = OraDatabase.Parameters("DESCRIPTION")

'Initialize arrays
For I = 0 To 9
achar = "Description" + Str(I)
OraPArray1.put_Value 1000 + I, I
OraPArray2.put_Value achar, I
Next I

Set OraSqlStmt = OraDatabase.CreateSql("insert into" & _
"part_nos(partno, description) values(:PARTNO,:DESCRIPTION)", 0&)
If OraDatabase.LastServerErr <> 0 Or OraDatabase.LastServerErrText <> "" Then
MsgBox "Error"
End If
MsgBox "# of records inserted : " & OraSqlStmt.RecordCount

Exit Sub
ERR_array_sql:

MsgBox Err.Description

関連項目:

- SnapShotプロパティ

- CreateDynasetメソッド

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

RelMsgId(OraAQ)プロパティ

適用対象

OraAQオブジェクト

説明

このプロパティを指定すると、このキュー・オブジェクトのメッセージが、メッセージIDで示したメッセージよりも前にエンキューされます。

使用方法

OraAq.RelMsgid = msg_id

データ型

String

備考

このメソッドは、エンキュー操作に対してのみ適用されます。

次の値を指定できます。

- バイト配列で指定される有効なメッセージID

- ORAAQ_NULL_MSGID(デフォルト): メッセージIDの指定なし

このプロパティを設定すると、ORAAQ_ENQ_BEFOREオプションでエンキューがコールされます。キューの先頭にメッセージを配置するには、このプロパティをORAAQ_NULL_MSGIDに設定します。

RowPositionプロパティ

適用対象

OraDynasetオブジェクト

説明

ダイナセット内の現在行の行番号を戻します。設計時には使用できず、実行時は読取り専用です。

使用方法

rownum = OraDynaset.RowPosition

データ型

Integer

関連項目:
OraFieldオブジェクト

SafeArray(OraCollection)プロパティ

適用対象

OraCollectionオブジェクト

説明

Variant型SAFEARRAYの要素の値を取得または設定します。

使用方法

SafeArray = OraCollection.SafeArrayOraCollection.SafeArray = SafeArray

引数

引数

説明

SafeArray

SafeArray形式を表すVariant。

データ型

SafeArray形式を表すVariant

備考

このプロパティは、VARCHAR2およびNUMBERなどの単純なスカラー要素型に対してのみ有効です。LOB型、オブジェクト型、REF型などの要素に対してはエラーが発生します。

Variant型SAFEARRAYの索引は0から開始します。SAFEARRAY形式に変換すると、OraCollectionオブジェクトによって、要素の値が対応するSAFEARRAY Variant型に変換されます。次の表に、コレクション要素の型と対応するSAFEARRAY Variant型を示します。

コレクション要素の型

SAFEARRAY

Date

String

Number

String

CHAR、VARCHAR2

String

Real

Real

Integer

Integer

コレクションにSAFEARRAYを設定する場合、OraCollectionは、SAFEARRAY要素を最も近いコレクション要素型に変換します。

Second(OraTimeStamp)プロパティ

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトのSecond属性を取得または設定します。

使用方法

second = OraTimeStampObj.SecondOraTimeStampObj.Second= second

引数

引数

説明

[in] second

OraTimeStampオブジェクトのSecond属性。

データ型

Integer

Second(OraTimeStampTZ)プロパティ

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトのSecond属性を取得または設定します。

使用方法

second = OraTimeStampTZObj.SecondOraTimeStampTZObj.Second= second

引数

引数

説明

[in] second

OraTimeStampTZオブジェクトのSecond属性。

データ型

Integer

Secondsプロパティ

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトのSeconds属性を取得および設定します。

使用方法

seconds = OraIntervalDSObj.SecondsOraIntervalDSObj.Seconds = seconds

引数

引数

説明

[in] seconds

OraIntervalDSオブジェクトのSeconds属性の値を指定するための整数。

データ型

Integer

Serverプロパティ

適用対象

OraDatabaseオブジェクト

説明

このオブジェクトの連結先OraServerオブジェクトを戻します。

使用方法

Set oraserver = oradatabase.Server

データ型

OLEオブジェクト(OraServer)

関連項目:
OraServerオブジェクト

ServerTypeプロパティ

適用対象

OraParameterオブジェクト

OraParamArrayオブジェクト

説明

SQLまたはPL/SQLバインド変数のOracle外部型を指定します。設計時には使用できず、実行時は読取りおよび書込みができます。

OraParamArrayオブジェクトの場合は読取り専用です。ServerTypeプロパティはAddTableメソッドの中で指定します。

使用方法

oraparameter.ServerType = oracle_type

データ型

Integer

備考

SQLまたはPL/SQL(入出力)バインド変数の外部データ型を指定するために使用します。このプロパティは、SQL文またはPL/SQLブロック内のプレースホルダのデータ型を一致させるために、SQL文またはPL/SQLブロックのローカル解析を実施しないようにするために必要です。

OraParameterオブジェクトがServerTypeのBLOB、CLOB、BFILE、OBJECT、REF、VARRAYまたはNESTED TABLEに設定されていると、他のServerTypeプロパティには変更できません。

次に示すOracleの外部データ型がサポートされています。

定数

値

内部データ型

ORATYPE_VARCHAR2

1

VARCHAR2

ORATYPE_NUMBER

2

NUMBER

ORATYPE_SINT

3

SIGNED INTEGER

ORATYPE_FLOAT

4

FLOAT

ORATYPE_STRING

5

NULL文字で終了するSTRING

ORATYPE_LONG

8

LONG

ORATYPE_VARCHAR

9

VARCHAR

ORATYPE_DATE

12

DATE

ORATYPE_RAW

23

RAW

ORATYPE_LONGRAW

24

LONG RAW

ORATYPE_UINT

68

UNSIGNED INTEGER

ORATYPE_CHAR

96

CHAR

ORATYPE_CHARZ

97

NULL文字で終了するCHAR

ORATYPE_BFLOAT

100

BINARY_FLOAT

ORATYPE_BDOUBLE

101

BINARY_DOUBLE

ORATYPE_CURSOR

102

PLSQL CURSOR

ORATYPE_MLSLABEL

105

MLSLABEL

ORATYPE_OBJECT

108

OBJECT

ORATYPE_REF

110

REF

ORATYPE_CLOB

112

CLOB

ORATYPE_BLOB

113

BLOB

ORATYPE_BFILE

114

BFILE

ORATYPE_TIMESTAMP

187

TIMESTAMP

ORATYPE_TIMESTAMPTZ

188

TIMESTAMP WITH TIMEZONE

ORATYPE_INTERVALYM

189

INTERVAL YEAR TO MONTH

ORATYPE_INTERVALDS

190

INTERVAL DAY TO SECOND

ORATYPE_TIMESTAMPLTZ

232

TIMESTAMP WITH LOCAL TIME ZONE

ORATYPE_VARRAY

247

VARRAY

ORATYPE_TABLE

248

NESTED TABLE

ORATYPE_RAW_BIN

2000

RAW

これらの値は、ORACLE_BASE\\ORACLE_HOME\oo4o\oraconst.txtファイルにあります。

例

この例では、AddおよびRemoveパラメータ・メソッド、ServerTypeパラメータ・プロパティ、(ORAEXAMP.SQLにある)ストアド・プロシージャおよびファンクションをコールするExecuteSQLデータベース・メソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables as OLE Objects.
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Add EMPNO as an Input/Output parameter and set its initial value.
OraDatabase.Parameters.Add "EMPNO", 7369, ORAPARM_INPUT
OraDatabase.Parameters("EMPNO").ServerType = ORATYPE_NUMBER

'Add ENAME as an Output parameter and set its initial value.
OraDatabase.Parameters.Add "ENAME", 0, ORAPARM_OUTPUT
OraDatabase.Parameters("ENAME").ServerType = ORATYPE_VARCHAR2

'Add SAL as an Output parameter and set its initial value.
OraDatabase.Parameters.Add "SAL", 0, ORAPARM_OUTPUT
OraDatabase.Parameters("SAL").ServerType = ORATYPE_NUMBER

'Execute the Stored Procedure Employee.GetEmpName to retrieve ENAME.
' This Stored Procedure can be found in the file ORAEXAMP.SQL.
OraDatabase.ExecuteSQL ("Begin Employee.GetEmpName (:EMPNO, :ENAME); end;")
'Display the employee number and name.

'Execute the Stored Function Employee.GetSal to retrieve SAL.
' This Stored Function can be found in the file ORAEXAMP.SQL.
OraDatabase.ExecuteSQL ("declare SAL number(7,2); Begin" & _
":SAL:=Employee.GetEmpSal (:EMPNO); end;")

'Display the employee name, number and salary.
MsgBox "Employee " & OraDatabase.Parameters("ENAME").value & ", #" & OraDatabase.Parameters("EMPNO").value & ",Salary=" & OraDatabase.Parameters("SAL").value

'Remove the Parameters.
OraDatabase.Parameters.Remove "EMPNO"
OraDatabase.Parameters.Remove "ENAME"
OraDatabase.Parameters.Remove "SAL"

End Sub

関連項目:

- Addメソッド

- Removeメソッド

- AddTableメソッド

- ExecuteSQLメソッド

Sessionプロパティ

適用対象

OraCollectionオブジェクト

OraDatabaseオブジェクト

OraDynasetオブジェクト

OraSQLStmtオブジェクト

OraServerオブジェクト

説明

指定したオブジェクトに関連付けられているOraSessionオブジェクトを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

Set orasession = oraconnection.Session
Set orasession = oradatabase.Session
Set orasession = oradynaset.Session
Set orasession = orasqlstmt.Session
Set orasession = oraserver.Session

データ型

OLEオブジェクト(OraSession)

備考

- oraconnection.Session
このOraConnectionオブジェクトが存在しているOraSessionオブジェクトを戻します。

- oradatabase.Session
このOraDatabaseオブジェクトに関連付けられているOraSessionオブジェクトを戻します。各データベースは1つのセッションの一部で、デフォルトでは、アプリケーションに関連付けられているセッションです。

- oradynaset.Session
このOraDynasetオブジェクトに関連付けられているOraSessionオブジェクトを戻します。

- orasqlstmt.Session
このOraSQLStmtオブジェクトに関連付けられているOraSessionオブジェクトを戻します。

関連項目:

- OraSessionオブジェクト

- OraSessionsコレクション

Sessionsプロパティ

適用対象

OraClientオブジェクト

説明

指定したOraClientオブジェクトに対するすべてのセッションのコレクションを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

Set orasessions_collection = oraclient.Sessions

データ型

OLEオブジェクト(OraSessions)

備考

このコレクションのセッションには、添字(序数)を使用して、または作成時に指定したセッション名を使用してアクセスできます。戻されたコレクションのCountプロパティを使用すると、コレクション内のセッションの総数を取得できます。整数の添字は0で開始し、Count-1で終了します。範囲外の索引値と無効な名前を指定すると、NULLのOraSessionオブジェクトが戻ります。

関連項目:

- Countプロパティ

- OraSessionオブジェクト

- OraSessionsコレクション

Sizeプロパティ

適用対象

OraFieldオブジェクト

説明

このフィールドの戻り値に関連付けられているVariantの文字数またはバイト数を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

field_size = orafield.Size

データ型

Long Integer

備考

LONGまたはLONG RAW型のフィールドには0が戻ります。LONGまたはLONG RAW型のフィールドの長さを判断するには、FieldSizeメソッドを使用します。

関連項目:

- OraFieldsコレクション

- FieldSizeメソッド

- Typeプロパティ

Size(OraCollection)プロパティ

適用対象

OraCollectionオブジェクト

説明

指定したコレクションについて、現在のサイズを戻します。実行時は読取り専用です。

使用方法

coll_size = OraCollection.Size

データ型

Integer

備考

ORATYPE_TABLE型のOraCollectionオブジェクトの場合、このプロパティは削除した要素を含んだコレクションの現在のサイズを戻します。

関連項目:
OraFieldオブジェクト

Size(OraLOBおよびOraBFILE)プロパティ

適用対象

OraBLOB、OraCLOBオブジェクト

OraBFILEオブジェクト

説明

OraBLOBおよびOraBFILEオブジェクトのバイト数、またはOraCLOBオブジェクトの文字数を戻します。読取り専用です。

使用方法

bytes = OraBFile.Size

bytes = OraBlob.Size

chars = OraClob.Size

SnapShotプロパティ

適用対象

OraDynasetオブジェクト

説明

SnapshotIDを戻します。

実行時は読取り/書込みができます。

使用方法

SnapshotID = OraDynaset.Snapshot

備考

SnapshotIDは、このダイナセットが作成されたスナップショットを示します。これはタイムスタンプのように考えられます。これを他のCreateDynasetメソッドのコールに使用して、元のダイナセットと同じ時点のデータを使用するコールを作成できます。

Snapshotプロパティには、別のSnapshot値を設定できます。この新しいスナップショットは、次回のRefresh操作時、問合せが再実行されるときに使用されます。Snapshotプロパティは、(snapshotプロパティを介して設定されたその他のSnapshotIDではなく)このOraDynasetオブジェクトが基づくSnapshotIDを常に戻します。

SnapshotIDは、実行量とデータベースの構成に従って、ある時間が経過すると無効になります。これが起こると、Snapshot too oldエラー・メッセージが戻ります。スナップショットの詳細は、『Oracle Database概要』を参照してください。

このSnapshotIDは、このダイナセットが作成された時点を示します。このSnapshotIDを使用して追加作成されたダイナセットには、その時点以降に元のダイナセットに行われた変更(Edit、DeleteおよびAddNew操作)は反映されません。

SnapshotIDオブジェクトは、SELECT文の参照する表が、DUALなどの疑似表ではなく実際のデータベース表である場合にのみ意味があります。

SnapshotIDの有効な使用目的の1つは、すべての行をフェッチするRecordCountプロパティを使用せずに、表の行数を計算することです。「例: ダイナセットの行数の計算」を参照してください。

データ型

Object

例

例: SnapShotプロパティの使用方法

この例では、SnapShotプロパティの使用方法を示します。

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset1 As OraDynaset
Dim OraDynaset2 As OraDynaset
Dim SnapshotID as SnapshotID

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'ALLEN's JOB is initially SALESMAN
OraDatabase.ExecuteSql("Update EMP set JOB = 'SALESMAN' where ENAME = 'ALLEN'")

'Create initial OraDynaset Object.
Set OraDynaset1 = OraDatabase.CreateDynaset("select empno, ename," & _
"job from emp", 0&)
MsgBox "OraDynaset1 -- Value of JOB is " & OraDynaset1.Fields("JOB").Value

'Change Allen's JOB
OraDatabase.ExecuteSql("Update EMP set JOB = 'CLERK' where ENAME = 'ALLEN'")

'This SnapshotID represents the point in time in which OraDynaset1 was created
Set SnapshotID = OraDynaset1.Snapshot

'Create OraDynaset2 from the same point in time as OraDynaset1
Set OraDynaset2 = OraDatabase.CreateDynaset("select JOB from EMP" & _
"where ENAME = 'ALLEN'", 0&, SnapshotID)

MsgBox "OraDynaset2 -- Value of JOB from point of time of OraDynaset1 is " & _
OraDynaset2.Fields("JOB").Value

'We set the snapshot to NULL which will get us current point in time.
OraDynaset2.Snapshot = Null

'We refresh it and it will get us the data from the current point in time
OraDynaset2.Refresh
MsgBox "OraDynaset2 -- Value of JOB from current point of time is " & _
OraDynaset2.Fields("JOB").Value

'And back again to the old point in time --
OraDynaset2.Snapshot = SnapshotID
OraDynaset2.Refresh
MsgBox "OraDynaset2 -- Value of JOB from point of time of OraDynaset1 is " & _
OraDynaset2.Fields("JOB").Value

例: ダイナセットの行数の計算

この例では、すべての行をフェッチするRecordCountプロパティを使用せずに、ダイナセットの行数を計算します。この例で戻されるレコード数にはAddNewまたはDelete操作が考慮されず、情報は、ダイナセットが作成された直後の状態であることに注意してください。

Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim OraDynCount As OraDynaset
Dim SnapshotID as SnapshotID

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create the Dynaset
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)
Set SnapshotID = OraDynaset.Snapshot

'Use the snapshot for count query to guarantee the same point in time
Set OraDynCount = OraDatabase.CreateDynaset("select count(*) NUMROWS" & _
"from emp", 0&, SnapshotID)
MsgBox "Number of rows in the table is " & OraDynCount.Fields("NUMROWS").Value

関連項目:

- CreateDynasetメソッド

- CreateCustomDynasetメソッド

- 『Oracle Database概要』

Sortプロパティ

備考

OraDynasetオブジェクトはこのプロパティをサポートしていません。レコードセットは、SQLのORDER BY句を使用してソートしてください。

関連項目:

- CreateDynasetメソッド

- OraDynasetオブジェクト

SQLプロパティ

適用対象

OraDynasetオブジェクト

OraSQLStmtオブジェクト

説明

指定したダイナセットまたはOraSQLStmtオブジェクトを作成するために使用されたSQL文を戻すか、設定します。設計時には使用できず、実行時は読取りおよび書込みができます。

使用方法

SQL_statement  = oradynaset.SQL
SQL_statement  = orasqlstmt.SQL

oradynaset.SQL = SQL_statement
orasqlstmt.SQL = SQL_statement

データ型

String

備考

最初の使用方法はSQL文バッファの内容を戻し、2番目の使用方法はSQL文のバッファの内容を設定します。

当初のSQL文バッファには、ダイナセットまたはOraSQLStmtオブジェクトの作成に使用するSQL文が挿入されます。Refreshメソッドが発行されるたびに、SQL文バッファの内容が実行されます。

例

この例では、パラメータ、RefreshメソッドおよびSQLプロパティを使用して選択レコードを制限する方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables as OLE Objects.
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create a parameter with an initial value.
OraDatabase.Parameters.Add "job", "MANAGER", 1

'Create the OraDynaset Object.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp where " & _
"job=:job", 0&)

'Notice that the SQL statement is NOT modified.
MsgBox OraDynaset.SQL

'Currently, OraDynaset only contains employees whose job is MANAGER.

'Change the value of the job parameter.
OraDatabase.Parameters("job").Value = "SALESMAN"

'Refresh the dynaset.
OraDynaset.Refresh

'Currently, OraDynaset only contains employees whose 'job is SALESMAN.

'Notice that the SQL statement is NOT modified.
MsgBox OraDynaset.SQL

'Remove the parameter.
OraDatabase.Parameters.Remove ("job")

End Sub

関連項目:
Refreshメソッド

Statusプロパティ

適用対象

OraParameterオブジェクト

OraParamArrayオブジェクト

説明

指定したパラメータのステータスを示す整数を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

parameter_status = oraparameter.Statusparameter_status = oraparamarray.Status

データ型

Integer

備考

Statusプロパティは、それぞれがパラメータについての情報を提供する一連のビットとして解析されます。パラメータは、有効な場合にのみバインドでき、自動的な有効化によってのみ有効にできます。

パラメータのStatusプロパティのビット値は、次のとおりです。

定数

値

説明

ORAPSTAT_INPUT

&H1&

入力パラメータとして使用可能。

ORAPSTAT_OUTPUT

&H2&

出力パラメータとして使用可能。

ORAPSTAT_AUTOENABLE

&H4&

自動バインド可能。

ORAPSTAT_ENABLE

&H8&

使用可能。このビットは常に設定されています。

これらの値は、ORACLE_BASE\\ORACLE_HOME\oo4o\oraconst.txtファイルにあります。

例

この例では、パラメータとExecuteSQLメソッドを使用して、(ORAEXAMP.SQLにある)ストアド・プロシージャをコールする方法を示します。ストアド・プロシージャをコールした後、各パラメータのStatusプロパティをチェックします。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables as OLE Objects.
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Add EMPNO as an Input parameter and set its initial value.
OraDatabase.Parameters.Add "EMPNO", 7369, ORAPARM_INPUT

'Add ENAME as an Output parameter and set its initial value.
OraDatabase.Parameters.Add "ENAME", 0, ORAPARM_OUTPUT

'Execute the Stored Procedure Employee.GetEmpName to retrieve ENAME.
' This Stored Procedure is located in the file ORAEXAMP.SQL.
OraDatabase.ExecuteSQL ("Begin Employee.GetEmpName (:EMPNO, :ENAME); end;")

If OraDatabase.Parameters("EMPNO").Status & ORAPSTAT_INPUT Then
MsgBox "Parameter EMPNO used for input."
End If

If OraDatabase.Parameters("ENAME").Status & ORAPSTAT_OUTPUT Then
MsgBox "Parameter ENAME used for output."
End If

'Display the employee number and name.
MsgBox OraDatabase.Parameters("EMPNO").value
MsgBox OraDatabase.Parameters("ENAME").value

'Remove the Parameters.
OraDatabase.Parameters.Remove "EMPNO"
OraDatabase.Parameters.Remove "ENAME"

End Sub

関連項目:

- Addメソッド

- AutoBindDisableメソッド

- AutoBindEnableメソッド

- ExecuteSQLメソッド

- Removeメソッド

Status(OraLOB/BFILE)プロパティ

適用対象

OraBLOB、OraCLOBオブジェクト

OraBFILEオブジェクト

説明

現在のポーリング操作の状態を戻します。

読取り専用です。

使用方法

status = OraBFile.Status
status  = OraBlob.Status
status = OraClob.Status

データ型

Integer

備考

この値は、PollingAmountプロパティが0(ゼロ)以外でRead操作が発生した場合のみ意味があります。戻り値は、次のとおりです。

- ORALOB_NEED_DATA
読取りまたは書込みデータが残存しています。

- ORALOB_NODATA
(ほとんどの場合)エラーのため、読取りまたは書込みデータがありません。

- ORALOB_SUCCESS LOB
データの読取りまたは書込みが正常に終了しました。

関連項目:
PollingAmountプロパティ

Subscriptionsプロパティ

適用対象

OraDatabaseオブジェクト

説明

指定したデータベースのOraSubscriptionsコレクションを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

Set orasubscriptions_collection = oradatabase.Subscriptions

データ型

OLEオブジェクト(OraSubscriptions)

備考

このコレクション内のサブスクリプションには、添字(順序を示す整数)を使用することでアクセスできます。戻されたコレクションのCountプロパティを使用すると、コレクション内のサブスクリプション数を取得できます。整数の添字は0(ゼロ)で開始し、Count-1で終了します。範囲外の索引値を指定すると、NULLのOraSubscriptionオブジェクトが戻ります。

コレクションでは、サブスクリプションへアクセスできるほか、Addメソッドを使用してサブスクリプションを作成したり、Removeメソッドを使用して破棄することができます。

例

詳細な例は、「例: データベース・イベントが通知されるようにアプリケーションを登録する方法」を参照してください。

関連項目:

- データベース・イベント

- OraSubscriptionオブジェクト

- OraSubscriptionsコレクション

- Remove(OraSubscriptionsコレクション)メソッド

TableName(OraRef)プロパティ

適用対象

OraRefオブジェクト

説明

基礎となる参照可能オブジェクトを持つオブジェクト表の名前を含む文字列を戻します。

使用方法

table_name = OraRef.TableName

データ型

String

備考

このプロパティは読取り専用です。

TableSize(OraCollection)プロパティ

適用対象

OraCollectionオブジェクト

説明

指定したコレクションについて、現在のサイズを戻します。実行時は読取り専用です。

使用方法

table_size = OraCollection.TableSize

データ型

Integer

備考

ORATYPE_TABLE型のOraCollectionオブジェクトの場合、このプロパティは削除した要素を除くコレクションの現在のサイズを戻します。

TimeZone(OraTimeStampTZ)プロパティ

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトのタイムゾーン情報を取得または設定します。

使用方法

timezone = OraTimeStampTZObj.TimeZoneOraTimeStampTZObj.TimeZone= timezone

引数

引数

説明

[in] timezone

OraTimeStampTZオブジェクトのタイムゾーン属性。

データ型

String

備考

TimeZoneプロパティを設定しても、OraTimeStampTZオブジェクトに格納されている協定世界時(UTC)の日時値は変化しません。ただし、指定したタイムゾーンのローカルの日時値は変更される可能性があります。

次の表は、下の例に記載されているOraTimeStampTZオブジェクトの日時値と、タイムゾーン値に対応するUTC日時値を示しています。

プロパティ

OraTSTZオブジェクト値

OraTSTZオブジェクトのUTC日時値

Year

2003

2003

Month

4

4

Day

29

29

Hour

12

19

Minute、Second、Nanosecond

0

0

TimeZone

-07:00

00:00

TimeZoneプロパティを-08:00に設定した場合、OraTimeStampTZオブジェクトの指定したタイムゾーンの日時値は変化しますが、UTC日時値は変化しません。

プロパティ

新しいOraTSTZオブジェクト値

新しいOraTSTZオブジェクトのUTC日時値

Year

2003

2003

Month

4

4

Day

29

29

Hour

11

19

Minute、Second、Nanosecond

0

0

TimeZone

-08:00

00:00

例

Dim OraTSTZ as OraTimeStampTZ
Dim OraTSTZ_new as OraTimeStampTZ
Dim OraTSTZStr as String
Dim OraTSTZStr_new as String
Set OraTSTZ = oo4oSession.CreateOraTimeStampTZ( "2003-APR-29" & _
"12:00:00 -07:00", "YYYY-MON-DD HH:MI:SS TZH:TZM")

'Change Time Zone to "-08:00"
Set OraTSTZ_new = OraTSTZ.Clone
oraTSTZ_new.TimeZone = "-08:00"

'OraTSTZStr has value as (29-APR-03 12.00.00.000000000 PM -07:00)
OraTSTZStr = OraTSTZ.value
'OraTSTZStr_new has value as (29-APR-03 11.00.00.000000000 PM -08:00)
OraTSTZStr_new = OraTSTZ_new.value

TotalDaysプロパティ

適用対象

OraIntervalDSオブジェクト

説明

OraIntervalDSオブジェクトが表す合計日数を取得および設定します。

使用方法

totalDays = OraIntervalDSObj.TotalDays
OraIntervalDSObj.TotalDays = totalDays

引数

引数

説明

[in] totalDays

OraIntervalDSオブジェクトを合計日数として指定するVariant型の数値またはOraNumberオブジェクト。

データ型

Double

例

Dim oraIDS   as OraIntervalDS
'Create an OraIntervalDS using a string which represents 1 day and 12 hours
Set oraIDS = oo4oSession.CreateOraIntervalDS("1 12:0:0.0")

'totalDays is set to 1.5 which represents an interval of 1.5 days
totalDays = oraIDS.TotalDays

関連項目:
OraNumberオブジェクト

TotalYearsプロパティ

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalYMオブジェクトが表す合計年数を取得および設定します。

使用方法

totalYears = OraIntervalYMObj.TotalYearsOraIntervalYMObj.TotalYears= totalYears

引数

引数

説明

[in] totalYears

OraIntervalYMオブジェクトを合計年数として指定するVariant型の数値。

データ型

Double

例

Dim oraIYM   as OraIntervalYM

'Create an OraIntervalYM using a string which represents 1 year and 6 months
Set oraIYM = oo4oSession.CreateOraIntervalYM("1-6")
'totalYears is set to 1.5 which represents an interval of 1.5 years
totalYears = oraIYM.TotalYears

Transactionsプロパティ

適用対象

OraDynasetオブジェクト

説明

指定したダイナセットがトランザクション処理をサポートできるかどうかを示します。設計時には使用できません。実行時は読取り専用です。

使用方法

if_transactions = oradynaset.Transactions

データ型

Integer(ブール)

備考

このプロパティは、常にTRUEを戻します。

関連項目:

- BeginTransメソッド

- CommitTransメソッド

- OraDynasetオブジェクト

- ResetTransメソッド

- Rollbackメソッド

Truncatedプロパティ

適用対象

OraFieldオブジェクト

説明

フィールド値がフェッチされたときに切り捨てられたかどうかを示します。設計時には使用できません。実行時は読取り専用です。

使用方法

field_status = orafield.Truncated

データ型

Integer(ブール)

備考

切り捨てられたデータが戻る場合はTRUE、それ以外の場合はFALSEを戻します。切捨ては、LONGまたはLONG RAW型のフィールドに対してのみ発生します。このプロパティを使用して、GetChunkメソッドを介してOracleデータベースからデータをさらに取り出す必要があるかどうかを判断します。

関連項目:

- GetChunkメソッド

- Typeプロパティ

Typeプロパティ

適用対象

OraFieldオブジェクト

OraParameterオブジェクト

OraParamArrayオブジェクト

説明

指定したオブジェクトのVariant型を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

data_type = orafield.Type
data_type = oraparameter.Type
data_type = oraparamarray.Type

データ型

Integer

備考

- orafield.Type
このフィールドの戻り値に関連付けられているVariantデータ型(Visual Basicのドキュメントを参照)を戻します。

- oraparameter.Type
SQL文に実際にバインドされているVariantデータ型を示す整数を戻します。Visual BasicとOracle Databaseの両方に共通のデータ型を取得するために内部変換が必要な場合があるため、これは、oraparameter.ValueのVariantデータ型とは異なる場合があります。

Oracleの内部データ型から、次のようにマッピングされます。

Oracleデータ型

定数

値

データ型

BINARY_DOUBLE

ORADB_DOUBLE

7

Double

BINARY_FLOAT

ORADB_SINGLE

6

Single

BLOB

ORADB_OBJECT

9

OraBLOB

CHAR

ORADB_TEXT

10

String

CLOB

ORADB_OBJECT

9

OraCLOB

DATE

ORADB_DATE

8

Variant

DATE

ORADB_DATE

8

Date

INTERVAL DAY TO SECOND

ORADB_OBJECT

9

OraIntervalDS

INTERVAL YEAR TO MONTH

ORADB_OBJECT

9

OraIntervalYM

LONG

ORADB_MEMO

12

String

LONG RAW

ORADB_LONGBINARY

11

String

NESTED TABLE

ORADB_OBJECT

9

OraBFILE

NUMBER (1から4, 0)

ORADB_INTEGER

3

Integer

NUMBER (5から9, 0)

ORADB_LONG

4

Long Integer

NUMBER (10から15, 0)

ORADB_DOUBLE

7

Double

NUMBER (16から38, 0)

ORADB_TEXT

10

String

NUMBER (1から15, n)

ORADB_DOUBLE

7

Double

NUMBER (16から38, n)

ORADB_TEXT

10

String

RAW

ORADB_LONGBINARY

11

String

REF

ORADB_OBJECT

9

OraCollection

TIMESTAMP

ORADB_OBJECT

9

OraTimeStamp

TIMESTAMP WITH LOCAL TIME ZONE

ORADB_OBJECT

9

OraTimeStamp

TIME WITH TIME ZONE

ORADB_OBJECT

9

OraTimeStampTZ

VARRAY

ORADB_OBJECT

9

OraCollection

VARCHAR2

ORADB_TEXT

10

String

これらの値はORACLE_BASE\\ORACLE_HOME\oo4o\oraconst.txtファイルにあり、Visual Basicのdatacons.txtファイルの同じ定数に対応するように作成されています。

Oracleのデフォルト日付書式は"DD-MMM-YY"ですが、DATE型のフィールドは、コントロール パネルで指定されているVisual Basicのデフォルト日付書式で戻されることに注意してください。

NUMBER(精度, 位取り)ではなく、単にNUMBERとして定義された列は、定義上、精度38の浮動小数点数であることに注意してください。つまり、このような列に対してはTypeプロパティでORADB_TEXT型が戻ります。

関連項目:
Valueプロパティ

Type(OraAttribute)プロパティ

適用対象

OraAttributeオブジェクト

説明

この属性の型を表す整数のコードを戻します。

使用方法

typecode = OraAttribute.Type

データ型

Integer

備考

これらの整数のコードは、Oracle Call Interface(OCI)の外部データ型に対応しています。「Oracleデータ型」の項を参照してください。

関連項目:
Oracleデータ型

Type(OraCollection)プロパティ

適用対象

OraCollectionオブジェクト

説明

コレクションの型をコードで戻します。

使用方法

coll_type = OraCollection.Type

データ型

Integer

備考

このプロパティは、次の値の1つを戻します。

定数

値

説明

ORATYPE_VARRAY

247

VARRAY型。

ORATYPE_TABLE

248

NESTED TABLE型。

Type(OraMetaData)プロパティ

適用対象

OraMetaDataオブジェクト

説明

OraMetaDataオブジェクトで記述されるスキーマ・オブジェクトの型を戻します。

使用方法

type = OraMetaData.Type

備考

考えられる値は、次の定数です。

定数

値

ORAMD_TABLE

1

ORAMD_VIEW

2

ORAMD_COLUMN

3

ORAMD_COLUMN_LIST

4

ORAMD_TYPE

5

ORAMD_TYPE_ATTR

6

ORAMD_TYPE_ATTR_LIST

7

ORAMD_TYPE_METHOD

8

ORAMD_TYPE_METHOD_LIST

9

ORAMD_TYPE_ARG

10

ORAMD_TYPE_RESULT

11

ORAMD_PROC

12

ORAMD_FUNC

13

ORAMD_ARG

14

ORAMD_ARG_LIST

15

ORAMD_PACKAGE

16

ORAMD_SUBPROG_LIST

17

ORAMD_COLLECTION

18

ORAMD_SYNONYM

19

ORAMD_SEQENCE

20

ORAMD_SCHEMA

21

ORAMD_OBJECT_LIST

22

ORAMD_OBJECT_LIST

23

ORAMD_DATABASE

24

注意:
このバージョンのOraMetaDataオブジェクトがOracle Databaseリリース8.1以上で使用される場合、データベースを拡張して新しいスキーマの型が導入され、24を超える値が指定される可能性があります。

関連項目:
ORAMD_TABLEの属性

TypeName(OraObjectおよびOraRef)プロパティ

適用対象

OraObjectオブジェクト

OraRefオブジェクト

説明

オブジェクトのユーザー定義型の名前を含む文字列を指定します。

使用方法

typename = OraRef.TypeName
typename = OraObject.TypeName

データ型

String

備考

このプロパティは、実行時は読取り専用です。

Updatableプロパティ

適用対象

OraDynasetオブジェクト

説明

指定したダイナセットが更新可能かどうかを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

if_updatable = oradynaset.Updatable

データ型

Integer(ブール)

備考

指定したダイナセットの行が更新可能な場合はTRUE、それ以外の場合はFALSEを戻します。

結果のダイナセットが更新可能であるかどうかは、Oracle SQLの更新可能性規則、付与されているアクセス権、およびCreateDynasetメソッドの読取り専用フラグによって決まります。

更新可能にするためには、次の3つの条件を満たす必要があります。

1. SQL文が単純な列リストまたは列リスト全体(*)を参照すること。

2. SQL文でオプション引数の読取り専用フラグを設定しないこと。

3. Oracle Databaseで、選択された問合せ行のROWID参照が可能であること。

SQL文はこれらの基準を満たしていない場合でも処理されますが、結果のダイナセットは更新不可になり、FALSEが戻ります。

例

この例では、Updatableメソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。

Sub Form_Load ()

'Declare variables as OLE Objects.
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

'Create an updatable dynaset using a simple query.
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)

Call IsDynUpdatable(OraDynaset)

'Create a non-updatable dynaset using column aliases.
Set OraDynaset = OraDatabase.CreateDynaset("select ename EmployeeName," & _
"empno EmployeeNumber, sal Salary from emp", 0&)
Call IsDynUpdatable(OraDynaset)

'Create a non-updatable dynaset using a join.
Set OraDynaset = OraDatabase.CreateDynaset("select ename, emp.deptno," & _
"loc from emp, dept where emp.deptno = dept.deptno", 0&)
Call IsDynUpdatable(OraDynaset)

End Sub

Sub IsDynUpdatable (odyn As OraDynaset)

'Check to see if the dynaset is updatable.
If odyn.Updatable = True Then
MsgBox "Created an UPDATABLE dynaset from: '" & odyn.SQL & "'"
Else
MsgBox "Created a READ-ONLY dynaset from: '" & odyn.SQL & "'"
End If

End Sub

関連項目:

- CreateDynasetメソッド

- SQLプロパティ

- Data ControlのRecordSourceプロパティ

Valueプロパティ

適用対象

OraFieldオブジェクト

OraParameterオブジェクト

説明

指定したオブジェクトの値を取得または設定します。設計時には使用できず、実行時は読取りおよび書込みができます。

使用方法

orafield.Value = data_value
data_value = orafield.Value

oraparameter.Value = data_value
data_value = oraparameter.Value

データ型

Variant

備考

- Orafield.Value
フィールドの値をVariantとして戻します。

フィールドの内容は、data_value = orafield.Valueによって設定されます。フィールドにはNULL値を使用できます。戻り値がNULLかどうかを判断するには、Visual BasicのIsNull()ファンクションを使用してValueプロパティを検証できます。カレント・レコードが編集可能な場合は、ValueプロパティにNULLを割り当てることもできます。データベースからデータが取り出されると、フィールド値はローカルにキャッシュされます。ただし、LONGまたはLONG RAW型のフィールドの場合は、取出しおよびローカルへの格納が行われないデータもあります。その場合は、GetChunkフィールド・メソッドに記述されているメソッドを使用して、必要に応じてデータを取得します。Valueプロパティを介して直接取得できるLONGまたはLONG RAW型のフィールドの最大サイズは約64KBです。64KBを超えるデータ・フィールドは、GetChunkメソッドを使用して間接的に取得する必要があります。

- OraParameter.Value
パラメータの値をVariantとして戻します。

パラメータの内容は、data_value = oraparameter.Valueによって設定されます。Variantデータ型の値を変更すると、関連するSQL文およびPL/SQL文の処理に重大な影響を与える可能性があります。

Oracleのデフォルト日付書式は"DD-MMM-YY"ですが、DATE型のフィールドは、Visual Basicのデフォルト日付書式"MM/DD/YY" で戻されることに注意してください。

Value引数には、OraBLOBなどのOracle Database 10gオブジェクトを使用できます。

ダイナセットと同様に、パラメータのValueプロパティから取得したオブジェクトは、常にParameterの最新の値を参照します。Visual BasicのNULL値を値として渡すこともできます。Visual Basicの値EMPTYは、BLOBおよびCLOBに対しては空のLOBを意味する目的で、OBJECT、VARRAYおよびNESTED TABLEに対しては、オブジェクトの属性がすべてNULLであることを意味する目的で使用できます。

関連項目:

- GetChunkメソッド

- OraParamArrayオブジェクト

- Typeプロパティ

Value(OraAttribute)プロパティ

適用対象

OraAttributeオブジェクト

説明

属性の値を取得または設定します。この値には、OraObject、OraRefまたはOraCollectionオブジェクト、あるいはサポートされているスカラー型(IntegerやFloatなど)のインスタンスがあります。

使用方法

attr_value = OraAttribute.Value  OraAttribute.Value = attr_value

データ型

Variant

備考

これは、このオブジェクトのデフォルトのプロパティです。

OraAttributeオブジェクトのValueプロパティは、属性の値をVariantとして戻します。属性のVariantの型は、属性の型によって決まります。属性の値はNULLである場合もあり、また、NULLに設定できます。オブジェクト、REF、LOBおよびコレクション型の属性の場合は、属性の値が、その型に対応するOO4Oオブジェクトとして戻されます。

次の表に、OraAttributeオブジェクトのValueプロパティの属性の型と戻り値を示します。

要素の型

要素の値

Object

OraObject

REF

OraRef

VARRAY、ネストした表

OraCollection

BLOB

OraBLOB

CLOB

OraCLOB

BFILE

OraBFILE

Date

String

Number

String

CHAR、VARCHAR2

String

Real

Real

Integer

Integer

Value(OraAQMsg)プロパティ

適用対象

OraAQMsgオブジェクト

説明

指定したオブジェクトの値を取得または設定します。

使用方法

Msg.Value = my_string
set Msg.Value = OraObj

my_string = Msg.Value
Set OraObj = Msg.Value

データ型

String

備考

Valueプロパティは、ユーザー定義型に加え、RAWの実際のメッセージを表します。

このプロパティは設計時には使用できません。実行時は読取り/書込みができます。

例

'To set the value for a message of Raw type
OraAQMsg.Value = "This is a test message"
myString = "Another way of setting the message"
OraAQMsg.Value = myString

'To set the value for a message of user-defined type
Dim OraObj as OraObject
OraObj("subject").Value = txtdesc
OraObj("text").Value = txtmsg
set OraAQMsg.Value = OraObj

'To get the value from a message of raw type
myString = OraAQMsg.Value

'To get the value from a message of object type(user-defined type)
Set OraObj = OraMsg.Value
txtdesc = OraObj("subject").Value
txtmsg = OraObj("text").Value

Value(OraIntervalDS)プロパティ

適用対象

OraIntervalDSオブジェクト

説明

読取りでは、[+/-]Day HH:MI:SSxFFの書式を使用してOraIntervalDSの値を表す文字列を取得します。設定では、Variant型の文字列、数値またはOraIntervalDSオブジェクトを使用できます。

使用方法

string = OraIntervalDSObj.Value OraIntervalDSObj.Value = value

引数

引数

説明

[in] value

Variant型の文字列、数値またはOraIntervalDSオブジェクト。

データ型

Variant

備考

値セットがVariant型の文字列の場合は、[+/-]Day HH:MI:SSxFFの書式で記述する必要があります。

値セットが数値の場合、提供される値は、OraIntervalDSオブジェクトが表す合計日数を表す必要があります。

例

Dim oraIDS as OraIntervalDS

'Create an OraIntervalDS using a string which represents 1 day and 12 hours
Set oraIDS = oo4oSession.CreateOraIntervalDS("1 12:0:0.0")

'get the OraIntervalDS.Value return a string for the Value
' property, idsStr is set to "01 12:00:00.000000"
idsStr = oraIDS.Value

'can also return a string for the Value property as follows
idsStr = oraIDS

'set the OraIntervalDS.Value using a string which represents 1 days and 12 hours
oraIDS.Value = "1 12:0:0.0"

'set the OraIntervalDS.Value using a numeric value which represents
'1 days and 12 hours
oraIDS.Value = 1.5

関連項目:
CreateOraIntervalDSメソッド

Value(OraIntervalYM)プロパティ

適用対象

OraIntervalYMオブジェクト

説明

読取りでは、YEARS-MONTHSの書式を使用してOraIntervalYMの値を表す文字列を取得します。

設定では、Variant型の文字列、数値またはOraIntervalYMオブジェクトを使用できます。

使用方法

string = OraIntervalYMObj.ValueOraIntervalYMObj.Value= value

引数

引数

説明

[in] value

Variant型の文字列、数値またはOraIntervalYMオブジェクト。

データ型

String

備考

値セットがVariant型の文字列の場合は、[+/-]YEARS-MONTHSの書式で記述する必要があります。

値セットが数値の場合、提供される値は、OraIntervalYMオブジェクトが表す合計年数を表す必要があります。

例

Dim oraIYM as OraIntervalYM

'Create an OraIntervalYM using a string which represents 1 year and 6 months
Set oraIYM = oo4oSession.CreateOraIntervalYM("1-6")

'get the OraIntervalYM.Value return a string for the Value property,
' iymStr is set to "01-06"
iymStr = oraIYM.Value

'can also return a string for the Value property as follows
iymStr = oraIYM

'set the OraIntervalDS.Value using a string which represents 1 year and 6 months
oraIYM.Value = "1-6"

'set the OraIntervalYM.Value using a numeric value which represents
'1 years and 6 months
oraIYM.Value = 1.5

関連項目:
CreateOraIntervalYMメソッド

Value(OraMDAttribute)プロパティ

適用対象

OraMDAttributeオブジェクト

説明

属性の値を含む文字列を戻します。

使用方法

value = OraMDAttribute.Value

データ型

String

備考

これはデフォルトのプロパティです。

Value(OraNumber)プロパティ

適用対象

OraNumberオブジェクト

説明

読取りでは、現行の書式文字列を使用してOraNumberの値を表す文字列を取得します。設定では、Valueプロパティは、Variant型のString、OraNumberまたは数値を使用できます。実行時は読取り/書込みができます。

使用方法

string = OraNumber.Value
OraNumber.Value = variantval

引数

引数

説明

[in] variantval

Variant型の文字列、OraNumberまたは数値。

データ型

Variant

備考

Valueプロパティが数値型(LONGなど)に設定されている場合、値は、数値に対してVisual Basicが保証する最大精度に制限されます。

その値に対して現行の書式を正常に適用できない場合は、エラーが発生します。このプロパティに対して、数値に変換できないVariant型の値(数値以外の文字を使用している文字列など)を設定した場合もエラーになります。

Value(OraTimeStamp)プロパティ

適用対象

OraTimeStampオブジェクト

説明

読取りでは、Valueプロパティは、OraTimeStampオブジェクトの値を表す文字列を取得します。FormatプロパティがNULLでない場合、出力文字列の書式はFormatプロパティで指定された書式になり、それ以外の場合、出力文字列の書式はセッションのTIMESTAMP書式(NLS_TIMESTAMP_FORMAT)になります。設定では、Valueプロパティは、Variant型のString、DateまたはOraTimeStampを使用できます。

使用方法

string = OraTimeStampObj.ValueOraTimeStampObj.Value= value

引数

引数

説明

[in] value

Variant型の文字列、日付またはOraTimeStamp。

データ型

String

備考

値がString型で、FormatプロパティがNULLでない場合、文字列の書式はFormatプロパティと一致する必要があります。FormatプロパティがNULLの場合、文字列の書式はセッションのTIMESTAMP書式と一致する必要があります。

例

...

Set OraTimeStamp = OraSession.CreateOraTimeStamp("1999-APR-29 " & _
"12:10:23.444 AM", "YYYY-MON-DD HH:MI:SS.FF AM")

'returns a string for the Value property
tsStr = OraTimeStamp.Value

'set OraTimeStamp.Value using a string
OraTimeStamp.Value = "1999-APR-29 12:10:23.444 AM"

関連項目:
CreateOraTimeStampメソッド

Value(OraTimeStampTZ)プロパティ

適用対象

OraTimeStampTZオブジェクト

説明

読取りでは、Valueプロパティは、OraTimeStampTZオブジェクトの値を表す文字列を取得します。FormatプロパティがNULLでない場合、出力文字列の書式はFormatプロパティで指定された書式になり、それ以外の場合、出力文字列の書式はセッションのTIMESTAMP WITH TIME ZONE書式(NLS_TIMESTAMP_TZ_FORMAT)になります。設定では、Valueプロパティは、Variant型のString、DateまたはOraTimeStampTZを使用できます。

使用方法

string = OraTimeStampTZObj.ValueOraTimeStampObjTZ.Value= value

引数

引数

説明

[in] value

Variant型の文字列、日付またはOraTimeStampTZ。

データ型

String

備考

値がVariant型の文字列で、FormatプロパティがNULLでない場合、文字列の書式はFormatプロパティと一致する必要があります。FormatプロパティがNULLの場合、文字列の書式はセッションのTIMESTAMP WITH TIME ZONE書式と一致する必要があります。

値がVariant型の日付の場合、Dateの日時値は、セッションのタイムゾーンの日時値として解析されます。OraTimeStampTZオブジェクトのタイムゾーン情報には、セッションのタイムゾーンが含まれています。

例

Dim OraTimeStampTZ As OraTimeStampTZ
...

Set OraTimeStampTZ = OraSession.CreateOraTimeStampTZ("2003-APR-29" & _
"12:00:00 -07:00", "YYYY-MON-DD HH:MI:SS TZH:TZM")

'returns a string for the Value property
tstzStr = OraTimeStampTZ.Value
...

'set OraTimeStampTZ.Value using a string
OraTimeStampTZ.Value = "2003-APR-29 12:00:00 -07:00"

関連項目:
CreateOraTimeStampTZメソッド

Version(OraObjectおよびRef)プロパティ

適用対象

OraObjectオブジェクト

OraRefオブジェクト

説明

基礎となる値インスタンスの型に対してユーザーが割り当てたバージョンを含んだ文字列を戻します。

使用方法

version  = OraRef.Version
version  = OraObject.Version

データ型

String

備考

このプロパティは、実行時は読取り専用です。

Visible(OraAQ)プロパティ

適用対象

OraAQオブジェクト

説明

エンキュー要求に対するトランザクション動作を指定します。

使用方法

Q.Visible = transaction_mode

データ型

Integer

備考

このプロパティは、エンキュー操作に対してのみ適用されます。

次の値を指定できます。

- ORAAQ_ENQ_IMMEDIATE(1)
エンキュー操作がそのトランザクション自体を構成します。エンキュー操作の直後にメッセージを表示する場合に、このプロパティを設定します。

- ORAAQ_ENQ_ON_COMMIT(2)(デフォルト)
エンキューは、現行のトランザクションの一部で、トランザクション・コミットの後のみ、メッセージを表示します。

例

Msg.Value = "The visibility option used in the enqueue call is " & _
"ORAAQ_ENQ_IMMEDIATE"
Q.Visible = ORAAQ_ENQ_IMMEDIATE
Q.Enqueue

Wait(OraAQ)プロパティ

適用対象

OraAQオブジェクト

説明

使用可能なメッセージがない場合の待機時間(秒単位)を指定します。

使用方法

Q.Wait = seconds

データ型

Integer

備考

デキュー操作にのみ適用できます。

次の値を指定できます。

- ORAAQ_DQ_WAIT_FOREVER(-1)(デフォルト)
待機し続けます。

- ORAAQ_DQ_NOWAIT(0)
待機しません。

XMLAsAttributeプロパティ

適用対象

OraFieldオブジェクト

説明

このフィールド名が属性として指定されているかどうかを示すブール値を取得および設定します。値がFALSEの場合、フィールド名は要素に指定されています。実行時は読取り/書込みができます。

使用方法

OraField.XMLAsAttribute = True

備考

このプロパティのデフォルト値は、FALSEです。

BLOB、CLOB、BFILE、Object、VARRAY、Nested Table、LongおよびLongRaw型のフィールドは、XML属性には指定できません。

XMLCollIDプロパティ

適用対象

OraDynasetオブジェクト

説明

GetXMLまたはGetXMLToFileメソッドがコールされる際に発生するコレクション項目のレンダリングで、(<TYPENAME_ITEM id = "1">の)idに置き換わる属性名を取得および設定します。実行時は読取り/書込みができます。

使用方法

oradynaset.XMLCollID = "NEWID"

備考

このプロパティのデフォルト値は、idです。このプロパティがNullまたは空のString("")に設定されている場合、collectionid属性は省かれます。属性名は有効である必要があります。有効でないと、エラーが生じます。大/小文字の区別は保持されます。

関連項目:

- GetXMLメソッド

- GetXMLToFileメソッド

XMLEncodingTagプロパティ

適用対象

OraDynasetオブジェクト

説明

生成されたXMLドキュメントのencodingタグの文字列値を取得または設定します。

使用方法

OraDynaset.XMLEncodingTag = "SHIFT_JIS"

備考

このプロパティは、OO4Oで生成されたXMLドキュメントのキャラクタ・セットが、保存または解析される前のコードと異なるコードに変換される場合に有効です。データベースへのプロパティのロードまたはファイル・システムへのプロパティの保存時に発生する可能性があります。

このプロパティは、encodingタグの値を設定するだけで、実際のドキュメントのエンコードの変更は行いません。Visual BasicのGetXMLメソッドで生成されたドキュメントは、UCS2にエンコードされます。GetXMLToFileメソッドで生成されたドキュメントには、現行のNLS_LANG設定と同じキャラクタ・セットが使用されます。

このプロパティが空の文字列の場合は、デフォルトのencodingタグが使用されます。タグを完全に省略する場合は、OraDynaset.XMLOmitEncodingTagを使用してください。

指定されたエンコーディング値の妥当性チェックは行われません。

関連項目:

- GetXMLメソッド

- GetXMLToFileメソッド

- XMLOmitEncodingTagプロパティ

XMLNullIndicatorプロパティ

適用対象

OraDynasetオブジェクト

説明

フィールド値がNULLの場合にNULL標識属性が使用されるかどうかを示すブール値を取得および設定します。このプロパティがFALSEの場合、NULL値のタグは省略されます。実行時は読取り/書込みができます。

使用方法

oradynaset.XMLNullIndicator = True

備考

このプロパティのデフォルト値は、FALSEです。

XMLOmitEncodingTagプロパティ

適用対象

OraDynasetオブジェクト

説明

encodingタグが省略されているかどうかを判断するブール値を取得または設定します。

使用方法

OraDynaset.XMLOmitEncodingTag = True

備考

デフォルト値はFALSEです。

このプロパティがFALSEに設定されている場合、encodingタグにはXMLEncodingTagプロパティの値が使用されます。

関連項目:
XMLEncodingTagプロパティ

XMLRowIDプロパティ

適用対象

OraDynasetオブジェクト

説明

GetXMLまたはGetXMLToFileメソッドがコールされる際に発生するXMLのレンダリングで、(<ROW id= "1">の)idに置き換わる属性名を取得および設定します。実行時は読取り/書込みができます。

使用方法

oradynaset.XMLRowID = "NEWID"

備考

このプロパティのデフォルト値は、idです。このプロパティがNullまたは空の文字列("")に設定されている場合、rowid属性は省かれます。属性名は有効である必要があります。有効でないと、エラーが生じます。大/小文字の区別は保持されます。

関連項目:

- GetXMLメソッド

- GetXMLToFileメソッド

XMLRowsetTagプロパティ

適用対象

OraDynasetオブジェクト

説明

GetXMLまたはGetXMLToFileメソッドがコールされる際に発生するXMLのレンダリングで、行セット・タグ<ROWSET>に置き換わるタグ名を取得または設定します。実行時は読取り/書込みができます。

使用方法

oradynaset.XMLRowSetTag = "NEWROWSET"

備考

このプロパティのデフォルト値は、ROWSETです。タグ名は有効である必要があります。有効でないと、エラーが生じます。大/小文字の区別は保持されます。ドキュメントとともにスキーマ・メタデータが要求されないかぎり、このタグはルートになります。

関連項目:

- GetXMLメソッド

- GetXMLToFileメソッド

XMLRowTagプロパティ

適用対象

OraDynasetオブジェクト

説明

GetXMLまたはGetXMLToFileメソッドがコールされる際に発生するXMLのレンダリングで、<ROW>に置き換わるタグ名を取得および設定します。実行時は読取り/書込みができます。

使用方法

oradynaset.XMLRowTag = "NEWROW"

備考

このプロパティのデフォルト値は、ROWです。このプロパティがNullまたは空の文字列("")に設定されている場合、<ROW>タグは省かれます。タグ名は有効である必要があります。有効でないと、エラーが生じます。大/小文字の区別は保持されます。

関連項目:

- GetXMLメソッド

- GetXMLToFileメソッド

XMLTagNameプロパティ

適用対象

OraFieldオブジェクト

説明

GetXMLまたはGetXMLToFileメソッドがコールされる際に発生するXMLのレンダリングで、このフィールドに使用されるタグ名を取得および設定します。実行時は読取り/書込みができます。

使用方法

orafield.XMLTagName = "EmployeeName"

備考

このプロパティのデフォルト値は、Nameプロパティの値です。このプロパティがNullまたは空の文字列("")に設定されている場合、このフィールドは省かれます。名前は有効である必要があります。大/小文字の区別は保持されます。

関連項目:

- GetXMLメソッド

- GetXMLToFileメソッド

XMLUpperCaseプロパティ

適用対象

OraDynasetオブジェクト

説明

GetXMLまたはGetXMLToFileメソッドがコールされる際に、タグ名または属性名が大文字かどうかを示すブール値を取得および設定します。実行時は読取り/書込みができます。

使用方法

oradynaset.XMLUpperCase = True

備考

このプロパティのデフォルト値は、FALSEです。このプロパティがTRUEに設定されている場合、タグ名および属性名はすべて大文字になります。このメソッドは、すべてのカスタム・タグまたは属性名がユーザーにより設定された後でコールする必要があります。

関連項目:

- GetXMLメソッド

- GetXMLToFileメソッド

Year(OraTimeStamp)プロパティ

適用対象

OraTimeStampオブジェクト

説明

OraTimeStampオブジェクトのYear属性を取得または設定します。

使用方法

year = OraTimeStampObj.YearOraTimeStampObj.Year = year

引数

引数

説明

[in] year

OraTimeStampオブジェクトのYear属性。

データ型

Integer

Year(OraTimeStampTZ)プロパティ

適用対象

OraTimeStampTZオブジェクト

説明

OraTimeStampTZオブジェクトのYear属性を取得または設定します。

使用方法

year = OraTimeStampObjTZ.Year
OraTimeStampObjTZ.Year = year

引数

引数

説明

[in] year

OraTimeStampTZオブジェクトのYear属性。

データ型

Integer

Yearsプロパティ

適用対象

OraIntervalYMオブジェクト

説明

OraIntervalYMオブジェクトのYears属性を取得および設定します。

使用方法

years = OraIntervalYMObj.YearsOraIntervalYMObj.Years = years

引数

引数

説明

[in] years

OraIntervalYMオブジェクトのYears属性の値を指定するための整数。

データ型

Integer

12 データ・コントロール・イベント

この章では、Oracle Data Controlのイベントについて説明します。データ・コントロールの概要は、「Oracle Data Control」を参照してください。

関連項目:
詳細は、Microsoft Visual Basicのヘルプおよびマニュアルを参照してください。

内容は次のとおりです。

- DragDropイベント

- DragOverイベント

- Errorイベント

- MouseDownイベント

- MouseMoveイベント

- MouseUpイベント

- Repositionイベント

- Validateイベント

DragDropイベント

適用対象

Oracle Data Control

説明

フォームまたはコントロール上にあるコントロールをドラッグしてマウス・ボタンを離したか、action引数を2(Drop)に設定してDragメソッドを使用した結果、ドラッグ・アンド・ドロップ操作が完了したときに発生します。

関連項目:

- Dragメソッド

- DragIconプロパティ

- DragModeプロパティ

- DragOverイベント

- MouseDownイベント

- MouseMoveイベント

- MouseUpイベント

DragOverイベント

適用対象

Oracle Data Control

説明

ドラッグ・アンド・ドロップ操作の進行時に発生します。このイベントを使用して、マウス・ポインタが挿入または解放されるタイミングや、有効なターゲット上に配置されるタイミングを監視できます。マウス・ポインタの位置により、このイベントを受け取るターゲット・オブジェクトが決まります。

関連項目:

- Dragメソッド

- DragDropイベント

- DragIconプロパティ

- DragModeプロパティ

- MouseDownイベント

- MouseMoveイベント

- MouseUpイベント

Errorイベント

適用対象

Oracle Data Control

説明

このイベントは、インタラクティブ操作でエラーが発生するたびに発行されます。操作の一部は、データ・コントロール・ボタンなどでデータ・コントロールを直接使用して実行するか、フォームをロードする際のデータ・コントロールの自動リフレッシュ時に実行できます。このような場合、通常のランタイム・エラーのかわりに、Errorイベントが発行されます。

関連項目:

- AddNewメソッド

- Deleteメソッド

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

MouseDownイベント

適用対象

Oracle Data Control

説明

このイベントは、マウス・ボタンが押され(MouseDown)マウス・ポインタがデータ・コントロール上にある場合、またはマウス・ボタンがデータ・コントロールにより取得された場合に常に発行されます。マウス・ボタンがデータ・コントロール上ですでに押されている場合は、対応するMouseUpイベントを受け取るまでマウスが取得された状態になります。

関連項目:

- MouseMoveイベント

- MousePointerプロパティ

- MouseUpイベント

MouseMoveイベント

適用対象

Oracle Data Control

説明

このイベントは、マウス・ポインタがデータ・コントロール上を移動するたびに連続的に発行されます。別のオブジェクトでマウスが取得されないかぎり、コントロールの境界内にマウス位置がある場合は常に、データ・コントロールでMouseMoveイベントを認識します。

関連項目:

- MouseDownイベント

- MousePointerプロパティ

- MouseUpイベント

MouseUpイベント

適用対象

Oracle Data Control

説明

このイベントは、マウス・ボタンが解放され(MouseUp)マウス・ポインタがデータ・コントロール上にある場合、またはマウス・ボタンがデータ・コントロールにより取得された場合は常に発行されます。マウス・ボタンがデータ・コントロール上ですでに押されている場合は、対応するMouseUpイベントを受け取るまでマウスが取得された状態になります。

関連項目:

- MouseDownイベント

- MousePointerプロパティ

- MouseMoveイベント

Repositionイベント

適用対象

Oracle Data Control

説明

このイベントは、データベース・レコードのポインタが新しい位置に移動するたびに発行されます。Validateイベントは、常にRepositionの前に発行されます。

関連項目:

- Errorイベント

- FindFirst、FindLast、FindNextおよびFindPreviousメソッド

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- Validateイベント

Validateイベント

適用対象

Oracle Data Control

説明

このメソッドは様々な状況が生じるときにコールされます。これは、新しいレコード位置への移動、レコードの削除、レコードの追加、ブックマークへの移動、またはセッションでのダイナセットのロールバックが試行されたときに送信されます。Validateは、操作が続行されてなんらかのアクションが行われる前に常にコールされます。

関連項目:

- AddNewメソッド

- Bookmarkプロパティ

- Closeメソッド

- Deleteメソッド

- Editメソッド

- EditModeプロパティ

- FindFirst、FindLast、FindNextおよびFindPreviousメソッド

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- UpdateRecordメソッド

13 データ・コントロール・メソッド

この章では、Oracle Data Controlのメソッドについて説明します。データ・コントロールの概要は、「Oracle Data Control」を参照してください。

関連項目:
詳細は、Microsoft Visual Basicのヘルプおよびマニュアルを参照してください。

内容は次のとおりです。

- Dragメソッド

- Moveメソッド

- Refreshメソッド

- UpdateControlsメソッド

- UpdateRecordメソッド

- ZOrderメソッド

Dragメソッド

適用対象

Oracle Data Control

説明

ドラッグ用のコントロールを開始、終了または取り消します。

関連項目:

- DragDropイベント

- DragIconプロパティ

- DragModeプロパティ

- DragOverイベント

- MousePointerプロパティ

Moveメソッド

適用対象

Oracle Data Control

説明

フォームまたはコントロールを移動します。

関連項目:

- Heightプロパティ

- Leftプロパティ

- Topプロパティ

- Widthプロパティ

Refreshメソッド

適用対象

Oracle Data Control

説明

このメソッドは、データ・コントロール内で参照されるOraDatabaseおよびOraDynasetオブジェクトを再作成します。そして、RecordSourceプロパティからはSQL文を使用し、ConnectおよびDatabaseNameプロパティからは接続情報を使用して、ダイナセットを再確立します。

使用方法

oradata1.Refresh

備考

既存のダイナセットがVisual Basicのオブジェクト変数に割り当てられている場合、Refreshによりデータ・コントロール用に新規のダイナセットが作成されますが、古いダイナセットは、そのダイナセットへのすべての参照が削除されるまで引き続き使用できます。

関連項目:

- Connectプロパティ

- Databaseプロパティ

- OraDatabaseオブジェクト

- OraDynasetオブジェクト

- RecordSourceプロパティ

- SQLプロパティ

UpdateControlsメソッド

適用対象

Oracle Data ControlのRecordsetプロパティ

説明

データ・コントロールのレコードセットからカレント・レコードを取得し、そのデータ・コントロールにバインドされているコントロールに適切なデータを表示します。

使用方法

oradata1.Recordset.UpdateControls

例

注意: このコードの一部は、完全なアプリケーションに配置することが意図されています。このコードの一部は、バインド済コントロールに対する変更を取り消し、データを元の値に復元します。このコードの一部を使用するには、oradata1という名前のデータ・コントロール(正常にリフレッシュ済)を含むフォームの定義セクションにコピーし、KeyPreviewプロパティをTrueに設定します。

Sub Form_KeyDown (KeyCode As Integer, Shift As Integer)

Const KEY_ESCAPE = &H1B
If KeyCode = KEY_ESCAPE Then
oradata1.recordset.UpdateControls
End If
End Sub

備考

このメソッドは、ユーザーがバインド済コントロールへの変更を取り消して、コントロールの内容を元の値に復元できるようにする場合に使用します。

このメソッドは、カレント・レコードを再度カレントにする効果があります。ただし、イベントは発生しません。

注意:
このメソッドは、前バージョンの.VBXコントロールとの下位互換性のために、データ・コントロールのRecordsetのメソッドとしても使用できます。

関連項目:

- Recordsetプロパティ

- UpdateRecordメソッド

UpdateRecordメソッド

適用対象

Oracle Data ControlのRecordsetプロパティ

説明

バインド済コントロールの現在値を保存します。

oradata1.UpdateRecord

備考

このメソッドでは、Validateイベント中にもう1つのValidateイベントを生成せずに、バインド済コントロールの現在値を保存できます。

このメソッドは、Editメソッドを実行し、フィールドを変更し、Updateメソッドを実行する効果があります。ただし、イベントが発生しない場合は除きます。

注意:
このメソッドは、前バージョンの.VBXコントロールとの下位互換性のために、データ・コントロールのRecordsetのメソッドとしても使用できます。

関連項目:

- Editメソッド

- Recordsetプロパティ

- Updateメソッド

- Validateイベント

ZOrderメソッド

適用対象

Oracle Data Control

説明

グラフィカル・レベル内で、指定したフォームまたはコントロールをz-orderの前または後に配置します。

14 データ・コントロール・プロパティ

この章では、Oracle Data Controlのプロパティについて説明します。データ・コントロール・の概要は、「Oracle Data Control」を参照してください。

関連項目:
詳細は、Microsoft Visual Basicのヘルプおよびマニュアルを参照してください。

内容は次のとおりです。

- AllowMoveLastプロパティ

- AutoBindingプロパティ

- BackColorプロパティ

- Captionプロパティ

- Connectプロパティ

- Databaseプロパティ

- DatabaseNameプロパティ

- DirtyWriteプロパティ

- DragIconプロパティ

- DragModeプロパティ

- EditModeプロパティ

- Enabledプロパティ

- Fontプロパティ

- ForeColorプロパティ

- Heightプロパティ

- Indexプロパティ

- Leftプロパティ

- MousePointerプロパティ

- Nameプロパティ

- NoRefetchプロパティ

- Optionsプロパティ

- OracleModeプロパティ

- ReadOnlyプロパティ

- Recordsetプロパティ

- RecordSourceプロパティ

- Sessionプロパティ

- Tagプロパティ

- Topプロパティ

- TrailingBlanksプロパティ

- Visibleプロパティ

- Widthプロパティ

次の各プロパティは、OraDynasetオブジェクトおよびOracle Data Controlに適用されます。

- CacheBlocksプロパティ

- CacheSliceSizeプロパティ

- CacheSlicesPerBlockプロパティ

- FetchLimitプロパティ

- FetchSizeプロパティ

AllowMoveLastプロパティ

適用対象

Oracle Data Control

説明

ユーザーが、Data ControlのMoveLastボタンを使用して最後のレコードに移動可能かどうかを決定します。設計時および実行時に読取り/書込みができます。

使用方法

oradata1.AllowMoveLast = [True | False]

備考

デフォルトでは、AllowMoveLastはTrueです。この場合、最後のレコードへの移動に非常に時間がかかる可能性がある場合でも、レコードの移動に関するユーザーの制限はありません。

AllowMoveLastがFalseの場合、Data ControlのMoveLastボタンは、グレー表示になっており無効です。ただし、最後のレコードに到達した(ユーザーがセットの終わりまで移動したか、コード上で最後のレコードを指すレコード・ポインタに位置付けられたため)後は、ボタンは有効です。これによりユーザーは、問合せ全体がフェッチされているかどうかについて視覚的なフィードバックを得られます。このプロパティをFalseに設定した場合でも、MoveLastメソッドは使用できます。

このプロパティへの変更は、Refreshメソッドがデータ・コントロールに送信された後に有効になります。

データ型

Integer(ブール)

関連項目:

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- Refreshメソッド

AutoBindingプロパティ

適用対象

Oracle Data Control

説明

データベース・オブジェクト・パラメータの自動バインディングを実行するかどうかを決定します。設計時および実行時に読取り/書込みができます。

使用方法

oradata1.AutoBinding = [ True | False

備考

デフォルトではAutoBindingはTrueで、その場合、データ・コントロールのリフレッシュ(SQL文の実行)の前に、OraParametersコレクションのパラメータはRecordSourceプロパティのSQL文にバインドされます。技術的に表すと、パラメータはレコードセットが再作成される際に再バインドされます。

AutobindingのFalse設定は、RecordSourceプロパティのSQL文を再バインドして再実行する必要がある場合にのみ、有効になります。単にパラメータ値を変更してデータ・コントロールをリフレッシュする場合、または単にレコードセットをリフレッシュする場合(SQL文は再実行のみが必要)は該当しません。RecordSourceプロパティを変更してSQL文を変更する場合は該当します。

このプロパティは、パラメータを含まないSQL文の実行時にすべてのパラメータのバインディングを無効にする場合にも使用します(CreateDynaset、RefreshまたはExecuteSQLを使用)。

このプロパティへの変更は、Refreshメソッドがデータ・コントロールに送信された後(および該当条件が適用された後)に有効になります。このプロパティへの変更は、recordset.Refreshが実行される場合は無効です。

データ型

Integer(ブール)

例

この例では、AutoBindingの使用方法と、データ・コントロールおよびレコードセットのリフレッシュに与える影響を示します。このコードをoradata1という名前のOracle Data Controlを含む新規フォームの定義セクションにコピーし、その後、[F5]を押して実行します。

Sub Form_Load ()

'Set the username and password.
oradata1.Connect = "scott/tiger"

'Set the databasename.
oradata1.DatabaseName = "ExampleDb"

'Refresh the data control without setting the RecordSource. This has the
'effect of creatingthe underlying database object so that parameters
'can be added.
oradata1.Refresh

'Set the RecordSource and use a SQL parameter for job.
oradata1.RecordSource = "select * from emp where job = :job"

'Add the job input parameter with initial value MANAGER.
oradata1.Database.Parameters.Add "job", "MANAGER", 1

'Add the deptno input parameter with initial value 10.
oradata1.Database.Parameters.Add "deptno", 10, 1

'Refresh the data control.
oradata1.Refresh

MsgBox "Employee #" & oradata1.Recordset.fields("empno") & ", Job=" & _
oradata1.Recordset.fields("job")

'Only employees with job=MANAGER will be contained in the dynaset.
'Turn off Automatic parameter binding.
oradata1.AutoBinding = False

'Change the value of the job parameter to SALESMAN.
oradata1.Database.Parameters("job").Value = "SALESMAN"

'Refresh ONLY the recordset.
oradata1.Recordset.Refresh

MsgBox "Employee #" & oradata1.Recordset.fields("empno") & ", Job=" & _
oradata1.Recordset.fields("job")

'The query will still execute even with AutoBinding=False
'because the dynaset has not been re-created.
'Set the RecordSource and use a SQL parameter for deptno.
oradata1.RecordSource = "select * from emp where deptno = :deptno"

On Error GoTo paramerr
'Attempt to refresh the data control. An error should occur, because
' AutoBind=False, the SQL statement contains a parameter, and the
'SQL statement needs to be bound before execution.
oradata1.Refresh

Exit Sub

paramerr:
MsgBox oradata1.Database.Session.LastServerErrText
Exit Sub

End Sub

関連項目:

- Addメソッド

- AutoBindDisableメソッド

- AutoBindEnableメソッド

- CreateDynasetメソッド

- ExecuteSQLメソッド

- OraParameterオブジェクト

- OraParametersコレクション

- RecordSourceプロパティ

- Refreshメソッド

BackColorプロパティ

適用対象

Oracle Data Control

説明

オブジェクトの背景色を決定します。

関連項目:
ForeColorプロパティ

Captionプロパティ

適用対象

Oracle Data Control

説明

コントロール内またはコントロール横に表示されるテキストを決定します。

Connectプロパティ

適用対象

Oracle Data Control

説明

データ・コントロールをOracleデータベースに接続するときに使用されるユーザー名およびパスワード。設計時および実行時に読取り/書込みができます。

使用方法

oradata1.Connect = [ username/password

備考

この文字列は、コントロールがリフレッシュされるときにOraSessionオブジェクトのOpenDatabaseメソッドに渡されます。このプロパティへの変更は、Refreshメソッドがデータ・コントロールに送信された後に有効になります。

データ・コントロールをリフレッシュしても、Connectプロパティが指定されていない場合は、リフレッシュは失敗します。

有効なConnectプロパティの例は次のとおりです。

"scott/tiger"
"system/manager"

データ型

String

関連項目:

- OpenDatabaseメソッド

- OraSessionオブジェクト

- Refreshメソッド

Databaseプロパティ

適用対象

Oracle Data Control

説明

データ・コントロールに関連付けられているOraDatabaseオブジェクトを戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

oradatabase = oradata1.Database

備考

データ・コントロールがリフレッシュされていない場合に、このプロパティを参照すると、オブジェクト変数が設定されていませんというランタイム・エラーが発生します。

このプロパティへの変更は、Refreshメソッドがデータ・コントロールに送信された後に有効になります。

データ型

OLEオブジェクト(OraDatabase)

関連項目:

- OraDatabaseオブジェクト

- Refreshメソッド

DatabaseNameプロパティ

適用対象

Oracle Data Control

説明

データ・コントロールをOracleデータベースに接続するときに使用されるOracle SQL*Net指定子プロパティ。設計時および実行時に読取り/書込みができます。

使用方法

oradata1.DatabaseName = [ DatabaseName ]

備考

Oracle SQL*Net指定子には、Oracle SQL*Netプロトコル識別子、Oracle Database名およびオプションのデータベース・インスタンスを含める必要があります。(SQL*Netの別名も使用できます。)この文字列は、コントロールがリフレッシュされるときにOraSessionオブジェクトのOpenDatabaseメソッドに渡されます。このプロパティへの変更は、Refreshメソッドがデータ・コントロールに送信された後に有効になります。

データ・コントロールをリフレッシュしても、DatabaseNameプロパティが指定されていない場合は、リフレッシュは失敗します。

有効なDatabaseNameプロパティの例は次のとおりです。

"t:oracle:PROD"
"p:Oracle10:demo"
"x:orasrv"
"mydbalias"(Where mydbalias represents "t:mfg:prod")

データ型

String

関連項目:

- OpenDatabaseメソッド

- OraSessionオブジェクト

- Refreshメソッド

DirtyWriteプロパティ

適用対象

Oracle Data Control

説明

UpdateおよびDeleteで、読取り一貫性をチェックするかどうかを決定します。

使用方法

oradata1.DirtyWrite = [ True | False ]

データ型

Integer(ブール)

備考

デフォルトではDirtyWriteはFalseで、基礎となるレコードセット/ダイナセット・オブジェクトでUpdateおよびDelete操作における読取り一貫性が保持されます。このプロパティへの変更は、Refreshメソッドがデータ・コントロールに送信された後に有効になります。

DragIconプロパティ

適用対象

Oracle Data Control

説明

ドラッグ・アンド・ドロップ操作で、ポインタとして表示するアイコンを決定します。

関連項目:

- Dragメソッド

- DragDropイベント

- DragModeプロパティ

- DragOverイベント

DragModeプロパティ

適用対象

Oracle Data Control

説明

ドラッグ・アンド・ドロップ操作の手動または自動ドラッグ・モードを決定します。

関連項目:

- Dragメソッド

- DragDropイベント

- DragIconプロパティ

- DragOverイベント

EditModeプロパティ

適用対象

Oracle Data Control

説明

現在の行の現在の編集状態を戻します。設計時には使用できません。実行時は読取り専用です。

使用方法

edit_mode = oradata1.EditMode

備考

使用可能なEditModeプロパティ値は次のとおりです。

定数

値

説明

ORADATA_EDITNONE

0

現在編集中ではありません。

ORADATA_EDITMODE

1

既存行に対して編集が進行中です。

ORADATA_EDITADD

2

新規レコードを追加中のため、コピー・バッファは現在、データベース内の実際の行を表していません。

これらの値はoraconst.txtファイル内にあり、Visual Basicのoraconst.txtファイル内にある類似の定数と一致するようになっています。

このプロパティに影響を与えるメソッドは、Edit、AddNewおよびUpdateのみです。

データ型

Integer

関連項目:

- AddNewメソッド

- Editメソッド

- Updateメソッド

Enabledプロパティ

適用対象

Oracle Data Control

説明

コントロールがユーザー生成イベントに応答可能かどうかを決定します。

関連項目:
Visibleプロパティ

Fontプロパティ

適用対象

Oracle Data Control

説明

データ・コントロールに表示されるテキストに使用するフォント・オブジェクトを決定します。

使用方法

Oradata1.Font.Bold = True

ForeColorプロパティ

適用対象

Oracle Data Control

説明

オブジェクト内のテキストおよび図の表示に使用する前景色を決定します。

関連項目:
BackColorプロパティ

Heightプロパティ

適用対象

Oracle Data Control

説明

オブジェクトの高さを決定します。

関連項目:

- Leftプロパティ

- Moveメソッド

- Topプロパティ

- Widthプロパティ

Indexプロパティ

適用対象

Oracle Data Control

説明

コントロール配列内でコントロールを一意に識別する番号を指定します。コントロールがコントロール配列の一部である場合のみ設計時に使用でき、実行時は読取り専用です。

関連項目:

Tagプロパティ

Leftプロパティ

適用対象

Oracle Data Control

説明

オブジェクトの輪郭線の左端と、それを含むコンテナの左端との距離を決定します。

関連項目:

- Moveメソッド

- Topプロパティ

MousePointerプロパティ

適用対象

Oracle Data Control

説明

実行時、フォームまたはコントロールの特定部分にマウスが存在するときに表示されるマウス・ポインタのタイプを決定します。

関連項目:

- DragIconプロパティ

- MouseMoveイベント

Nameプロパティ

適用対象

Oracle Data Control

説明

フォーム、コントロールまたはデータ・アクセス・オブジェクトを識別するために、コードで使用する名前を指定します。実行時には使用できません。

NoRefetchプロパティ

適用対象

Oracle Data Control

説明

デフォルトではNoRefetchはFalseで、Oracle Databaseによって設定されたデフォルトのデータはローカル・キャッシュに再フェッチされません。ORADB_NO_REFETCHオプションがTrueの場合、デフォルトで基礎となるレコードセットまたはダイナセットはこのプロパティを継承します。

このプロパティへの変更は、Refreshメソッドがデータ・コントロールに送信された後に有効になります。

使用方法

oradata1.NoRefetch = [ True | False ]

データ型

Integer(ブール)

Optionsプロパティ

適用対象

Oracle Data Control

説明

データベース、およびデータ・コントロールに関連付けられているすべてのダイナセットについて1つ以上の特性を決定します。設計時および実行時に読取り/書込みができます。

使用方法

oradata1.Options = database_optionsdatabase_options = oradata1.Options

データ型

Long Integer

備考

このプロパティは、データベースのオプションのモードを設定するために使用されるビット・フラグ文字です。options = 0の場合、デフォルトの設定が適用されます。使用可能なモードは次のとおりです。

- 列デフォルト・モード
デフォルト・モードは、VBモードです。VBモードでは、AddNewまたはEditの使用時、明示的に設定されていないフィールド(列)値はNULLに設定されます。

オプションで、Oracleモードも使用できます。Oracleモードでは、フィールド(列)への変更が、データベースからその変更行を取得することによって、ローカル・ミラーに即時反映され、これにより、Oracle Databaseで列にデフォルトを設定し、必要な計算を実行できます。列デフォルト・モードは、AddNewメソッドおよびEditメソッドの動作に影響します。

- ロック待機モード
デフォルト・モードは、待機モードです。待機モードでは、ダイナセット行の変更を試行すると(Editを使用)、データベースの既存行が、SQL "SELECT ... FOR UPDATE"文を使用して取得され、その行はデータベースでロックされます。変更される行がすでに他のプロセス(またはユーザー)によってロックされている場合、"SELECT ... FOR UPDATE"文は、その行のロックが解除されるまで待機してから処理が実行されます。

オプションで、非待機モードも使用できます。非待機モードの場合、更新対象行がロックされていることを示すエラー・コードが即時に戻されます。

ロック待機モードは、ExecuteSQLを使用して処理されるSQL文にも影響します。

- 再フェッチなしモード
このモードでは、ORADB_ORAMODEの場合と同様、NULLは明示的に挿入されません。ORADB_NO_REFETCHモードでは、データがローカル・キャッシュに再フェッチされないため、パフォーマンスが向上します。

Optionsプロパティのフラグ値

Optionsプロパティのフラグ値は次のとおりです。

定数

値

説明

ORADB_DEFAULT

&H0&

デフォルトの動作を使用します。

ORADB_ORAMODE

&H1&

Oracle Databaseによるデフォルトのフィールド(列)値の設定を許可します。

ORADB_NOWAIT

&H2&

SQLの"SELECT ... の実行時、行ロックで待機はしません。FOR UPDATE"文

これらの値は、oraconst.txtファイルにあります。オプションは、それぞれの値を追加することで組み合せることができます。

このプロパティは、OpenDatabaseメソッドに渡されるオプションと同じです。OpenDatabaseの場合と同様、これらのオプションは、OraDatabaseオブジェクト、およびそのデータベースから作成された関連ダイナセットすべてに影響します。

このプロパティへの変更は、Refreshメソッドがデータ・コントロールに送信された後に有効になります。

関連項目:

- AddNewメソッド

- Editメソッド

- CreateDynasetメソッド

- OpenDatabaseメソッド

- OraDatabaseオブジェクト

- OraDynasetオブジェクト

- Refreshメソッド

OracleModeプロパティ

適用対象

Oracle Data Control

説明

フィールド(列)への変更が、データベースからその変更行を取得することによって、ローカル・ミラーに即時反映されるかどうかを決定します。これにより、Oracleで列にデフォルトを設定し、必要な計算を実行できます。

使用方法

oradata1.OracleMode = [ True | False ]

データ型

Integer(ブール)

備考

このプロパティ値はデフォルトでTrueに設定され、フィールド(列)への変更はローカル・キャッシュに即時反映されます。このプロパティ値への変更は、Refreshメソッドが起動された後に有効になります。データベース・オプションとしてORADB_ORAMODEモードが使用される場合、基礎となるレコードセット/ダイナセットはこのモードを継承します。

ReadOnlyプロパティ

適用対象

Oracle Data Control

説明

読取り専用の操作にダイナセットを使用するかどうかを決定します。設計時および実行時に読取り/書込みができます。

使用方法

oradata1.ReadOnly = [ True | False ]

データ型

Integer(ブール)

備考

デフォルトではReadOnlyはFalseで、データベースからROWIDを選択することにより、更新可能なダイナセットの作成が試行されます。ReadOnlyがTrueに設定された場合、更新不可のダイナセットが作成され(ROWIDはデータベースから選択されず、キャッシュされません)、操作が多少速くなります。

SELECT文にLONGまたはLONG RAW列が含まれている場合は、ダイナセットが更新可能かどうかに関係なく、ROWIDが必要です。

このプロパティへの変更は、Refreshメソッドがデータ・コントロールに送信された後に有効になります。

関連項目:

- CreateDynasetメソッド

- Refreshメソッド

Recordsetプロパティ

適用対象

Oracle Data Control

説明

データ・コントロールのConnect、DatabaseNameおよびRecordSourceプロパティによって定義されたダイナセットを戻します。設計時には使用できず、実行時は読取り/書込みができます。

使用方法

Set oradynaset = oradata1.RecordsetSet oradata1.Recordset = Oradynaset

データ型

OLEオブジェクト(OraDynaset)

備考

このダイナセットのプロパティおよびメソッドは、他のダイナセット・オブジェクトの場合と同じです。Oracle Data Control(.OCX)のRecordsetプロパティは、外部のダイナセット、すなわち別のデータ・コントロールのRecordsetプロパティに設定できます。この設定を行った後、Oracle Data ControlのDatabase、SessionおよびOptionsのプロパティが、外部ダイナセットの対応するプロパティに設定されます。Oracle Data Controlでは、外部ダイナセットのアドバイス・オブジェクトが共有されます。これは、CreatePlsqlDynasetメソッドでPL/SQLカーソルから戻されたダイナセットを添付する場合に役立ちます。

例

この例では、CreatePlsqlDynasetメソッドで作成された外部ダイナセットに対するRecordsetプロパティの設定を示します。この例では、PL/SQLカーソルを、DEPTNOパラメータの様々な値を含む外部ダイナセットとして戻します。対応するストアド・プロシージャ(EMPCUR.SQLにある)が、Oracle Databaseから利用可能であることを確認してください。このコードを、oradata1という名前のOracle Data Controlを含むフォームの定義セクションにコピーします。次に[F5]を押します。

Sub Form_Load ()

'Declare variables as OLE Objects.
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset

'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)

' Create the Deptno parameter
OraDatabase.Parameters.Add "DEPTNO", 10, ORAPARM_INPUT

OraDatabase.Parameters("DEPTNO").ServerType = ORATYPE_NUMBER

' Create OraDynaset based on "EmpCursor" created in stored procedure.
Set OraDynaset = OraDatabase.CreatePLSQLDynaset("Begin Employee.GetEmpData (:DEPTNO,:EmpCursor); end;", "EmpCursor", 0&)

' Now attach the Oradynaset to Data control's recordset.
set oradata1.recordset = OraDynaset

...
'  Do some operation
...

' Now set the deptno value to 20
OraDatabase.Parameters("DEPTNO").Value = 20

'Refresh the sqlstmt
Oradata1.recordset.Refresh

'Remove the parameter.
OraDatabase.Parameters.Remove ("DEPTNO")

End Sub

関連項目:

- Connectプロパティ

- DatabaseNameプロパティ

- MoveFirst、MoveLast、MoveNextおよびMovePreviousメソッド

- OraDynasetオブジェクト

- OraFieldsコレクション

- OraParametersコレクション

- RecordSourceプロパティ

RecordSourceプロパティ

適用対象

Oracle Data Control

説明

データ・コントロールのRecordSetを作成するために使用されるSQL SELECT文。設計時および実行時に読取り/書込みができます。

使用方法

oradata1.RecordSource = [ SQL SELECT Statement ]

データ型

String

備考

このSQL文はSELECT文である必要があり、そうでない場合はエラーが返されます。ビュー、シノニム、列の別名、スキーマ参照、表の結合、ネストしたSELECT文、リモート・データベース参照などの機能を自由に使用でき、オブジェクト名はいかなる方法でも変更されません。

結果のダイナセットが更新可能かどうかは、Oracle SQLの更新可能性規則、付与されているアクセス権、およびReadOnlyプロパティによって決まります。更新可能にするには、次の3つの条件を満たす必要があります。

1. SQL文が単純な列リストまたは列リスト全体(*)を参照すること。

2. SQL文でオプション引数の読取り専用フラグを設定しないこと。

3. Oracleで、問合せで選択された行へのROWID参照を許可していること。

これらの条件を満たさないSQL文でも処理されますが、その結果は更新可能ではなく、ダイナセットのUpdatableプロパティでFalseが戻されます。

このプロパティへの変更は、Refreshメソッドがデータ・コントロールに送信された後に有効になります。

SQLのバインド変数は、OraParametersコレクションと組み合せて使用できます。

このプロパティがNULLまたは空の場合、OraDynasetオブジェクトは作成されませんが、データ・コントロール用にOraSession、OraConnectionおよびOraDatabaseオブジェクトが作成されます。この動作により、ダイナセットの作成の前に、これらのオブジェクトへのアクセスが可能になります。たとえば、NULL RecordSourceを使用し、データベース・オブジェクトをインスタンス化してパラメータを追加できます。その後、RecordSourceプロパティを、データベース・パラメータの自動バインディングを使用して実行時に設定できます。

このプロパティの変更およびRecordSetプロパティのRefreshメソッドのコールにより、新規のダイナセット・オブジェクトが作成されますが、古いダイナセットも、そのダイナセットへの参照がすべて削除されるまで、引き続き使用できます。

例

この例では、データ・コントロールのRecordSourceプロパティのSQLバインド変数(パラメータ)の使用方法を示します。この例を実行するには、oradata1という名前のデータ・コントロールを含むフォームの定義セクションにコードをコピーし、その後[F5]を押します。

Sub Form_Load ()

'Set the username and password.
oradata1.Connect = "scott/tiger"

'Set the databasename.
oradata1.DatabaseName = "ExampleDb"

'Refresh the data control without setting the
' RecordSource. This has the effect of creating

' the underlying database object so that parameters  may be added.
oradata1.Refresh

'Set the RecordSource and use a SQL parameter.
oradata1.RecordSource = "select * from emp where job = :job"

'Add the job input parameter with initial value MANAGER.
oradata1.Database.Parameters.Add "job", "MANAGER", 1

'Refresh the data control.
'Only employees with the job MANAGER will be contained in the dynaset.
oradata1.Refresh

'Change the value of the job parameter to SALESMAN.
oradata1.Database.Parameters("job").Value = "SALESMAN"

'Refresh ONLY the recordset.
'Only employees with the job SALESMAN will be contained in the dynaset.
oradata1.Recordset.Refresh

End Sub

関連項目:

- Connectプロパティ

- DatabaseNameプロパティ

- OraConnectionオブジェクト

- OraDatabaseオブジェクト

- OraDynasetオブジェクト

- OraParametersコレクション

- OraSessionオブジェクト

- Recordsetプロパティ

- Refreshメソッド

- Updatableプロパティ

Sessionプロパティ

適用対象

Oracle Data Control

説明

データ・コントロールに関連付けられているセッション・オブジェクト。設計時には使用できません。実行時は読取り専用です。

使用方法

orasession = oradata1.Session

データ型

OLEオブジェクト(OraSession)

備考

このプロパティは、oradata1.Database.Sessionの参照と同等です。データ・コントロールがリフレッシュされていない場合に、このプロパティを参照すると、オブジェクト変数が設定されていませんというランタイム・エラーが発生します。

関連項目:

- OraDatabaseオブジェクト

- OraSessionオブジェクト

- OraSessionsコレクション

Tagプロパティ

適用対象

Oracle Data Control

説明

アプリケーションで必要となる追加のデータを格納します。

Topプロパティ

適用対象

Oracle Data Control

説明

オブジェクトの輪郭線の上端と、それを含むコンテナの上端との距離を決定します。

関連項目:

- Moveメソッド

- Leftプロパティ

TrailingBlanksプロパティ

適用対象

Oracle Data Control

説明

データベースから取得された文字列データから、後続のブランクを取り除くかどうかを決定します。設計時および実行時に読取り/書込みができます。

使用方法

oradata1.TrailingBlanks = [ True | False ]

データ型

Integer(ブール)

備考

デフォルトでは、TrailingBlanksはFalseです。つまり、データベースから取得された文字列データから後続のブランクが取り除かれます。

このプロパティへの変更は、Refreshメソッドがデータ・コントロールに送信された後に有効になります。

関連項目:

- CreateDynasetメソッド

- Refreshメソッド

Visibleプロパティ

適用対象

Oracle Data Control

説明

オブジェクトの表示、非表示を決定します。

関連項目:
Enabledプロパティ

Widthプロパティ

適用対象

Oracle Data Control

説明

オブジェクトの幅を決定します。

関連項目:

- Heightプロパティ

- Leftプロパティ

- Moveメソッド

- Topプロパティ

A 付録A

この付録の内容は次のとおりです。

- Oracleデータ型

- 追加のスキーマ

Oracleデータ型

次に、各Oracleデータ型のコードを示します。

表A-1 Oracleデータ型コード

Oracleデータ型

コード

ORATYPE_VARCHAR2

1

ORATYPE_NUMBER

2

ORATYPE_SINT

3

ORATYPE_FLOAT

4

ORATYPE_STRING

5

ORATYPE_DECIMAL

7

ORATYPE_LONG

8

ORATYPE_VARCHAR

9

ORATYPE_DATE

12

ORATYPE_REAL

21

ORATYPE_DOUBLE

22

ORATYPE_UNSIGNED8

23

ORATYPE_RAW

23

ORATYPE_LONGRAW

24

ORATYPE_UNSIGNED16

25

ORATYPE_UNSIGNED32

26

ORATYPE_SIGNED8

27

ORATYPE_SIGNED16

28

ORATYPE_SIGNED32

29

ORATYPE_PTR

32

ORATYPE_OPAQUE

58

ORATYPE_UINT

68

ORATYPE_CHAR

96

ORATYPE_CHARZ

97

ORATYPE_BFLOAT

100

ORATYPE_BDOUBLE

101

ORATYPE_CURSOR

102

ORATYPE_ROWID

104

ORATYPE_MLSLABEL

105

ORATYPE_OBJECT

108

ORATYPE_REF

110

ORATYPE_CLOB

112

ORATYPE_BLOB

113

ORATYPE_BFILE

114

ORATYPE_CFILE

115

ORATYPE_RSLT

116

ORATYPE_NAMEDCOLLECTION

122

ORATYPE_COLL

122

ORATYPE_TIMESTAMP

187

ORATYPE_TIMESTAMPTZ

188

ORATYPE_INTERVALYM

189

ORATYPE_INTERVALDS

190

ORATYPE_SYSFIRST

228

ORATYPE_TIMESTAMPLTZ

232

ORATYPE_SYSLAST

235

ORATYPE_OCTET

245

ORATYPE_SMALLINT

246

ORATYPE_VARRAY

247

ORATYPE_TABLE

248

ORATYPE_OTMLAST

320

ORATYPE_RAW_BIN

2000

これらのコードは、ORACLE_BASE\\ORACLE_HOME\oo4oディレクトリにあるoraconst.txtファイルにもリストされています。

追加のスキーマ

例を実行するために他のスキーマが必要な場合があります。これらのスキーマについては、次の項に示します。

OraMetaDataの例で使用されているスキーマ・オブジェクト

この項では、OraMetaDataのスキーマ定義を示します。

CREATE TYPE ORAMD_ADDRESS AS OBJECT ( no NUMBER,
street VARCHAR(60),
state CHAR(2),
zip CHAR(10),
MEMBER PROCEDURE ChangeStreetName(newstreet IN VARCHAR2)
);

LOBデータ型の例で使用されているスキーマ・オブジェクト

OraLOBおよびBFILEの例では、次のスキーマ・オブジェクトが使用されています。スキーマを設定するには、使用中のデータベースでSQLスクリプトORAEXAMP.SQLを実行します。

CREATE TABLE part (
part_id NUMBER,
part_name VARCHAR2(20),
part_image BLOB,
part_desc CLOB,
part_collateral BFILE
);

Create Directory NewDirectoryName as 'C:\valid\path'

OraObjectおよびOraRefの例で使用されているスキーマ・オブジェクト

OraObjectおよびOraRefの例では、次のスキーマ・オブジェクトが使用されています。次の表のデータは、OO4Oのインストールにより提供されるORAEXAMP.SQLスクリプトを使用して挿入できます。

CREATE TYPE address AS OBJECT (
street VARCHAR2(200),
city VARCHAR2(200),
state CHAR(2),
zip VARCHAR2(20)
);

CREATE TYPE person as OBJECT(
name VARCHAR2(20),
age NUMBER,
addr ADDRESS);

CREATE TABLE person_tab of PERSON;
CREATE TABLE customers(
account NUMBER,
aperson REF PERSON);

OraCollectionの例で使用されているスキーマ・オブジェクト

OraCollectionメソッドの例では、次のスキーマが使用されています。

CREATE TYPE ENAMELIST AS VARRAY(20) OF VARCHAR2(30);
CREATE TABLE department (
dept_id NUMBER(2),
name VARCHAR2(15),
ENAMES ENAMELIST);

DROP TYPE COURSE;

CREATE TYPE Course AS OBJECT (
course_no NUMBER(4),
title VARCHAR2(35),
credits NUMBER(1));

CREATE TYPE CourseList AS TABLE OF Course;

CREATE TABLE division (
name VARCHAR2(20),
director VARCHAR2(20),
office VARCHAR2(20),
courses CourseList)
NESTED TABLE courses STORE AS courses_tab;

用語集

BFILE

データベース表領域以外のオペレーティング・システムに格納されている外部バイナリ・ファイル。BFILEはデータベース・セマンティクスから参照され、外部LOBとも呼ばれます。

バイナリ・ラージ・オブジェクト(BLOB)

内容がバイナリ・データで構成されるLOBデータ型。このデータは、その構造がデータベースから認識されないため、RAWとみなされます。

キャラクタ・ラージ・オブジェクト(CLOB)

値がデータベース・キャラクタ・セットに対応する文字データで構成されるLOBデータ型。CLOBには索引が付けられ、Oracle Text検索エンジンによって検索されます。

協定世界時(UTC)

UTCは以前グリニッジ標準時と呼ばれていました。

ラージ・オブジェクト(LOB)

内部LOBと外部LOBに分割されたSQLデータ型のクラス。内部LOBには、BLOB、CLOBおよびNCLOBが含まれ、外部LOBにはBFILEが含まれます。

各国語キャラクタ・ラージ・オブジェクト(NCLOB)

値がデータベースの各国語キャラクタ・セットに対応する文字データで構成されるLOBデータ型。

PL/SQL

SQLを拡張したOracleの手続き型言語。

主キー

表のPRIMARY KEY制約の定義に含まれる1つまたは一連の列。

UTC

UTC(Coordinated Universal Time: 協定世界時)は、以前はグリニッジ標準時と呼ばれていました。

索引
A  B  C  D  E  F  G  H  I  J  L  M  N  O  P  Q  R  S  T  U  V  W  X  Z

A

Absメソッド, 10

アクセス違反, 5.3.3

アクセス

コレクションの要素, 4.5.3

OraObject, 4.4.4.2

OraObject属性, 4.4.2.2

参照可能なインスタンス, 4.4.4.2

OO4Oオートメーション・サーバーへのアクセス, 3.2 Active Server Pages, 1.1, 2.1, 2.4 Active Server PagesでのOO4Oオートメーション, 2.4 ActiveXコントロール, 1.3, 2.8 AddTableメソッド, 3.8.4 Oracle Objects for OLEの拡張機能, 4 アトバンスト・キューイング・インタフェース, 4.6 AllowMoveLastプロパティ, 14 アプリケーション・フェイルオーバー通知, 4.8 アプリケーション通知, 4.8.1 配列処理, 5.1.5 ASP, 1.1, 2.4 非同期デキュー, 4.6.1 AutoBindDisableメソッド, 5.1.4 AutoBindEnableメソッド, 5.1.4 オートメーション・オブジェクト

概要, 8

オートメーション・サーバー, 3.2 複数のオブジェクト参照の回避, 5.1.3

B

BackColorプロパティ, 14

バッチ挿入, 6

BeginTransメソッド, 3.9

バインド変数, 3.8

バインド, 5.1.4

Borland Delphi, 1.5.2

バインド済クラス, 1.4

バッファリング

LOB, 4.3.4

一括収集機能, 5.1.7

C

C++, 1.4

キャッシュ・パラメータ, 5.1.2

キャッシュ, 3.4.1

Captionプロパティ, 14

大量処理メソッド

LONG RAW, 5.1.8

クライアント・アプリケーション, 3 コード例

場所, 2.2

コード・ウィザード

使用, 7.3

コード・ウィザードのコンポーネント, 7.1 コード・ウィザードのデータ型, 7.2 コード・ウィザードの例, 7.4 ストアド・プロシージャ用のコード・ウィザード, 7 コレクションの要素

アクセス, 4.5.3

変更, 4.5.4

コレクション型

データベースからの取出し, 4.5.2

VARRAY, 4.5.5

コレクション, 4.5

OraFields, 5.1.3

COMオートメーション・オブジェクト, 1.2 コマンド

実行, 3.4

CommitTransメソッド, 3.9 OCIの複合オブジェクト検索機能(COR), 4.4.3 コンポーネントの認証

My Oracle Support, 1.7

構成情報, 1.8.2 Connectデータ・コントロール・プロパティ, 14 接続情報

指定の間違い, 5.3.2

接続多重化, 3.3.1 接続プール, 5.1.9 接続プール管理, 3.6 接続プール, 2.4, 5.1.9 connpoolのサンプル(IIS), 2.4 定数ファイル, 2.2.1.3 CreateCustomDynasetメソッド, 5.1.2 CreateSQLメソッド, 3.4.2.1, 3.8, 5.1.5 作成

OraCollectionからのダイナセット, 4.5.6

VARRAYコレクション型, 4.5.5

カスタマイズ, 5.1.2

D

データ・コントロール・レコードセット, 13

データ・コントロール, 2.1

データ定義言語(DDL)文, 3.8.5

データ操作言語(DML)文, 3.4.2

データのストリーム化, 4.3.4

データ型, 4.4

日時, 4.10

間隔, 4.10

OO4Oコード・ウィザードでサポートされているデータ型, 7.2 データベース接続性API, 1.2 Databaseデータ・コントロール・プロパティ, 14 データベース・イベント, 4.7

検出, 4.7

データベース・レコード

更新, 3.4.2.1

データベース・スキーマ・オブジェクト, 4.11 DatabaseNameデータ・コントロール・プロパティ, 14 日時のデータ型, 4.10 DBGrid Control, 2.8 DDL文, 3.8.5 表からの行の削除, 3.4.2.2 demodrp7.sql, 2.2.1 デモ

Excel, 2.5

Oracle Data Control, 2.7

VC++でのOracle Data Control, 2.8

クイック・ツアー, 6

デモ・スキーマ, 2.2

作成, 2.2.1

デモ表

dept, 2.2.1

emp, 2.2.1

dept表, 2.2.1 デキュー, 4.6.1 データベース・イベントの検出, 4.7 LOB型とLONG RAW型の相違, 5.1.8 DirtyWriteプロパティ, 14 パラメータのバインドの無効化, 5.1.4 DML文, 3.4.2 Dragメソッド, 12, 13 DragDropイベント, 12 DragIconプロパティ, 14 DragModeプロパティ, 14 DragOverイベント, 12 Dropメソッド, 12 ダイナセット・オブジェクト

使用, 4.4.4.1.1

ダイナセット

OraCollectionからの作成, 4.5.6

ダイナセット・オブジェクト

使用, 4.4.2.1.1

ダイナセット

使用, 5.1.6

E

OO4OオブジェクトのEarly Binding, 5.1.1

Editメソッド, 13

EditModeプロパティ, 14

emp表, 2.2.1

empcur.sql, 2.2.1.3

Enabledプロパティ, 14

フェイルオーバーの有効化, 4.8.2

パラメータのバインドの有効化, 5.1.4

エラー・コード

ODCERR_AUTOMATION, 5.2.11

Errorデータ・コントロール・イベント, 12 エラー処理, 5.2 エラー

アクセス違反, 5.3.3

アドバンスト・キューイング, 5.2.7

コレクション, 5.2.8

Findメソッドの解析, 5.2.3

ソフトウェアが正しくインストールされていない, 5.3.1

インストール, 5.3.3

ネットワーク・エラー, 5.3.2

非ブロック化, 5.2.2

OLEオートメーション, 5.2.1

OLEの初期化またはOLEオートメーション, 5.3.1

Oracle, 5.2.10

Oracle Data Control, 5.2.11

Oracle LOB, 5.2.6

Oracle Number, 5.2.9

Oracleオブジェクト・インスタンス, 5.2.5

問題解決, 5.3

イベント

データベース, 4.7

ExampleDb, 2.2.1 例, 2.1, 2.2.1.3

コード・ウィザード, 7.4

Excelでのデモ, 2.5 ExcelでのOO4Oオートメーション, 2.5 ExecuteSQLメソッド, 3.4.2.1, 3.8, 5.1.5 コマンドの実行, 3.4 データ定義言語(DDL)文の実行, 3.8.5 メソッドの実行

OraObject, 4.4.2.4

PL/SQLブロックの実行, 3.8

F

フェイルオーバー, 4.8

有効化, 4.8.2

通知, 4.8.2

フェイルオーバー通知の登録, 4.8.1 機能

拡張, 4

新しい, Preface

フェッチ・パラメータ, 5.1.2 FetchLimitプロパティ, 5.1.2 ファイルの場所, 1.5 Findメソッド, 5.2.2

解析機能エラー, 5.2.3

ランタイム・エラー, 5.2.3

Fontプロパティ, 14 ForeColorプロパティ, 14

G

global.asaファイル, 2.4

グリッド・コントロール, 1.3

H

Heightプロパティ, 14

I

IIS, 2.1

IIS Active Server Pages, 1.1

IIS Microsot Internet Information Server, 2.4

ソフトウェアが正しくインストールされていない

エラー, 5.3.1

接続情報の指定の間違い, 5.3.2 Indexデータ・コントロール・プロパティ, 14 InProcServer Type Library, 2.3 入力変数, 4.1 複数行の挿入, 3.4.2.3 表への新しい行の挿入, 3.4.2.3 インストール, 1.5 インストール・エラー, 5.3.3 インスタンス・エラー, 5.2.5 インタフェース

OO4O, 4.3.1

取出し, 4.2.1

間隔のデータ型, 4.10

J

Javaストアド・プロシージャ, 7

L

ラージ・オブジェクト, 5.1.8

ラージ・オブジェクト(LOB)

使用, 4.3

LastServerErrプロパティ, 5.2.1, 5.2.10 LastServerErrTextプロパティ, 5.2.10 Leftプロパティ, 14 LOBバッファリング, 4.3.4 LOBデータ

複数ピース読込み操作, 4.3.6

読込み, 4.3.6

書込み, 4.3.5

LOBデータの単一ピース読込み操作, 4.3.6 LOBデータ型

サポート, 4.1

LOB, 5.1.8

データ型, 4.3.1

データベースからの取出し, 4.3.3

使用, 4.3

LONG, 5.1.8 LONG RAW

大量処理メソッド, 5.1.8

移行, 5.1.8

型, 5.1.8

LONG型, 5.1.8

M

メッセージ

エンキュー, 4.6

監視, 4.6.1

メソッド

AutoBindDisable, 5.1.4

AutoBindEnable, 5.1.4

CreateCustomDynaset, 5.1.2

CreateSQL, 5.1.5

ExecuteSQL, 5.1.5

Find, 5.2.2, 5.2.3

サーバー, 10

MFC AppWizard, 2.8 Microsoft Access, 1.5.2 Microsoftデータ・コントロール, 1.3 Microsoft Foundation Classes, 1.4 Microsoft Information Server, 2.1 Microsoft Internet Information Server(IIS), 1.5.2 Microsoft Internet Service Manager, 2.4 Microsoft Transaction Serverのサポート, 3.10 Microsoft VC++, 1.8, 2.8 Microsoft Visual Basic

Microsoft Excel, 1.5.2

LONG RAWからLOBまたはBFILEへの移行, 5.1.8 属性の変更

OraObject, 4.4.4.3

参照可能なインスタンス, 4.4.4.3

変更

コレクションの要素, 4.5.4

OraObject属性, 4.4.2.3

MonitorForFailoverメソッド, 4.8.1 監視

メッセージ, 4.6.1

MonitorStartメソッド, 4.6.1 MonitorStopメソッド, 4.6.1 MouseDownイベント, 12 MouseMoveイベント, 12 MousePointerプロパティ, 14 MouseUpイベント, 12 Moveデータ・コントロール・メソッド, 13 MTSのサポート, 3.10 multicur.sql, 2.2.1.3 複数のOracleホーム、システム要件, 1.5 複数行, 3.4.2.3 複数ピース操作, 4.3.4 複数ピース読込み操作, 4.3.6 複数ピース書込み操作, 4.3.5 多重化, 3.3.1 My Oracle Support, 1.7

N

Nameデータ・コントロール・プロパティ, 14

ネストした表, 4.1, 4.5

ネットワーク別名

ExampleDb, 2.2.1

ネットワーク・サービスの別名, 2.2.1 ネットワーク・トリップ, 5.1.7

削減, 5.1.5, 5.1.6

非ブロック化エラー, 5.2.2 非ブロック・モード, 4.6.1 NoRefetchプロパティ, 14 通知

アプリケーション・フェイルオーバー, 4.8, 4.8.1

O

オブジェクト・データ型, 4.4

オブジェクト・リレーショナル機能

サポート, 4.1

オブジェクト

OraBLOB、OraCLOB, 5.2.6

OraCollection, 5.1.7

OraCollectionエラー, 5.2.8

OraDynaset, 5.1.3, 5.1.7

OraField, 5.1.3

OraObject, 5.2.5

OraParamArray, 5.1.5, 5.1.7

OraParameter, 5.1.4

オブジェクト, 9 ODBC, 1.2 ODCERR_AUTOMATIONのエラー・コード, 5.2.11 oiplang.msb, 1.8.2 oipVER.dll, 1.8.2 OLEオートメーション・エラー, 5.2.1 OLEの初期化またはOLEオートメーションのエラー, 5.3.1 OO4Oオートメーション・サーバー, 3.2 OO4Oコード・ウィザード

要件, 1.5.3

使用, 7.3

OO4Oコード・ウィザードのコンポーネント, 7.1 OO4Oコード・ウィザードの例, 7.4 OO4Oコード・ウィザードのVisual Basicウィザード, 7.3.2 OO4Oファイルの場所, 1.6 OO4Oインプロセス・オートメーション・サーバー, 1.2, 5.2.1 OO4Oのメソッド, 10 OO4Oのオブジェクト, 9 OO4Oの再配布可能ファイル, 1.8 OO4Oのサーバー・メソッド, 10 OO4Oのサーバー・プロパティ, 11 OO4OCodeWiz.exe, 7.3 oo4oparm.regファイル, 1.8.2 oorodemo.aspファイル, 2.4 オプション・フラグ, 2.2.1.3 options

ORADYN_NOCACHE, 5.1.6

ORADYN_READONLY, 5.1.6

Optionsデータ・コントロール・プロパティ, 14 OraAQインタフェース, 4.6 OraAQオブジェクト, 4.6.1 OraAQMsgオブジェクト, 4.6 OraAttributesインタフェース, 4.4.1 OraBLOBとOraCLOB

オブジェクト, 5.2.6

使用, 4.3.2

Oracleアドバンスト・キューイング・エラー, 5.2.7 Oracle Call Interface(OCI), 4.4.3 Oracle Client, 1.5.2 Oracleコレクション・エラー, 5.2.8 Oracleコレクション, 4.5 Oracle Data Control, 1.3, 1.8.2, 2.2.1, 2.8

要件, 1.5.3

プロパティの設定, 2.7.2

Oracle Data Controlのデモ, 2.7 Oracle Data Controlエラー, 5.2.11 Oracle Data Controlのイベント, 12

DragDrop, 12

DragOver, 12

Error, 12

MouseDown, 12

MouseMove, 12

MouseUp, 12

Reposition, 12

Validate, 12

Oracle Data Controlのメソッド, 13

Drag, 13

Move, 13

Refresh, 13

UpdateControls, 13

UpdateRecord, 13

ZOrder, 13

Oracle Data Controlのプロパティ, 14

AllowMoveLast, 14

AutoBindingプロパティ, 14

BackColor, 14

Caption, 14

Connect, 14

Database, 14

DatabaseName, 14

DirtyWrite, 14

DragIcon, 14

DragMode, 14

EditMode, 14

Enabled, 14

Font, 14

ForeColor, 14

Height, 14

Index, 14

Left, 14

MousePointer, 14

Name, 14

NoRefetch, 14

Options, 14

OracleMode, 14

ReadOnly, 14

Recordset, 14

RecordSource, 14

Session, 14

Tag, 14

Top, 14

TrailingBlanks, 14

Visible, 14

Width, 14

Visual BasicでのOracle Data Control, 2.7 Oracleエラー, 5.2.10 Oracleインプロセス・サーバーのタイプ・ライブラリ, 1.5.3 Oracle LOBエラー, 5.2.6 Oracle LOB、オブジェクトおよびコレクション, 4.2.1

インスタンス化, 4.2

Oracleネットワークのエラー, 5.3.2 Oracle Numberエラー, 5.2.9 Oracleオブジェクト・インスタンス・エラー, 5.2.5 Oracle Objects for OLE(OO4O)の概要, 1.1 Oracle Objects for OLE C++クラス・ライブラリ, 1.4 Oracle Objects for OLEのサーバー・メソッド, 10 Oracle Objects for OLEのサーバー・オブジェクト, 9 Oracle Objects for OLEのサーバー・プロパティ, 11 Oracle Universal Installer, 1.5.2, 1.8 OracleMetaLink, 1.7 OracleModeプロパティ, 14 oraclm32.dll, 1.8 OraCollection, 4.5 OraCollectionインタフェース, 4.5.1 OraCollectionオブジェクト, 5.1.7, 5.2.8

ダイナセットの作成, 4.5.6

oraconst.txt, 2.2.1.3 OraDatabaseオブジェクト

プール, 5.1.9

プール、パフォーマンス、ASPアプリケーション, 3.6

OraDatabaseオブジェクト, 13 ORADCコントロール, 2.8 oradc.ocx, 1.8, 1.8.2 ORADYN_NOCACHEオプション, 3.4.1, 5.1.6 ORADYN_READONLYオプション, 5.1.6 OraDynaset

オブジェクト, 13

XML, 4.9

OraDynasetオブジェクト, 5.1.3, 5.1.7

使用, 4.3.3

oraexamp.sql, 2.2.1.3 OraFieldオブジェクト, 5.1.3 OraFieldsコレクション, 5.1.3 OraMetaDataオブジェクト, 4.11 OraObjectインタフェース, 4.4.1

使用, 4.4.2

OraObjectオブジェクト, 4.4

アクセス, 4.4.4.2

属性へのアクセス, 4.4.2.2

メソッドの実行, 4.4.2.4

インスタンス・エラー, 5.2.5

属性の変更, 4.4.4.3

属性の変更, 4.4.2.3

取出し, 4.4.2

OraParamArrayオブジェクト, 5.1.5, 5.1.7 OraParameterオブジェクト, 5.1.4

使用, 4.4.4.1.2

OraRefインタフェース

概要, 4.4.3

使用, 4.4.4

OraRefオブジェクト, 4.4 OraSQLStmt, 3.4.2.1 ORATYPE_CURSOR, 3.8.3 出力変数, 4.1

P

パラメータのバインド, 5.1.4

パラメータ・オブジェクト

使用, 4.3.3, 4.4.2.1.2

ParameterArrays, 3.4.2.3 パフォーマンス, 3.4.1, 3.4.2.1, 3.8, 5.1.2

LOBに関する考慮, 4.3.4

向上, 5.1.6

PL/SQLバインド変数, 3.8 PL/SQLブロック

実行, 3.8

PL/SQL一括収集機能, 5.1.7 PL/SQLカーソル変数, 3.8.3, 3.8.3 PL/SQLプロシージャ, 5.1.4, 7 PL/SQLのサポート, 3.8 PL/SQL表

戻す方法, 3.8.4

処理

配列, 5.1.5

プロパティ, 11

FetchLimit, 5.1.2

LastServerErr, 5.2.1, 5.2.10

LastServerErrText, 5.2.10

プロパティ値, 2.2.1.3

Q

問合せ, 3.4.1

キューイング, 4.6

クイック・ツアー, 6

R

ReadOnlyプロパティ, 14

Recordsetデータ・コントロール・プロパティ, 14

RecordSourceデータ・コントロール・プロパティ, 13, 14

ラウンドトリップの削減, 5.1.5

REF

データベースからの取出し, 4.4.4.1

参照可能なインスタンス, 4.4.4.2, 4.4.4.3 Refreshデータ・コントロール・メソッド, 13 Refreshメソッド, 3.8 Repositionイベント, 12 必要な設定, 1.5 Required Support Files(RSF), 1.5.2 要件

OO4Oコード・ウィザード, 1.5.3

Oracle Data Control, 1.5.3

取出し

インタフェース, 4.2.1

取出し

コレクション型, 4.5.2

データベースからのLOB, 4.3.3

OraObject, 4.4.2

REF, 4.4.4.1

PL/SQL表を戻す方法, 3.8.4 ラウンドトリップ, 4.3.4, 5.1.7

削減, 5.1.5, 5.1.6

ランタイム・エラー, 5.2.3

S

サンプル・アプリケーション

クイック・ツアー, 6

スキーマ・オブジェクト, 4.11 scottスキーマ, 2.2.1 scott/tiger, 2.2 SELECT文, 3.4.1 サーバー・メソッド, 10 サーバー・プロパティ, 11 Sessionデータ・コントロール・プロパティ, 14 プログラムによるOracle Data Controlのプロパティの設定, 2.7.2 設定

必要な, 1.5

単一ピース操作, 4.3.4 単一ピース読込み操作, 4.3.6 単一ピース書込み操作, 4.3.5 sqldembld7.sql, 2.2.1 Microsoft Transaction Serverのサポート, 3.10 PL/SQLのサポート, 3.8 システム要件, 1.5.2

T

Tagプロパティ, 14

tnsnames.oraファイル, 2.2.1

Topプロパティ, 14

TrailingBlanksプロパティ, 14

トランザクション制御, 3.9

問題解決, 5.3

チューニング, 5.1.2

Type Library, 2.3

型, 5.1.8

LONG RAW, 5.1.8

U

Universal Installer, 1.5.2, 1.8

データベース・レコードの更新, 3.4.2.1

Updateメソッド, 13

UpdateControlsメソッド, 13

UpdateRecordメソッド, 13

ファイルの更新と登録, 1.8.2

使用

Dynasetオブジェクト, 4.4.4.1.1

OraParameterオブジェクト, 4.4.4.1.2

OraRefインタフェース, 4.4.4

ダイナセット・オブジェクトの使用, 4.4.2.1.1 パラメータ・オブジェクトの使用, 4.4.2.1.2 オートメーション・クライアントの使用, 2.1 Microsoft C++の使用, 2.6 OO4OオートメーションのActive Server Pages(ASP)での使用, 2.4 OO4OオートメーションのExcelでの使用, 2.5 OO4OオートメーションのVisual Basicでの使用, 2.3 OraBLOBとOraCLOBの使用, 4.3.2 OraObjectインタフェースの使用, 4.4.2 読取り専用、前方参照用のダイナセットの使用, 5.1.6 OO4Oコード・ウィザードの使用, 7.3 Oracle Data ControlのMS VC++での使用, 2.8 Oracle Data ControlのVisual Basicでの使用, 2.7 PL/SQL一括収集機能の使用, 5.1.7

V

Validateイベント, 12, 12, 13

VARRAYコレクション型

作成, 4.5.5

VARRAY, 4.1, 4.5 Visibleプロパティ, 14 Visual Basic, 1.1, 5.1.1, 12, 13, 14 Visual Basic for Applications, 1.1 Visual BasicでのOO4Oオートメーション, 2.3 コード・ウィザードのVisual Basicウィザード・アドイン, 7.3.2 Visual Basic、Excel, 2.1 Visual C++, 1.4, 2.6, 2.8 Visual C++、JavaScript, 1.1

W

Widthプロパティ, 14

Windows 2000, 1.5.2

Windowsレジストリのパラメータ, 5.1.2

Windows Server 2003, 1.5.2

Windows Vista, 1.5.2

Windows XP, 1.5.2

書込み

LOBデータ, 4.3.5

X

XML

生成, 4.9

OraDynasetからのXML, 4.9 XMLのサポート, 4.9 XSLT, 4.9

Z

Z順序, 13

ZOrderメソッド, 13

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2013, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

制限付権利

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション（人的傷害を発生させる可能性があるアプリケーションを含む）への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性（redundancy）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。