DABroker for C⁺⁺

手引・文法書

3020-6-032-80

目　　次

前書き

変更内容

はじめに

1.　DABroker for C++の概要

1.1　DABroker for C++の役割・位置付け

1.1.1　DABroker for C++の役割・位置付け

1.1.2　アクセスできるDBMS

1.2　特長

1.3　提供C++クラス

1.3.1　データベースアクセスクラス

1.3.2　エラー処理クラス

1.4　データベースアクセスの基礎知識

1.4.1　ResultSet

1.4.2　データベースへの接続と切断

1.4.3　同期・非同期処理

1.4.4　トランザクションと排他制御

1.4.5　繰り返し列

1.5　簡易版クラスのデータベースアクセス

1.5.1　提供クラスとオブジェクト

1.5.2　データベースとの接続と切断

1.5.3　レコードの検索

1.5.4　検索レコードの参照

1.5.5　レコードの更新

1.5.6　レコードの削除

1.5.7　レコードの追加

1.5.8　繰り返し列へのアクセス

1.5.9　テーブルの定義と削除

1.5.10　DBRResultSet仮想関数の利用

1.6　詳細版クラスのデータベースアクセス

1.6.1　提供クラスとオブジェクト

1.6.2　データベースとの接続と切断

1.6.3　レコードの検索

1.6.4　検索レコードの参照

1.6.5　レコードの更新

1.6.6　レコードの削除

1.6.7　レコードの追加

1.6.8　繰り返し列へのアクセス

1.6.9　テーブルの定義と削除

1.6.10　テーブル定義情報の参照

1.6.11　ストアドプロシジャの利用

2.　データベースアクセス

2.1　データベースへの接続と切断

2.1.1　データベースへの接続

2.1.2　データベースとの切断

2.2　同期・非同期処理

2.2.1　同期・非同期処理を選択するメソッド

2.2.2　非同期処理の完了確認

2.2.3　非同期処理実行中にエラーとなるメソッド

2.3　トランザクションと排他制御

2.3.1　一つのDBMSを対象にトランザクション制御を行う方法

2.3.2　複数のDBMSを対象にトランザクション制御を行う方法（TPBrokerのOTS機能を使用する場合）

2.3.3　複数のDBMSを対象にトランザクション制御を行う方法（OpenTP1を使用する場合）

2.3.4　排他制御

2.4　エラー処理

2.4.1　基本的なアプリケーションのエラー処理

2.5　簡易版クラスのデータベースアクセス

2.5.1　レコードの検索

2.5.2　検索レコードの参照

2.5.3　レコードの更新

2.5.4　レコードの削除

2.5.5　レコードの追加

2.5.6　DBRResultSet仮想関数の利用

2.6　詳細版クラスのデータベースアクセス

2.6.1　レコードの検索

2.6.2　検索レコードの参照

2.6.3　レコードの更新

2.6.4　レコードの削除

2.6.5　レコードの追加

2.6.6　ストアドプロシジャの利用

2.7　繰り返し列へのアクセス

2.7.1　検索条件としての要素の利用

2.7.2　繰り返し列の参照

2.7.3　ResultSetを利用した要素の更新

2.7.4　パラメタを利用した要素の一括更新

2.7.5　SQL文を利用した要素の更新

2.8　XDM/SDへのアクセス

2.8.1　XDM/SD接続機能とは

2.8.2　排他制御

2.8.3　データベースアクセス時の制限

2.8.4　注意事項

3.　アプリケーションの作成

3.1　ヘッダーファイル

3.2　ビルド方法

3.2.1　HP-UXの場合のビルド方法

3.2.2　AIXの場合のビルド方法

3.2.3　Red Hat Linuxの場合のビルド方法

3.2.4　Windowsの場合のビルド方法（Visual C++ 5.0，Visual C++ 6.0の場合）

3.2.5　Windowsの場合のビルド方法（Visual C++ .NET 2003，Visual Studioの場合）

3.3　アプリケーション作成上の留意点

3.3.1　オブジェクトの生成と削除

3.3.2　データベースアクセスリソース数の制限

3.3.3　検索性能の向上策

3.3.4　BLOB型データの取得方法についての制限

3.3.5　検索中のCommit,Rollbackについて

3.3.6　signal使用時の注意

3.3.7　Visual C++ 6.0以降使用時の注意

3.3.8　暗黙のsetlocale関数の実行

3.3.9　?パラメタに文字列を指定する場合の注意

3.3.10　データベースへの接続処理の複数スレッド同時実行

4.　簡易版関数詳細

4.1　文法の説明順序

メソッド名

4.2　簡易版クラスの概要

4.3　DBRDatabaseクラスの詳細

DBRDatabaseコンストラクタ

Closeメソッド

Commitメソッド

Connectメソッド

ExecuteDirectメソッド

GetArrayDataFactoryメソッド

GetErrorStatusメソッド

InWaitForDataSourceメソッド

IsClosedメソッド

Rollbackメソッド

WaitForDataSourceメソッド

4.4　DBRResultSetクラスの詳細

DBRResultSetコンストラクタ

Absoluteメソッド

Bottomメソッド

Closeメソッド

Deleteメソッド

Editメソッド

Executeメソッド

GetArraySizeメソッド

GetCurrentメソッド

GetCurrentOfResultSetメソッド

GetErrorStatusメソッド

GetFieldメソッド

GetFieldCountメソッド

GetFieldCTypeメソッド

GetFieldDBTypeメソッド

GetFieldNameメソッド

GetFieldPrecisionメソッド

GetFieldScaleメソッド

GetFieldTypeメソッド

GetMaxRowsメソッド

GetParamメソッド

GetParamCountメソッド

GetRowCountメソッド

InExecuteメソッド

IsEOFメソッド

IsFieldNullメソッド

IsParamNullメソッド

Nextメソッド

OnBeforeRefreshメソッド

OnEndRecordメソッド

OnMoveRecordメソッド

Openメソッド

PageNextメソッド

Previousメソッド

Refreshメソッド

Relativeメソッド

SetFieldメソッド

SetFieldNullメソッド

SetMaxRowsメソッド

SetParamメソッド

SetParamNullメソッド

SetParamTypeメソッド

Topメソッド

Updateメソッド

WaitForDataSourceメソッド

5.　詳細版関数詳細

5.1　文法の説明順序

プロパティ名，又はメソッド名

5.2　詳細版で利用できるクラスの概要

5.3　DBDriverManagerクラスの詳細

Driverメソッド

InitializeMessageメソッド

RemoveDriverメソッド

RemoveTransactionメソッド

Transactionメソッド

5.4　DBDriverクラスの詳細

Connectメソッド

GetDriverTypeメソッド

GetErrorStatusメソッド

Parentメソッド

Removeメソッド

RemoveConnectionメソッド

5.5　DBConnectionクラスの詳細

Closeメソッド

Connectメソッド

CreateCallableStatementメソッド

CreatePreparedStatementメソッド

CreateStatementメソッド

EraseTransactionメソッド

ExecuteDirectメソッド

GetArrayDataFactoryメソッド

GetErrorStatusメソッド

GetMetaDataメソッド

GetNameメソッド

InWaitForDataSourceメソッド

IsClosedメソッド

Parentメソッド

RegisterTransactionsメソッド

Removeメソッド

RemoveCallableStatementメソッド

RemovePreparedStatementメソッド

RemoveStatementメソッド

Transactionメソッド

WaitForDataSourceメソッド

5.6　DBStatementクラスの詳細

Executeメソッド

GetErrorStatusメソッド

GetFieldCountメソッド

GetMaxFieldSizeメソッド

GetMaxRowsメソッド

GetNameメソッド

GetResultSetメソッド

GetResultSetMetaDataメソッド

GetUpdateRowsメソッド

InExecuteメソッド

Parentメソッド

Removeメソッド

RemoveResultSetメソッド

SetMaxFieldSizeメソッド

SetMaxRowsメソッド

SetResultSetTypeメソッド

WaitForDataSourceメソッド

5.7　DBResultSetクラスの詳細

Absoluteメソッド

Bottomメソッド

Deleteメソッド

Editメソッド

FindColumnメソッド

GetCurrentメソッド

GetCurrentOfResultSetメソッド

GetErrorStatusメソッド

GetFieldメソッド

GetMetaDataメソッド

GetRowCountメソッド

InExecuteメソッド

IsEOFメソッド

IsNullメソッド

Nextメソッド

PageNextメソッド

Parentメソッド

Previousメソッド

Refreshメソッド

Relativeメソッド

Removeメソッド

SetFieldメソッド

SetNullメソッド

Topメソッド

Updateメソッド

WaitForDataSourceメソッド

5.8　DBResultSetMetaDataクラスの詳細

GetArraySizeメソッド

GetColumnCountメソッド

GetColumnCTypeメソッド

GetColumnDBTypeメソッド

GetColumnNameメソッド

GetColumnPrecisionメソッド

GetColumnScaleメソッド

GetColumnTypeメソッド

Parentメソッド

5.9　DBPreparedStatementクラスの詳細

Executeメソッド

ExecuteUpdateメソッド

GetErrorStatusメソッド

GetFieldCountメソッド

GetMaxFieldSizeメソッド

GetMaxRowsメソッド

GetNameメソッド

GetParamメソッド

GetParamCountメソッド

GetResultSetメソッド

GetResultSetMetaDataメソッド

GetUpdateRowsメソッド

InExecuteメソッド

IsNullメソッド

Parentメソッド

Removeメソッド

RemoveResultSetメソッド

SetInsertRowsメソッド

SetMaxFieldSizeメソッド

SetMaxRowsメソッド

SetNullメソッド

SetParamメソッド

SetParamTypeメソッド

SetResultSetTypeメソッド

WaitForDataSourceメソッド

5.10　DBCallableStatementクラスの詳細

Executeメソッド

GetErrorStatusメソッド

GetMaxFieldSizeメソッド

GetMaxRowsメソッド

GetNameメソッド

GetOutputParamsメソッド

GetParamメソッド

GetParamCountメソッド

GetResultSetメソッド

InExecuteメソッド

IsCompletedメソッド

IsNullメソッド

Parentメソッド

Removeメソッド

RemoveResultSetメソッド

Resumeメソッド

SetMaxFieldSizeメソッド

SetMaxRowsメソッド

SetNullメソッド

SetParamメソッド

SetProcedureメソッド

SetResultSetTypeメソッド

WaitForDataSourceメソッド

5.11　DBDatabaseMetaDataクラスの詳細

GetColumnsメソッド

GetErrorStatusメソッド

GetPrimaryKeysメソッド

GetProceduresメソッド

GetProcedureColumnsメソッド

GetTablesメソッド

InExecuteメソッド

Parentメソッド

5.12　DBTransactionクラスの詳細

BeginTransメソッド

Commitメソッド

GetNameメソッド

InTransactメソッド

Parentメソッド

Removeメソッド

Rollbackメソッド

SetAutoCommitメソッド

5.13　classListTablesクラスの詳細

Countプロパティ

OwnerNameメソッド

Qualifierメソッド

Remarksメソッド

TableNameメソッド

Typeメソッド

5.14　classListColumnsクラスの詳細

Countプロパティ

ArraySizeメソッド

ColumnNameメソッド

CTypeメソッド

DBTypeメソッド

Nullableメソッド

Precisionメソッド

Remarksメソッド

Scaleメソッド

Typeメソッド

Uniquenessメソッド

5.15　classListProceduresクラスの詳細

Countプロパティ

Defineメソッド

OwnerNameメソッド

ProcedureNameメソッド

Qualifierメソッド

Remarksメソッド

5.16　classListProcedureColumnsクラスの詳細

Countプロパティ

ColumnNameメソッド

ColumnTypeメソッド

CTypeメソッド

DBTypeメソッド

Nullableメソッド

Precisionメソッド

Remarksメソッド

Scaleメソッド

Typeメソッド

5.17　classListPrimaryKeysクラスの詳細

Countプロパティ

ColumnNameメソッド

KeyNameメソッド

OwnerNameメソッド

Sequenceメソッド

TableNameメソッド

6.　共通関数詳細

6.1　DBSQLCAクラスの詳細

Countプロパティ

ErrorMessageプロパティ

e_SQLCODEプロパティ

e_SQLCOUNTプロパティ

e_SQLERRORプロパティ

e_SQLSTATEプロパティ

e_USERCODEプロパティ

e_USERERRORプロパティ

RetCodeプロパティ

Deleteメソッド

GetErrorMessageメソッド

GetRetCodeメソッド

GetSQLCODEメソッド

GetSQLCOUNTメソッド

GetSQLERRORメソッド

GetSQLSTATEメソッド

GetUSERCODEメソッド

GetUSERERRORメソッド

6.2　DBRArrayDataFactoryクラス

CreateArrayDataメソッド

6.3　DBRArrayDataクラス

Createメソッド

GetArrayCountメソッド

GetDataメソッド

GetDataTypeメソッド

GetPrecisionメソッド

GetScaleメソッド

SetDataメソッド

SetNullメソッド

6.4　DBRArrayDataPtrクラス

DBRArrayDataPtrコンストラクタ

~DBRArrayDataPtrデストラクタ

operator=

operator-＞

operator*

IsNullメソッド

6.5　DBRArrayDataConstPtrクラス

DBRArrayDataConstPtrコンストラクタ

~DBRArrayDataConstPtrデストラクタ

operator=

operator-＞

operator*

IsNullメソッド

7.　データ型

7.1　クラスライブラリで扱うデータ型と変換規則

7.1.1　クラスライブラリで使用するデータ型とC++のデータ型との関係

7.1.2　データ型のサイズと範囲

7.1.3　戻り値とDBMSでのデータ型の対応

7.1.4　C++とDBMSのデータ型の対応

7.1.5　データ型変換規則

7.1.6　DBMSのデータ型と識別子との対応

7.2　DBR_BINARY型を使用したVARCHARデータの取得方法

7.2.1　DBR_BINARY型の構造体とメンバに設定される値

8.　トラブルシューティング

8.1　手順

8.1.1　トラブルシューティングについて

8.1.2　トレースログ採取のための設定

8.1.3　トレースファイルの見方

8.2　C++クラスライブラリのエラー情報

8.2.1　C++クラスライブラリで発生するエラー情報

8.2.2　DB_ERROR_DAB_ILLEGAL_VALUEでの詳細コード

付録

付録A　セットアップ

付録A.1　DABroker for C++の組み込み(UNIXの場合)

付録A.2　DABroker for C++の組み込み(Windowsの場合)

付録B　用語解説

索引

[他社商品名称に関する表示]

All Rights Reserved. Copyright (C) 1998, 2015, Hitachi, Ltd.

前書き

■ 対象製品

P-F2463-23541　 DABroker for C++　 02-12（適用OS：Windows2000，Windows XP Professional，Windows XP Professional x64 Edition，Windows Server 2003，Windows Server 2003 x64 Edition，Windows Server 2003 R2，Windows Server 2003 R2 x64 Edition，Windows Server 2008，Windows Server 2008 R2，Windows Server 2012，Windows Server 2012 R2，Windows Vista，Windows 7，Windows 8，Windows 8.1）
P-F1B63-23511　 DABroker for C++　 02-07（適用OS：HP-UX 11.0，HP-UX 11i，HP-UX 11i V2(PA-RISC)，HP-UX 11i V3(PA-RISC)）
P-F1J63-24511　 DABroker for C++　 02-08（適用OS：HP-UX 11i V2.0(IPF)，HP-UX 11i V3.0(IPF)）
P-F1M63-22511　 DABroker for C++　 02-07（適用OS：AIX 5L V5.1，AIX 5L V5.2，AIX 5L V5.3，AIX V6.1，AIX V7.1）
P-F8163-23511　 DABroker for C++　 02-10（適用OS：Red Hat Enterprise Linux AS 4 (x86)，Red Hat Enterprise Linux ES 4(x86)，Red Hat Enterprise Linux AS 4 (AMD64 & Intel EM64T)，Red Hat Enterprise Linux ES 4(AMD64 & Intel EM64T)，Red Hat Enterprise Linux 5 Advanced Platform (x86)，Red Hat Enterprise Linux 5 (x86)，Red Hat Enterprise Linux 5 Advanced Platform (AMD/Intel 64)，Red Hat Enterprise Linux 5 (AMD/Intel 64)，Red Hat Enterprise Linux Server 6(32-Bit x86)，Red Hat Enterprise Linux Server 6(64-Bit x86_64)）

これらのプログラムプロダクトのほかにもこのマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。

■ 輸出時の注意

本製品を輸出される場合には、外国為替及び外国貿易法の規制並びに米国輸出管理規則など外国の輸出関連法規をご確認の上、必要な手続きをお取りください。
なお、不明な場合は、弊社担当営業にお問い合わせください。

■ 商標類

Adaptive Serverは，Sybase, Inc.の商標です。
CORBAは，Object Management Groupが提唱する分散処理環境アーキテクチャの名称です。
HP-UXは，Hewlett-Packard Development Company, L.P.のオペレーティングシステムの名称です。
IBM，AIXは，世界の多くの国で登録されたInternational Business Machines Corporationの商標です。
IBM，VisualAgeは，世界の多くの国で登録されたInternational Business Machines Corporationの商標です。
Itaniumは，アメリカ合衆国およびその他の国におけるIntel Corporationの商標です。
Linuxは，Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
Microsoftは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
ODBCは，米国Microsoft Corporationが提唱するデータベースアクセス機構です。
OracleとJavaは，Oracle Corporation 及びその子会社，関連会社の米国及びその他の国における登録商標です。
Pentiumは，アメリカ合衆国およびその他の国におけるIntel Corporationの商標です。
Red Hatは，米国およびその他の国でRed Hat, Inc. の登録商標もしくは商標です。
Sybase SQL Anywhereは，Sybase，Inc.の商標です。
Visual C++は，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windowsは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Serverは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
X/Openは，The Open Groupの英国ならびに他の国における登録商標です。
その他記載の会社名，製品名は，それぞれの会社の商標もしくは登録商標です。

■ 発行

2015年 4月　3020-6-032-80

■ 著作権

All Rights Reserved. Copyright (C) 1998, 2015, Hitachi, Ltd.

変更内容

変更内容（3020-6-032-80）　DABroker for C++ 02-12

追加・変更内容 | 変更個所
HiRDBのBinary属性をサポートしました。 | 4.4，5.8，5.9，7.1.3，7.1.6，付録B

変更内容（3020-6-032-80）　DABroker for C++ 02-10

追加・変更内容 | 変更個所
Oracle 12cをサポートしました。 | 1.1.2
Red Hat Enterprise Linux Server 6をサポートしました。 | 3.2.3，6.1，7.1.5，付録A.1
Windows 7，Windows 8，Windows Server 2012をサポートしました。 | 3.2.4，3.2.5，7.1.5，付録A.2

単なる誤字・脱字などはお断りなく訂正しました。

変更内容（3020-6-032-70）　P-F2463-22541 DABroker for C++　02-07，P-F1J63-24511 DABroker for C++　02-07，P-F9D63-22511 DABroker for C++　02-07，P-F9D63-23511 DABroker for C++　02-07，P-F1M63-22511 DABroker for C++　02-07

追加・変更内容

アクセスできるDBMSにOracle10gを追加しました。

セットアップコマンド実行での注意を追加しました。

変更内容（3020-6-032-70）　P-F1J63-24511 DABroker for C++　02-07

追加・変更内容

HP-UX(IPF)の場合のコンパイルオプションとリンクオプションを追加しました。

DABroker for C++ が提供するファイルを追加しました。

libdabcpp32.so(HP-UX(IPF)版)

変更内容（3020-6-032-60）　P-F1M63-22511 DABroker for C++　02-05，P-F1M63-22711 Cosminexus DABroker for C++　02-05

追加・変更内容

シングルスレッドに対応する機能を追加しました。

SQL Server2000へのアクセスをサポートしました。

OTSインタフェースを使ってトランザクション制御をする場合の記述を削除しました。

変更内容（3020-6-032-60）　P-F1B63-23511 DABroker for C++　02-04，P-F1B63-23711 Cosminexus DABroker for C++　02-04

追加・変更内容

検索したレコードに対するロック方法でTYPE_EXCLUSIVE2へのアクセスをサポートしました。

変更内容（3020-6-032-60）　P-F1L63-23511 DABroker for C++　02-04

追加・変更内容

P-F1B63-23511　02-04と同等の機能を持つP-F1L63-23511を発行しました。

変更内容（3020-6-032-60）　P-F2463-22541 DABroker for C++　02-03，P-F2463-22741 Cosminexus DABroker for C++　02-03

追加・変更内容

HiRDBクライアント環境定義の環境変数を指定できる機能を追加しました。

Oracle9iへのアクセスをサポートしました。

はじめに

このマニュアルは，次に示すプログラムプロダクトが提供するクラスライブラリを使ったアプリケーションの作成方法と，各クラスライブラリの文法について説明したものです。

P-F2463-23541　DABroker for C++

P-F1B63-23511　DABroker for C++

P-F1J63-24511　DABroker for C++

P-F1M63-22511　DABroker for C++

P-F8163-23511　DABroker for C++

対象読者

DABroker for C++を使って，データベースをアクセスするサーバアプリケーションを開発する方を対象としています。

また，C++言語，及び使用するDBMSについてある程度の知識をお持ちの方を対象としています。

マニュアルの構成

このマニュアルは，次に示す章と付録から構成されています。

第１章 DABroker for C++の概要

DABroker for C++の役割・位置付けや特長について説明しています。また，どのようなデータベースアクセスができるサーバアプリケーションが作成できるかについても説明しています。

第２章 データベースアクセス

簡易版，詳細版データベースアクセス方法について，コーディング例を使って説明しています。

第３章 アプリケーションの作成

DABroker for C++クラスライブラリを利用した，アプリケーションの作成方法について説明しています。

第４章 簡易版関数詳細

簡易版のクラスライブラリごとに，プロパティやメソッドを詳細に説明しています。

第５章 詳細版関数詳細

詳細版のクラスライブラリごとに，プロパティやメソッドを詳細に説明しています。

第６章 共通関数詳細

簡易版と詳細版で共通のクラスライブラリについて，プロパティやメソッドを詳細に説明しています。

第７章 データ型

C++クラスライブラリのインタフェースで使うデータ型について説明しています。

第８章 トラブルシューティング

エラー発生時のトレースログの採取方法や，出力されるメッセージの意味について説明しています。

付録A セットアップ

DABroker for C++の環境設定について説明しています。

付録B 用語解説

DABrokerで使用する用語について説明しています。

関連マニュアル

このマニュアルの関連マニュアルを次に示します。また，これ以外にも使用するDBMSに応じてその製品のマニュアルを参照してください。

DABrokerのマニュアル

DBMSのマニュアル

使用するDBMSがHiRDB Version 7の場合

スケーラブルデータベースサーバ HiRDB Version 7 システム運用ガイド（UNIX(R)用）（3000-6-274）

スケーラブルデータベースサーバ HiRDB Version 7 システム運用ガイド（Windows(R)用）（3020-6-274）

スケーラブルデータベースサーバ HiRDB Version 7 UAP開発ガイド（UNIX(R)/Windows(R)用）（3000-6-276）

スケーラブルデータベースサーバ HiRDB Version 7 SQLリファレンス（UNIX(R)/Windows(R)用）（3000-6-277）

使用するDBMSがHiRDB Version 8の場合

スケーラブルデータベースサーバ HiRDB Version 8 システム運用ガイド（UNIX(R)用）（3000-6-354）

スケーラブルデータベースサーバ HiRDB Version 8 システム運用ガイド（Windows(R)用）（3020-6-354）

スケーラブルデータベースサーバ HiRDB Version 8 UAP 開発ガイド（3020-6-356）

スケーラブルデータベースサーバ HiRDB Version 8 SQL リファレンス（3020-6-357）

使用するDBMS がHiRDB Version 9の場合

スケーラブルデータベースサーバ HiRDB Version 9 システム運用ガイド（UNIX(R)用）（3000-6-454）

スケーラブルデータベースサーバ HiRDB Version 9 システム運用ガイド（Windows(R)用）（3020-6-454）

スケーラブルデータベースサーバ HiRDB Version 9 UAP 開発ガイド（3020-6-456）

スケーラブルデータベースサーバ HiRDB Version 8 SQL リファレンス（3020-6-457）

使用するDBMSがVOS3 XDM/RD E2などの場合

データマネジメントシステム XDM E2系 解説（6190-6-620）

データマネジメントシステム XDM E2系 システム定義（6190-6-625）

Database Connection Server（6190-6-648）

使用するDBMSがSQL/Kの場合

ファイル運用（650-3-151）

SQL/K（650-3-241）

Database Connection Server（650-3-243）

使用するDBMSが上記以外の場合

使用するDBMSのマニュアルを参照してください。

TPBrokerのマニュアル（TPBrokerのOTS機能を利用する場合）

トランザクショナル分散オブジェクト基盤 TPBrokerユーザーズガイド(3000-3-660)

トランザクショナル分散オブジェクト基盤 TPBroker for Java OTSガイド（3000-3-661）

読書手順

このマニュアルでの表記

このマニュアルでは，製品名称，及び名称について次のように表記します。

製品名称又は名称 | 表記
AIX 5L | AIX | UNIX
AIX V6.1
AIX V7.1
HP-UX 11.0 | HP-UX(PA-RISC) | HP-UX
HP-UX 11i
HP-UX 11i V2(PA-RISC)
HP-UX 11i V3(PA-RISC)
HP-UX 11i V2(IPF) | HP-UX(IPF)
HP-UX 11i V3(IPF)
Red Hat Enterprise Linux AS4.0 | Red Hat Linux
Red Hat Enterprise Linux ES4.0
Red Hat Enterprise Linux 5
Red Hat Enterprise Linux 5 Advanced Platform
Red Hat Enterprise Linux Server 6
Common Object Request Broker Architecture | CORBA
Database Management System | DBMS
HiRDB Version 7 | HiRDB
HiRDB Version 8
HiRDB Version 9
Itanium(R) Processor Family | IPF
Microsoft(R) SQL Server | SQL Server
Microsoft(R) Visual C++(R) 5.0 | Visual C++
Microsoft(R) Visual C++(R) 6.0
Microsoft(R) Visual C++(R) .NET 2003
Microsoft(R) Visual Studio(R) 2010 | Visual Studio
Microsoft(R) Visual Studio(R) 2013
Microsoft(R) Windows(R) XP | Windows XP | Windows
Microsoft(R) Windows Server(R) 2003, Standard Edition | Windows Server 2003
Microsoft(R) Windows Server(R) 2003, Enterprise Edition
Microsoft(R) Windows Server(R) 2003, Datacenter Edition
Microsoft(R) Windows Server(R) 2003 R2, Standard Edition
Microsoft(R) Windows Server(R) 2003 R2, Enterprise Edition
Microsoft(R) Windows Server(R) 2003 R2, Datacenter Edition
Microsoft(R) Windows Vista(R) Business | Windows Vista
Microsoft(R) Windows Vista(R) Enterprise
Microsoft(R) Windows Vista(R) Ultimate
Microsoft(R) Windows 7(R) Professional | Windows 7
Microsoft(R) Windows 7(R) Enterprise
Microsoft(R) Windows 7(R) Ultimate
Windows 8(R) Pro | Windows 8
Windows 8(R) Enterprise
Windows 8.1(R) Pro | Windows 8.1
Windows 8.1(R) Enterprise
Microsoft(R) Windows Server(R) 2008 Standard | Windows Server 2008
Microsoft(R) Windows Server(R) 2008 Enterprise
Microsoft(R) Windows Server(R) 2008 Datacenter
Microsoft(R) Windows Server(R) R2 2008 Standard
Microsoft(R) Windows Server(R) R2 2008 Enterprise
Microsoft(R) Windows Server(R) R2 2008 Datacenter
Microsoft(R) Windows Server(R) 2012 Standard | Windows Server 2012
Microsoft(R) Windows Server(R) 2012 Datacenter
Microsoft(R) Windows Server(R) 2012 R2 Standard
Microsoft(R) Windows Server(R) 2012 R2 Datacenter
Microsoft(R) Windows(R) 2000 Professional Operating System | Windows 2000
Microsoft(R) Windows(R) 2000 Server Operating System
Microsoft(R) Windows(R) 2000 Advanced Server Operating System
Microsoft(R) Windows(R) 2000 Datacenter Server Operating System
Open Database Connectivity | ODBC
Operating System | OS
Oracle 8 | ORACLE
Oracle 8i
Oracle 9i
Oracle 10g
Oracle 10g R2
Oracle 11g
Oracle 11g R2
Oracle 12c
Object Transaction Service | OTS
Sybase Adaptive Server Anywhere | Adaptive Server Anywhere
Sybase SQL Anywhere | SQL Anywhere
VOS3 ACE3 E3 | ACE3
VOS3 XDM/RD E2 | XDM/RD
VOS3 XDM/SD E2 | XDM/SD
VOS K RDB編成ファイル | SQL/K
HiRDB：BLOB型 | BLOB型
HiRDB：BINARY型
ORACLE：LONGRAW型
SQL Anywhere：LONG BINARY型
SQL Anywhere：IMAGE型
Adaptive Server Anywhere：LONG BINARY型
Adaptive Server Anywhere：IMAGE型
Adaptive Server Anywhere：javaserialization,java.lang.Object
SQL Server：IMAGE型

特に，それぞれの製品についての記述が必要な場合は，そのまま表記します。

KB（キロバイト）などの単位表記について

1KB （キロバイト），1MB （メガバイト），1GB （ギガバイト），1TB （テラバイト）はそれぞれ 1,024 バイト，1,024²バイト，1,024³バイト，1,024⁴バイトです。

1.　DABroker for C++の概要

この章ではDABroker for C++の役割・位置付けや特長について説明しています。また，提供するC++クラスライブラリがどのような分類で分けられるか，更にこれらのC++クラスを使って，どのようなアプリケーションを作成できるかについても説明しています。

＜この章の構成＞

1.1　DABroker for C++の役割・位置付け

1.2　特長

1.3　提供C++クラス

1.4　データベースアクセスの基礎知識

1.5　簡易版クラスのデータベースアクセス

1.6　詳細版クラスのデータベースアクセス

1.1　DABroker for C++の役割・位置付け

DABroker for C++は，DABrokerの付加プログラムプロダクトであり，データベースにアクセスするサーバアプリケーションを作成するためのC++クラスライブラリを提供します。

＜この節の構成＞

1.1.1　DABroker for C++の役割・位置付け

1.1.2　アクセスできるDBMS

1.1.1　DABroker for C++の役割・位置付け

DABroker for C++の位置付けを図1-1に示します。

図1-1　DABroker for C++の位置付け

DABroker for C++を利用して開発するアプリケーションは，主にサーバ上で稼働し，サーバ上のデータベース，及びメインフレームのデータベースにアクセスできます。クライアントで動作するアプリケーションでの利用も可能です。

なお，DABroker全体の概要については，マニュアル「DABroker」を参照してください。

1.1.2　アクセスできるDBMS

アプリケーションからは，次のDBMSをアクセスできます。なお，ネットワーク経由で，ほかのマシンのデータベースも利用できます。

HiRDB

ORACLE
Windows版：Oracle 9i，Oracle 10g，Oracle10g R2，Oracle 11g，Oracle 11g R2，Oracle 12cにアクセスできます。
Red Hat Linux版：Oracle 9i，Oracle 10g，Oracle10g R2，Oracle 11g，Oracle 11g R2にアクセスできます。
AIX 版：Oracle 8i，Oracle 9i，Oracle 10g，Oracle10g R2，Oracle 11g，Oracle 11g R2にアクセスできます。
HP-UX（PA-RISC）版：Oracle 8i，Oracle 9i，Oracle 10g，Oracle10g R2，Oracle 11g，Oracle 11g R2にアクセスできます。
HP-UX（IPF）版：Oracle 9i，Oracle 10g，Oracle10g R2，Oracle 11g，Oracle 11g R2にアクセスできます。

Sybase SQL Anywhere，Adaptive Server Anywhere
Windows版のDABrokerからSybase SQL Anywhere，及びAdaptive Server Anywhereにアクセスできます。

Microsoft SQL Server
Windows版のDABrokerからMicrosoft SQL Serverにアクセスできます。

メインフレーム系データベース
HP-UX（PA-RISC），又はWindows版のDABrokerからRDA Link for Gatewayを経由して，次のメインフレーム環境のデータベースにアクセスできます。

VOS3 XDM/RD E2

また，DABrokerからDatabase Connection Serverを経由して，メインフレーム環境のデータベースにアクセスすることもできます。接続できるデータベースを次に示します。

VOS3 XDM/RD E2

VOS3 XDM/SD E2

VOS K SQL/K

1.2　特長

DABroker for C++の特長を次に示します。

＜この節の構成＞

(1)　コーディング量を少なくできるクラスライブラリ

(2)　マルチスレッド処理

(3)　複数データベースアクセス

(4)　TPBrokerのOTS機能を使ったトランザクション制御

(5)　データベースに依存しないエラー処理の実現

(6)　抽象データ型へのアクセス

(1)　コーディング量を少なくできるクラスライブラリ

データベースアクセス用のC++クラスを提供します。このC++クラスは，データベースへのアクセスをオブジェクト指向のインタフェースでカプセル化しています。このため，C++クラスを使えば，データベースへアクセスするためのアプリケーションを，「埋め込みSQL」や「CLI (Call Level Interface)」のような手続き型のインタフェースでコーディングするより，少ない手続きで作成することができます。このクラスを使うと，次のようなことができます。

検索データの参照と更新

任意のSQL文の実行

トランザクション制御

テーブル情報の取得

どのようなクラスが提供されているかは，「1.3 提供C++クラス」を参照してください。

(2)　マルチスレッド処理

アプリケーションは，データベースアクセスを同期で処理するか非同期で処理するかを選択できます。非同期処理では，時間の掛かるSQL処理を要求してもすぐにアプリケーションに制御を戻すことができ，DBMSでデータの処理をしている間に，アプリケーションで別の処理を進めたりすることができます。アプリケーションからの非同期指定のデータベースアクセス要求は，マルチスレッドで処理されます。

(3)　複数データベースアクセス

複数のデータベースにアクセスするアプリケーションを作成できます。複数の同一種別のDBMS，複数種別のDBMSのどちらにもアクセスできます。

(4)　TPBrokerのOTS機能を使ったトランザクション制御

一つのトランザクションで複数のデータベースを更新するようなCORBAアプリケーションを開発する場合に，データベース間の整合性を保つためのOTS機能を利用できます。

OTS機能を使う場合は，別途TPBrokerが必要です。

(5)　データベースに依存しないエラー処理の実現

DBMSの種別を意識しないでデータベース接続時のユーザID不正，ロックエラーなどが判断できます。

(6)　抽象データ型へのアクセス

HiRDBの抽象データ型は，オブジェクトを格納できる型であり，このオブジェクトデータを扱う専用のプログラムもユーザが任意に定義できます。

1.3　提供C++クラス

DABrokerが提供するクラスライブラリはデータベースアクセスクラスとエラー処理クラスの２種類に分かれます。

＜この節の構成＞

1.3.1　データベースアクセスクラス

1.3.2　エラー処理クラス

1.3.1　データベースアクセスクラス

データベースアクセスクラスには簡易版と詳細版の二つのタイプがあります。

簡易版クラスは,２種類のオブジェクトでデータベースをアクセスするためのクラスです。

詳細版クラスは,データベースを木目細かくアクセスするためのクラスであり，簡易版と比較して，ストアドプロシジャを利用するためのクラスや，テーブル名，フィールド名などの定義情報を参照するクラスが追加されています。

また，DBMSがHiRDBで，繰り返し列へアクセスする場合にだけ利用できる四つのクラスもあります。これらのクラスは，簡易版と詳細版の両方で利用できるクラスです。

各クラスについて次に説明します。

＜この項の構成＞

(1)　簡易版クラス

(2)　詳細版クラス

(3)　簡易版と詳細版の共通のクラス

(1)　簡易版クラス

簡易版クラスでは下記に示すデータベースアクセスができます。

データの検索と更新・削除（?パラメタ使用可）

任意のSQLの実行

トランザクション制御

(2)　詳細版クラス

詳細版クラスでは下記に示すデータベースアクセスができます。

データの検索と更新・削除（?パラメタ使用可）

任意のSQLの実行（?パラメタ使用可）

トランザクション制御

ストアドプロシジャの利用

テーブル,フィールド,プロシジャ,プライマリキー情報などの参照

(3)　簡易版と詳細版の共通のクラス

繰り返し列を扱うためのクラスで，下記に示すデータベースアクセスができます。

要素への値の設定

要素の値の取得

1.3.2　エラー処理クラス

データベースアクセス時にエラーが発生した場合，このエラー処理クラスを利用してエラーの情報を取得できます。このクラスは簡易版クラスと詳細版クラスの両方で使用できます。

1.4　データベースアクセスの基礎知識

この節では，DABrokerが提供するC++クラスライブラリを利用する上で必要となる基礎知識について説明します。

ResultSet

データベースへの接続と切断

トランザクションと排他制御

同期・非同期処理

繰り返し列

＜この節の構成＞

1.4.1　ResultSet

1.4.2　データベースへの接続と切断

1.4.3　同期・非同期処理

1.4.4　トランザクションと排他制御

1.4.5　繰り返し列

1.4.1　ResultSet

ResultSetとは，レコードのアクセスに使うもので，検索したレコードがResultSetへ格納されます。ResultSetは，論理的な仮想の表として見ることができ，アプリケーションからは，このResultSet中の任意のレコードにカーソルを位置付け，データ取得用のメソッドを呼び出すことで，フィールドの値を参照します。

図1-2にResultSetのイメージ図を示します。

図1-2　ResultSetのイメージ図

1.4.2　データベースへの接続と切断

データベースをアクセスするには，そのデータベースの種類や存在する場所などの情報が必要であり，この情報は，DABroker本体の接続先データベース定義ファイルで定義します。

DABroker for C++を利用するアプリケーションでは，ここで定義されたデータベース種別名，データベース名を使用して接続するため，データベース種別の変更や稼働サーバ変更などの影響を受け難い形態となっています。

DABroker for C++では，データベースの接続先の情報を持つオブジェクトを生成し，Connectメソッドでデータベースと接続します。このConnectメソッドでは，ユーザID/パスワードなどを指定します。

データベースとの接続は，オブジェクトの削除やCloseメソッドで切断します。

1.4.3　同期・非同期処理

DABrokerによるデータベースアクセスでは，データベースアクセスを非同期に実行することも簡単にできるインタフェースになっています。

同期・非同期処理の選択は，DBMSとの接続の際に呼び出すConnectメソッドの引数で指定します。

＜この項の構成＞

(1)　同期処理

(2)　非同期処理

(1)　同期処理

同期処理が指定された場合，DABrokerはSQL文の処理要求を受け付けると，アプリケーションに制御を戻さないまま，DBMSに対してSQL文の処理を要求します。アプリケーションに制御が戻るのは，SQL文の処理が完了した時点です。

(2)　非同期処理

非同期処理が指定された場合，DABrokerはアプリケーションからのSQL文の処理要求を受け取ると，制御をいったんアプリケーションに戻し，同時にスレッドを生成してDBMSに対してSQL文の処理を要求します。

したがって，アプリケーションでは，複数のSQL文の処理を同時に行うことが可能であり，性能対策に効果があります。この複数のスレッドを生成して行う処理を，DABrokerではマルチスレッド処理と呼びます。

アプリケーションでは，非同期処理の完了待ちや実行中であるかなどの確認を，クラスの提供するメソッドを利用して行えます。

非同期アクセスの例を図1-3に示します。

図1-3　非同期アクセスの例

1.4.4　トランザクションと排他制御

＜この項の構成＞

(1)　トランザクション制御

(2)　排他制御

(3)　排他エラーとデッドロック

(1)　トランザクション制御

DABroker for C++を使ったトランザクション制御には二つの方法があります。一つ目は， DABroker for C++のクラスライブラリを使ってトランザクションを制御する方法であり，一つのDBMSを対象にトランザクション制御ができます。二つ目は，CORBAアプリケーションの場合にTPBrokerのOTS機能を使ってトランザクションを制御する方法であり，複数のDBMSを対象にトランザクション制御ができます。

データベースを更新するアプリケーションでは，DBMSごとに必ずどちらかのトランザクション制御を設定してください。

(a)　一つのDBMSを対象にトランザクション制御を行う方法

簡易版クラスと詳細版クラスでは，トランザクションの制御方法が異なります。簡易版クラスは，Connectメソッドを実行するとそのオブジェクトはトランザクション開始状態になります。詳細版クラスでは，トランザクション制御の有無を選択可能できます。トランザクション制御するには，DBTransactionクラスの，BeginTransメソッド，Commitメソッド，Rollbackメソッドを使用して制御します。

(b)　複数のDBMSを対象にトランザクションの同期制御を行う方法

複数のデータベースに対して更新する場合，障害が発生したときでも複数のデータベース間で矛盾がないよう2相コミットと呼ばれる方法で，複数のDBMSに対して同期を取り，コミット又はロールバックすることが可能です。コミット処理中に障害が発生した場合でも，トランザクション内のすべての変更処理を矛盾なく自動的にロールバックできます。

DABrokerとTPBrokerのOTS機能を組み合わせてこのトランザクション制御を備えたシステムが構築できます。

(2)　排他制御

データベースのテーブルは，複数のアプリケーションからアクセスされます。このような環境で動作するアプリケーションでは，レコードの排他制御を意識したデータベースアクセスを行う必要があります。レコードの排他を意識したアプリケーションを設計しないと，データベースシステム全体の性能が低下するなどの影響が出ます。

排他制御は，データベースの検索・更新方法にもよりますが，基本的にResultsetを使用したデータベースアクセスで意識する必要があります。

DABroker for C++では，下記の排他方法を提供しています。

更新目的の検索
排他の種類として，TYPE_EXCLUSIVEを指定します。基本的に，SELECT文には"FOR UPDATE"が付加され，検索したレコードはロックされます。

参照目的の検索
TYPE_NONEを指定します。この指定は，SQL実行時に排他オプションは付加されず，ロック方法は，対象となるデータベースのデフォルトとなります。

ダーティリード
TYPE_NOWAITを指定します。この指定は，レコードにどの種類のロックが掛かっていても，レコードを検索する（ダーティリード）オプションです。このため，読み取りの一貫性は保証されません。

データベースごとに排他の機能や利用方法が異なるので，上記の方法がすべてのデータベースで利用できるわけではありません。排他制御については，正しく理解して利用することが必要です。

(3)　排他エラーとデッドロック

データベースをアクセスするアプリケーションでは，必ず，排他エラーとデッドロックを意識する必要があります。

この排他エラーとデッドロックのエラーコードは，DBMSによって異なりますが，DABrokerでは，このエラーコードの違いを吸収し，アプリケーションでは，DBMSを意識することなくエラー処理を記述できます。

(a)　排他エラーとは

排他エラーとは，アプリケーションがデータベースをアクセスしようとした時に，アクセス対象のレコードが，他のアプリケーションにロックされている状態を意味しています。この状態が発生した時に，待ちとするか，エラー報告するかを選択できる機能を提供しています。

(b)　排他エラー処理形態の設定

排他待ちが発生した時の処理方法を，データベース接続時のConnectメソッドで指定できます。

LOCK_OPT_WAIT
ロックが解除されるまで待つ

LOCK_OPT_NOWAIT
ロックされていた場合は，すぐにDB_ERROR_DRIVER_ERRORのエラーをスロー

これ以外に，ロックされていたときのエラースロー時に，ロールバックするかどうかを指定する， LOCK_OPT_WITH_ROLLBACK, LOCK_OPT_WITHOUT_ROLLBACKがありますが，使用するDBMSによって動作が異なるため，詳細については「4.簡易版関数詳細」又は「5.詳細版関数詳細」のConnectメソッドを参照してください。

(c)　デッドロックとは

二つ以上のトランザクションが二つ以上の資源の確保をめぐって互いに相手を待つ状態となり，そこから先へ処理が進まなくなることをデッドロックといいます。

デッドロックは，アプリケーションからアクセスするテーブルやレコードの処理する順番が統一されていない場合やロック範囲が広い場合など，さまざまなケースで発生します。

デッドロック状態となることを防ぐ目的で，DBMSは，一つのアプリケーションにデッドロックを通知します。このデッドロック状態を通知されたアプリケーションは，すみやかにロールバックし，ロックしているレコードを解放する必要があります。

データベースアクセス中にデッドロックが発生するとエラーがスローされ，DBSQLCAクラスのe_USERCODEに20002，e_USERERRORにエラーメッセージが設定されます。

1.4.5　繰り返し列

ここでは，DABroker for C++から繰り返し列へアクセスするための基礎知識として，SQL文を使った，繰り返し列のデータ操作について説明します。

繰り返し列は，図1-4に示すように，複数の要素（データ）を一つのフィールド値として持てるフィールドのことです。図の例では，資格及び趣味のフィールドを繰り返し列としています。1レコード目の資格フィールド（繰り返し列）には三つの要素があるといい，要素を特定するために，配置されている順に要素番号が1から付けられます。また，情報処理第1種，映画鑑賞，旅行などの各データを要素の値といいます。例えば，1レコード目の資格フィールドで，要素番号1の要素の値は「情報処理第1種」となります。

図1-4　繰り返し列を使ったテーブル

次に，上記の社員表テーブルを作成する場合の，テーブル定義及び複数列インデックス定義のSQL文の例を示します。

CREATE TABLE 社員表
      (氏名ID CHAR(4) NOT NULL,           --NULL値不可
       性別   SMALLINT(1) NOT NULL,       --NULL値不可
       資格   NCHAR(15)  ARRAY[3],
                            --フィールド値として持てる最大要素数3
       趣味   NCHAR(15)  ARRAY[4]);
                            --フィールド値として持てる最大要素数4
CREATE INDEX 資格趣味 ON 社員表(資格，趣味);

以下に，繰り返し列のあるテーブルへのデータアクセスについて説明します。

＜この項の構成＞

(1)　レコードの検索

(2)　レコードの追加

(3)　レコードの更新

(4)　レコードの削除

(1)　レコードの検索

繰り返し列の各要素の値を検索の条件として利用できます。SQL文は以下のように指定します。

// 資格の「ネットワーク」，趣味の「旅行」の，両方の条件を満たす氏名IDを検索
SELECT 氏名ID FROM 社員表
       WHERE ARRAY(資格，趣味) [ANY] ( 資格 =N'ネットワーク'
                                                    AND 趣味 =N'旅行' );

検索の条件に繰り返し列の要素の値を使う場合は，そのフィールドに対して複数列インデクスが定義されている必要があります。

(2)　レコードの追加

繰り返し列を持つレコードを追加する際には，その要素の指定順序を考慮する必要があります。ARRAYで指定した順に要素は配置されます。

// 社員IDがZ004のレコードを追加
INSERT INTO 社員表
       VALUES ('Z004',
                1,
                ARRAY[N'英語検定',N'ネットワーク']
                ARRAY[N'パソコン',N'旅行',N'音楽鑑賞',N'ギター']);

(3)　レコードの更新

繰り返し列を更新する場合はSQLのUPDATE文を使いますが，繰り返し列の更新は，次の三つの場合に分けられます。

新しく要素を追加する。

既存の要素を更新する。

既存の要素を削除する。

(a)　要素の追加(ADD句)

フィールド値に要素を追加します。[*]を指定することによって，要素は最後に追加されます。

(例)

// Z002レコードの資格フィールドの最後の要素位置に，「データベース」を追加
UPDATE 社員表
       ADD 資格[*]  =ARRAY [N'データベース']
       WHERE 氏名ID =Z002；

(b)　要素の更新(SET句)

既存の要素を更新します。更新する要素の位置は，繰り返し列内の要素番号を使って指定します。

(例)

// z001の趣味を「映画鑑賞」から「インターネット」へ変更
UPDATE 社員表
       SET 趣味[1]  =ARRAY [N'インターネット']
       WHERE 氏名ID =Z001；

(c)　要素の削除(DELETE句)

要素を削除する場合は，削除する要素の要素番号を指定します。要素を削除した場合は，その要素以下の要素番号は繰り上がります。したがって，要素番号1の要素を削除した場合，要素番号2の要素が１になります。

(例)

// Z002の趣味「音楽鑑賞」を削除
UPDATE 社員表
       DELETE 趣味[1]
       WHERE 氏名ID =Z002；

(4)　レコードの削除

レコードを削除する場合，繰り返し列を持たない場合と同様にSQLのDELETE文を指定します。

(例)

// 資格の「ネットワーク」，趣味の「旅行」の，両方の条件を満たすレコードを削除
DELETE FROM 社員表
       WHERE ARRAY(資格，趣味) [ANY] ( 資格 =N'ネットワーク'
                                                    AND 趣味 =N'旅行' );

1.5　簡易版クラスのデータベースアクセス

この節では，簡易版クラスを利用したアプリケーションが，どのようなデータベースアクセスができるかについて説明します。

＜この節の構成＞

1.5.1　提供クラスとオブジェクト

1.5.2　データベースとの接続と切断

1.5.3　レコードの検索

1.5.4　検索レコードの参照

1.5.5　レコードの更新

1.5.6　レコードの削除

1.5.7　レコードの追加

1.5.8　繰り返し列へのアクセス

1.5.9　テーブルの定義と削除

1.5.10　DBRResultSet仮想関数の利用

1.5.1　提供クラスとオブジェクト

簡易版クラスでは，下記クラスを提供しています。

DBRDatabaseクラス

DBRResultSetクラス

このクラスでは，２種類のクラスからDatabaseオブジェクトとResultSetオブジェクトを生成します。Databaseオブジェクトは，データベースとの接続・切断を制御するオブジェクトであり，ResultSetオブジェクトはデータベースの検索・更新などを行うオブジェクトです。 データベースアクセスには，この二つのオブジェクトのメソッドを利用します。

また，繰り返し列を扱うための次のクラスも利用できます。

DBRArrayDataFactoryクラス

DBRArrayDataクラス

DBRArrayDataPtrクラス

DBRArrayDataConstPtrクラス

DBRArrayDataFactoryオブジェクトは，Databaseオブジェクトから生成されます。これらは順に，繰り返し列を扱うためのDBRArrayDataクラスを管理するオブジェクトのクラス，繰り返し列の要素の操作を管理するオブジェクトのクラス，更新を目的としてDBRArrayDataクラスのインスタンスを管理するためのスマートポインタクラス，参照の場合にDBRArrayDataクラスのインスタンスを管理するためのスマートポインタクラスです。

データベースアクセスで発生したエラー情報は，これらのオブジェクトに格納されません。エラー処理クラスライブラリのクラスを使用してエラー情報を取得できます。

＜この項の構成＞

(1)　Databaseオブジェクト

(2)　ResultSetオブジェクト

(3)　繰り返し列を扱うオブジェクト

(1)　Databaseオブジェクト

Databaseオブジェクトは，DBRDatabaseクラスのコンストラクタ（データベース種別名を指定）を利用してオブジェクトを生成します。生成したオブジェクトは,オブジェクトを宣言した関数が終了すると自動的に削除されます。

一つのDatabaseオブジェクトで接続するデータベースはひとつであり，複数のデータベースと接続する場合には，複数のDatabaseオブジェクトが必要となります。

(2)　ResultSetオブジェクト

ResultSetオブジェクトは，データベースの検索・更新などを行うオブジェクトであり，Databaseオブジェクトを生成した後，DBRResultSetクラスのコンストラクタを利用して生成します。生成したオブジェクトは,オブジェクトを宣言した関数が終了するとき自動的に削除されますが, ResultSetオブジェクトのCloseメソッドでも削除できます。このResultSetオブジェクトは，ひとつのDatabaseオブジェクトに対して最大６４個まで生成できます。

ひとつのResultSetオブジェクトは，ひとつのSELECT文に対応し，検索したレコードを格納します。

簡易版クラスで生成したオブジェクトのイメージを図1-5に示します。

図1-5　簡易版クラスで生成したオブジェクトのイメージ

(3)　繰り返し列を扱うオブジェクト

繰り返し列を扱うオブジェクトの種類は次の４種類があります。

(a)　DBRArrayDataFactoryオブジェクト

このオブジェクトは繰り返し列を扱う最上位オブジェクトです。繰り返し列の要素を更新する場合に接続するデータベースごとに必要です。このオブジェクトはDBRDatabaseオブジェクトのGetArrayDataFactoryメソッドで生成します。

(b)　DBRArrayDataオブジェクト

このオブジェクトは繰り返し列のデータを持つオブジェクトであり，ResultSetオブジェクトのGetFieldメソッドでは参照用のDBRArrayDataオブジェクトが生成され， DBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドでは更新に使用するオブジェクトが生成されます。このオブジェクトは，一つのレコード内の一つの繰り返し列の要素を格納します。

要素に値を設定する場合はSetDataメソッド，要素の値を参照する場合はGetDataメソッドを使用します。

(c)　DBRArrayDataConstPtrオブジェクト

このオブジェクトはDBRArrayDataオブジェクトをポイントするものです。DBRArrayDataオブジェクトの要素を参照専用で使用する場合は，このオブジェクトのポインタを使用します。

(d)　DBRArrayDataPtrオブジェクト

このオブジェクトはDBRArrayDataオブジェクトをポイントするものです。DBRArrayDataオブジェクトの要素を更新する場合は，このオブジェクトのポインタを使用します。

1.5.2　データベースとの接続と切断

＜この項の構成＞

(1)　データベースとの接続

(2)　データベースとの切断

(1)　データベースとの接続

データベースと接続するには，DBRDatabaseクラスのコンストラクタを利用してDatabaseオブジェクトを生成し，Connectメソッドを呼び出してデータベースと接続します。

接続するデータベース種別名は，コンストラクタの引数で設定し，データベース名やユーザID，パスワードはConnectメソッドの引数で指定します。

また，下記オプションを設定することも可能です。

検索したときに該当するレコードがロックされていた場合の振る舞い

SQL文を同期処理，又は非同期処理のどちらで実行するか

(2)　データベースとの切断

データベースとの切断は，DatabaseオブジェクトのCloseメソッドを呼び出すことで行い，再接続にはConnectメソッドを使用します。

Databaseオブジェクトの削除（オブジェクトを宣言した関数の終了）でもデータベースが切断されます。

1.5.3　レコードの検索

レコードの検索には，DBRResultSetクラスのコンストラクタを利用して生成するResultSetオブジェクトのメソッドを使用します。

レコードの検索は，SELECT文をExecuteメソッドで通知し，Openメソッドで検索を実行します。検索したレコードは，ResultSetオブジェクトに格納されます。

レコードの検索には検索したレコードを参照だけする参照目的とレコードの更新又は削除をする更新目的の２種類があり，この目的により検索するレコード数が異なります。

また，SELECTの一部を実行時に置き換える，?パラメタの利用も可能です。?パラメタはORACLEではプレイスホルダと呼ばれています。

1.5.4　検索レコードの参照

検索したレコードは，ResultSetに格納されています。カーソルは最初レコードの先頭に位置付けられていて，必要に応じてカーソルを位置付け，GetFieldメソッドを使用してフィールドの内容を参照します。フィールドの内容は，GetFieldの引数で指定したデータ型に変換できます。

カーソル位置付けには，次へ移動（Nextメソッド），前へ移動（Perviousメソッド），最後へ移動（Bottomメソッド），先頭へ移動（Topメソッド）などのメソッドがあります。また，現在のレコード位置を知るためのメソッド（GetCurrent，GetCurrentOfResultSetメソッド）もあります。

なお，更新目的で検索した場合には，１レコードだけResultSetに格納されるため，Nextメソッドだけが利用できます。

1.5.5　レコードの更新

レコードの更新方法には，検索したレコードを更新する方法（ResultSetを利用）と，UPDATE文で直接更新する方法があります。

＜この項の構成＞

(1)　検索したレコードの更新

(2)　UPDATE文を利用した更新

(1)　検索したレコードの更新

検索したレコードを更新するためには，次の順序で処理する必要があります。

更新目的でレコードを検索

Editメソッドの呼び出し

SetFieldメソッドでフィールドの値を更新

Updateメソッドで更新を指示

Nextメソッドで次のレコードに位置付け

(2)　UPDATE文を利用した更新

UPDATE文で更新するためには,ExecuteDirectメソッドを利用します。更新するレコードの条件や更新フィールドの値を指定したUPDATE文を，ExecuteDirectメソッドの引数に設定することにより，更新できます。ExecuteDirectメソッドでは，?パラメタは利用できません。

1.5.6　レコードの削除

レコードの削除方法には，検索したレコードを削除する方法（ResultSetを利用）と，DELETE文で直接削除する方法があります。

＜この項の構成＞

(1)　検索したレコードの削除

(2)　DELETE文を利用した削除

(1)　検索したレコードの削除

検索したレコードを削除するためには，次の順序で処理する必要があります。

更新目的でレコードを検索

Editメソッドの呼び出し

Deleteメソッドで削除を指示

Nextメソッドで次のレコードに位置付け

(2)　DELETE文を利用した削除

DELETE文で削除するためには,ExecuteDirectメソッドを利用します。削除するレコードの条件を指定したDELETE文を，ExecuteDirectメソッドの引数に設定することにより，削除できます。ExecuteDirectメソッドでは，?パラメタは利用できません。

1.5.7　レコードの追加

レコードを追加するためには,ExecuteDirectメソッドを利用します。追加するレコードの内容を指定したINSERT文をExecuteDirectメソッドの引数に設定することにより，追加できます。

1.5.8　繰り返し列へのアクセス

繰り返し列の要素を含むレコードを扱う場合は，基本的には通常のレコードのデータを扱う場合と同じですが，繰り返し列のデータを扱う方法が異なります。

＜この項の構成＞

(1)　検索条件としての要素の利用

(2)　ResultSetに取得した要素の参照

(3)　ResultSetを利用した要素の更新

(4)　SQL文を利用した要素の追加，更新，削除

(5)　繰り返し列を含むレコードの追加

(1)　検索条件としての要素の利用

要素の値を検索，更新，削除，追加時の条件として利用できます。SQL文のWHERE句にArray句を使って条件を設定します。SQL文の指定方法の詳細については「1.4.5 繰り返し列」を参照してください。

(2)　ResultSetに取得した要素の参照

ResultSetに読込んだ繰り返し列の要素を参照する方法について説明します。

ResultSetに読込んだ繰り返し列は直接アクセスできないため，いったんアプリケーションがアクセスできる領域(DBRArrayDataオブジェクト)に取り込む必要があります。このオブジェクトはDBRResultSetクラスのGetFieldメソッドで生成されます。

DBRArrayDataオブジェクト中の要素はGetDataメソッドで参照します。また，要素の値は，GetDataメソッドの引数で指定したデータ型に変換できます。

(3)　ResultSetを利用した要素の更新

ResultSetに読込んだ繰り返し列を更新する方法には，次の2種類があります。

(a)　繰り返し列の要素の更新

繰り返し列は，ResultSetに読み込んだ繰り返し列からGetFieldメソッドでDBRArrayDataオブジェクトに取込みますが，このオブジェクトは参照専用であるためこのオブジェクト内の要素を直接更新できません。このため，更新用のDBRArrayDataオブジェクトを，参照用のDBRArrayDataオブジェクトからCreateArrayDataメソッドでコピーして生成します。

DBRArrayDataオブジェクトの要素は，SetDataメソッドで更新します。要素の更新後，SetFieldメソッドを呼び出して，繰り返し列をResultSetに反映します。

(b)　繰り返し列の一括更新

ResultSetから繰り返し列のデータを取り込まずに，繰り返し列にデータを設定する方法です。

DBRArrayDataオブジェクトを生成し，DBRArrayDataFactoryオブジェクトのCreatArrayDataメソッドで繰り返し列の属性を指定し，DBRArrayDataオブジェクトを生成します。

次に，DBRArrayDataオブジェクトのCreateメソッドを呼び出し，要素数分の領域を確保します。要素の値は，SetDataメソッドを呼び出して，確保した領域に設定します。要素を設定後，SetFieldメソッドを呼び出して，繰り返し列をResultSetに反映します。

(4)　SQL文を利用した要素の追加，更新，削除

DBRArrayDataオブジェクトを利用しないで繰り返し列を更新する方法について説明します。この方法は，SQLのUPDATE文に，ADD，SET，DELETE句を使います。 ADD，SET，DELETE句の指定方法については，「1.4.5 繰り返し列」を参照してください。

SQLの実行には，DatabaseオブジェクトのExecuteDirectメソッドを使います。

(5)　繰り返し列を含むレコードの追加

繰り返し列を含むレコードを追加するには，繰り返し列を含まない場合と同様にSQLのINSERT文を利用します。INSERT文では，VALUES句中のARRAY句に設定する要素の値を指定します。SQLのINSERT文の指定方法については，「1.4.5 繰り返し列」を参照してください。

SQLの実行には，DatabaseオブジェクトのExecuteDirectメソッドを使います。

1.5.9　テーブルの定義と削除

TPBrokerを利用したトランザクション環境では，定義系のSQL(CREATE文など)は利用できないため注意してください。

＜この項の構成＞

(1)　テーブルの定義

(2)　テーブルの削除

(1)　テーブルの定義

テーブル（表）を定義するためには，ExecuteDirectメソッドを利用します。定義するテーブルの情報を指定したCREATE TABLE文を，ExecuteDirectメソッドの引数に設定することで，テーブルの定義ができます。

(2)　テーブルの削除

テーブル（表）を削除するためには，ExecuteDirectメソッドを利用します。削除するテーブルを指定した，DROP TABLE文を，ExecuteDirectメソッドの引数に設定することで，テーブルの削除ができます。

1.5.10　DBRResultSet仮想関数の利用

DBRResultSetクラスでは，オーバライド可能な仮想関数を提供しています。

＜この項の構成＞

(1)　DBRResultSetクラスの仮想関数

(1)　DBRResultSetクラスの仮想関数

DBRResultSetクラスでは，三つの仮想関数を利用できます。これらの仮想関数を定義した場合,DBRResultSetクラスの仮想関数にオーバライドされて実行されます。

OnBeforeRefresh… OpenメソッドでResultSetに検索結果を読込む前に実行される関数

OnMoveRecord … カーソルの移動時に呼び出される関数

OnEndRecord … NextメソッドでIsEOF条件の時に呼び出される関数

1.6　詳細版クラスのデータベースアクセス

この節では，詳細版クラスを使用したアプリケーションが，どのようなデータベースアクセスができるかについて説明します。

＜この節の構成＞

1.6.1　提供クラスとオブジェクト

1.6.2　データベースとの接続と切断

1.6.3　レコードの検索

1.6.4　検索レコードの参照

1.6.5　レコードの更新

1.6.6　レコードの削除

1.6.7　レコードの追加

1.6.8　繰り返し列へのアクセス

1.6.9　テーブルの定義と削除

1.6.10　テーブル定義情報の参照

1.6.11　ストアドプロシジャの利用

1.6.1　提供クラスとオブジェクト

詳細版クラスでは，下記クラスを提供しています。

DBDriverManagerクラス
DriverManagerオブジェクト（トップオジェクト）のクラスです。

DBDriverクラス
DBMSの種別を管理するDriverオブジェクトのクラスです。 DBDriverManagerのDriverメソッドからDriverオブジェクトを生成します。

DBTransactionクラス
トランザクションを管理するオブジェクトのクラスです。 DBDriverManagerクラスのTransactionメソッドを使用して，Connectionオブジェクト対応に生成します。

DBConnectionクラス
DBMSとのコネクションを管理するオブジェクトのクラスです。DBDriverクラスのConnectメソッドからConnectionオブジェクトを生成します。

DBStatementクラス
SQL文の実行を管理するオブジェクトのクラスです。DBConnectionクラスのメソッドを使用して生成します。一つのオブジェクトから複数のSQL文を実行できます。

DBPreparedStatementクラス
?パラメタ付きSQL文の実行を管理するオブジェクトのクラスです。DBConnectionクラスのメソッドに実行するSQL文を渡して生成します。

DBResultSetクラス
検索結果が格納されるResultSetを管理するオブジェクトのクラスです。DBStatementクラス，DBPreparedStatementクラス又はDBCallableStatementクラスのメソッドを使用して生成します。

DBResultSetMetaDataクラス
検索結果のフィールド名称などを管理するオブジェクトのクラスです。 DBStatementクラス，DBPreparedStatementクラス又はDBCallableStatementクラスのメソッドを使用して生成します。

DBCallableStatementクラス
ストアドプロシジャの実行を管理するオブジェクトのクラスです。DBConnectionクラスのメソッドを使用して生成します。

DBDatabaseMetaDataクラス
接続するデータベースのテーブル一覧などの情報を管理するオブジェクトのクラスです。アプリケーション実行時に，接続したデータベースのテーブル一覧，フィールド一覧などの最新情報を参照する場合に必要なオブジェクトです。 DBConnectionクラスを使用して，接続するデータベース対応に生成します。

DBRArrayDataFactoryクラス
繰り返し列を扱うためのDBRArrayDataクラスを管理するオブジェクトのクラスです。DBConnectionクラスのメソッドを使用して生成します。

DBRArrayDataクラス
繰り返し列を持つレコードのデータ操作を管理するオブジェクトのクラスです。繰り返し列の要素に値を設定したり，要素の値を取得する場合に必要なオブジェクトです。DBArrayDataFactoryクラスのメソッドを使用して生成します。

DBRArrayDataPtrクラス
DBRArrayDataクラスのインスタンスを管理するためのスマートポインタクラスです。繰り返し列を更新する場合に利用するクラスです。

DBRArrayDataConstPtrクラス
DBRArrayDataクラスのインスタンスを管理するためのスマートポインタクラスです。繰り返し列を参照する場合に利用するクラスです。

このクラスのオブジェクト構造を図1-6に示します。

図1-6　詳細版クラスのオブジェクト構造

1.6.2　データベースとの接続と切断

＜この項の構成＞

(1)　データベースとの接続

(2)　データベースとの切断

(1)　データベースとの接続

データベースと接続するには，最初にDriverManagerオブジェクトを生成する必要があります。次に，Driverオブジェクトを生成します。その後，Connectメソッドを呼び出してデータベースと接続します。データベ―スと接続するとConnectionオブジェクトが生成されます。

接続するデータベース種別名は，DriverManagerオブジェクトのDriverメソッドで設定し，データベース名やユーザID，パスワードはConnectメソッドの引数で指定します。

また，下記オプションを設定することも可能です。

検索したときに該当するレコードがロックされていた場合の振る舞い

SQL文を同期処理，又は非同期処理のどちらで実行するか

(2)　データベースとの切断

Connectionオブジェクトを削除することで，データベースが切断されます。再接続には，再度Connectメソッドを呼び出します。

1.6.3　レコードの検索

データベースの検索には，DBStatementクラスとDBPreparedStatementクラスを使用する方法があります。DBStatementクラスでは，アプリケーションでSELECT文をすべて組み立てますが，DBPreparedStatementクラスでは，?パラメタを使用したアクセスができます。この?パラメタとは，SQL文の一部を可変の変数として，アプリケーション実行時に，変数部分のデータを設定しSQL文を組み立てる方法です。ORACLEではプレイスホルダと呼ばれています。

データベースを検索した結果は，ResultSetで受け取り，このResultSetを参照することで，検索したレコードの内容を参照することができます。

＜この項の構成＞

(1)　DBStatementクラスを利用した検索

(2)　DBPreparedStatementクラスを利用した検索

(1)　DBStatementクラスを利用した検索

一般的な使用方法としては，DBConnectionクラスのCreateStatementメソッドを呼び出して，Statementオブジェクトを生成します。次に，SELECT文をExecuteメソッドで渡して，データベースを検索し，検索結果であるResultSetを取得します。GetResultSetメソッドで検索結果を参照します。

(2)　DBPreparedStatementクラスを利用した検索

DBPreparedStatementクラスでのデータベースアクセスは，?パラメタを使用したSELECT文をCreatePreparedStatementメソッドで渡し，SetParamメソッドで?パラメタへのデータを設定します。その後Executeメソッドで検索を実行し，検索結果であるResultSetを取得します。GetResultSetメソッドで検索結果を参照します。

1.6.4　検索レコードの参照

検索したレコードは,ResultSetに格納されているので，このResultSet中のレコードにカーソルを位置付けGetFieldメソッドを使用してフィールドの内容を参照します。フィールドの内容は，GetFieldの引数で指定したデータ型に変換できます。

カーソル位置付けには，次へ移動（Nextメソッド），前へ移動（Perviousメソッド），最後へ移動（Bottomメソッド），先頭へ移動（Topメソッド）などのメソッドがあります。また，現在のレコード位置を知るためのメソッド（GetCurrent，GetCurrentOfResultSetメソッド）もあります。

1.6.5　レコードの更新

データの更新方法には，前節で説明したResultSetを利用する方法と，SQLのUPDATE文を利用する方法とが選択できます。

＜この項の構成＞

(1)　検索したレコードの更新

(2)　UPDATE文を利用した更新

(1)　検索したレコードの更新

検索したレコードを更新するためには，次の順序で処理する必要があります。

更新目的でレコードを検索

Editメソッドの呼び出し

SetFieldメソッドでフィールドの値を更新

Updateメソッドで更新を指示

Nextメソッドで次のレコードに位置付け

(2)　UPDATE文を利用した更新

SQL文のUPDATE文を使った更新にも二つの方法があり，DBStatementクラスとDBPreparedStatementクラスを利用できます。

DBStatementクラスを利用した更新
DBConnectionクラスのCreateStatementでStatementオブジェクトを生成します。実行するUPDATE文をExecuteメソッドに渡すことでデータを更新できます。
又は，DBConnectionクラスも使えます。UPDATE文をExecuteDirectメソッドで指定して，DBStatementクラスよりも簡単にデータを更新を追加できます。

DBPreparedStatementクラスを利用した更新
DBPreparedStatementクラスを使用する場合，?パラメタを利用して検索条件や更新データを実行時に変更することができます。
?パラメタを指定したUPDATE文をCreatePreparedStatementメソッドで指定し，Executeメソッドを呼び出します。SetParamメソッドで?パラメタへのデータを設定し，ExecuteUpdateメソッドで更新を実行します。

1.6.6　レコードの削除

レコードの削除方法には，前節で説明したResultSetを利用する方法と，SQLのDELETE文を利用する方法とが選択できます。

＜この項の構成＞

(1)　ResultSetを利用したレコード削除

(2)　DELETE文を利用した削除

(1)　ResultSetを利用したレコード削除

検索したレコードを削除するためには，次の順序で処理する必要があります。

更新目的でレコードを検索

Editメソッドの呼び出し

Deleteメソッドで削除を指示

Nextメソッドで次のレコードに位置付け

(2)　DELETE文を利用した削除

SQL文のDELETE文を使った削除にも二つの方法があり，DBStatementクラスとDBPreparedStatementクラスを利用できます。

DBStatementクラスを利用した削除
DBConnectionクラスのCreateStatementでStatementオブジェクトを生成します。実行するDELETE文をExecuteメソッドに渡すことでレコードを削除できます。
又は，DBConnectionクラスも使えます。DELETE文をExecuteDirectメソッドで指定して，DBStatementクラスよりも簡単に行を削除できます。

DBPreparedStatementクラスを利用した削除
DBPreparedStatementクラスを使用する場合，?パラメタを利用した検索条件を実行時に変更することができます。
?パラメタを指定したDELETE文をCreatePreparedStatementメソッドで指定し，Executeメソッドを呼び出します。SetParamメソッドで?パラメタへのデータを設定し，ExecuteUpdateメソッドで削除します。

1.6.7　レコードの追加

レコードを追加するときは，INSERT文を使います。DBStatementクラスとDBPreparedStatementクラスを利用できます。

DBStatementクラスを利用したレコードの追加
DBConnectionクラスのCreateStatementでStatementオブジェクトを生成します。実行するINSERT文をExecuteメソッドに渡すことでレコードを追加できます。
DBConnectionクラスも使えます。この場合，INSERT文をExecuteDirectメソッドで指定して，DBStatementクラスよりも簡単にレコードを追加できます。

DBPreparedStatementクラスを利用した追加
DBPreparedStatementクラスを使用する場合，?パラメタを利用して追加するレコードのデータを実行時に設定できます。
?パラメタを指定したINSERT文をCreatePreparedStatementメソッドで指定し，Executeメソッドで実行します。SetParamメソッドで?パラメタへのデータを設定し，ExecuteUpdateメソッドで追加します。
なお，一度に複数のレコードをまとめて追加できます。

1.6.8　繰り返し列へのアクセス

繰り返し列の要素を含むレコードを扱う場合は，基本的には通常のレコードのデータを扱う場合と同じですが，繰り返し列のデータを扱う方法が異なります。

＜この項の構成＞

(1)　検索条件としての要素の利用

(2)　ResultSetに取得した要素の参照

(3)　ResultSetを利用した要素の更新

(4)　?パラメタを利用した要素の一括更新

(5)　SQL文を利用した要素の追加，更新，削除

(6)　繰り返し列を含むレコードの追加

(1)　検索条件としての要素の利用

要素の値を検索，更新，削除，追加時の条件として利用できます。この方法は，簡易版と同じです。

C++クラスライブラリでの各SQL文の指定方法は，通常のレコードを扱う場合と同様です。要素を条件にした検索，更新，削除，追加はパラメタを含む場合DBPreparedStatememtクラス，含まない場合DBStatement又はDBConnectionクラスを使います。

(2)　ResultSetに取得した要素の参照

ResultSetに読込んだ繰り返し列の要素を参照する方法は，簡易版と同じです。

(3)　ResultSetを利用した要素の更新

ResultSetを利用した繰り返し列の要素を更新する方法は，簡易版と同じです。

(4)　?パラメタを利用した要素の一括更新

SQL文では，通常のレコードを更新する場合と同様に繰り返し列は指定しないで設定し，後でDBRArrayDataクラスを利用して要素を設定し，更新する方法です。この方法では，繰り返し列全体を?パラメタに設定するため，要素ごとの更新ではなく，要素全体の更新になります。

?パラメタを指定したSQLのUPDATE文の実行は，DBPreparedStatementクラスを使います。

次に，DBRArrayDataオブジェクトのCreateメソッドを呼び出し，要素数分の領域を確保します。要素の値は，SetDataメソッドを呼び出して，確保した領域に設定します。要素を設定後，SetParamメソッドを呼び出して，繰り返し列を反映します。

(5)　SQL文を利用した要素の追加，更新，削除

DBRArrayDataオブジェクトを利用しないで繰り返し列を更新する方法について説明します。この方法は，簡易版と同じですが，関係するクラスが異なります。

SQLの実行には，DBConnection又はDBStatementクラスを，?パラメタを使う場合はDBPreparedStatementクラスを使います。

(6)　繰り返し列を含むレコードの追加

繰り返し列を含むレコードを追加する方法は簡易版と同じですが，関係するクラスが異なります。

SQLの実行には，DBConnection又はDBStatementクラスを，パラメタを使う場合はDBPreparedStatementクラスを使います。

1.6.9　テーブルの定義と削除

TPBrokerを利用したトランザクション環境では，定義系のSQL(CREATE文など)は利用できないため注意してください。

＜この項の構成＞

(1)　テーブルの定義

(2)　テーブルの削除

(1)　テーブルの定義

DABrokerを利用して，テーブル（表）を定義できます。テーブルの定義は，SQLのCREATE TABLE文を使用します。アプリケーションからはDBStatementクラスを使い，SQL文をCreateStatementメソッドで指定し，Executeメソッドで実行します。

又は，DBConnectionクラスを使用して，SQL文を実行することもできます。この場合，SQL文をExecuteDirectメソッドで指定して，SQL文を実行します。

(2)　テーブルの削除

DABrokerを利用して，テーブル（表）を削除できます。テーブルの削除は，SQLのDROP TABLE文を使用します。アプリケーションからはDBStatementクラスを使い，SQL文をCreateStatementメソッドで指定し，Executeメソッドで実行します。

又は，DBConnectionクラスを使用して，SQL文を実行することもできます。この場合，SQL文をExecuteDirectメソッドで指定して，SQL文を実行します。

1.6.10　テーブル定義情報の参照

下記クラスを使用することにより，テーブル一覧，フィールド一覧，プロシジャ一覧などの情報を取得できます。

classListTablesクラス

classListColumnsクラス

classListProceduresクラス

classListProcedureColumnsクラス

classListPrimaryKeysクラス

1.6.11　ストアドプロシジャの利用

この項では，ストアドプロシジャの利用方法について説明します。

なお，メインフレーム系のDBMSではストアドプロシジャを利用したアクセスはできません。

また，繰り返し列はストアドプロシジャでは利用できません。

＜この項の構成＞

(1)　ストアドプロシジャの概要

(2)　ストアドプロシジャの実行と結果の受け取り

(1)　ストアドプロシジャの概要

ストアドプロシジャとは，SQLでデータベースアクセス処理を記述し，この処理をCREATE PROCEDUREでデータベースに登録したものです。

ストアドプロシジャでは，実行に必要な値を引数としてプロシジャに渡したり(IN)，プロシジャから実行結果を戻したり(OUT)，値をプロシジャに渡してその実行結果を戻したり(INOUT)できます。

ストアドプロシジャは次のような形式で作成します。これは，引数を使って値をプロシジャに渡すための例で，Sample1という名称のプロシジャを作成しています。f1=入力値の条件でレコードをtable1から検索し，そのレコードのf2フィールドの値を受け取ります。

CREATE PROCEDURE Sample1 (IN @f1 INT,OUT @f2 char(20))
BEGIN
       SELECT f2 into @f2 FROM table1  where f1=@f1;
END

なお，SQL Anywhere, Adaptive Server Anywhereの場合は，実行結果を引数としてだけでなく，ResultSetとして返すこともできます。

ストアドプロシジャ内で使用できるSQL文や文法はDBMSによって異なるので，プロシジャの作成やコンパイル方法,及びDBMSへの登録方法は，使用するDBMSのドキュメントを参照してください。

(2)　ストアドプロシジャの実行と結果の受け取り

ストアドプロシジャはSQLのCALL文を使って呼び出せますが，詳細版クラスにはストアドプロシジャを扱うためのDBCallableStatementクラスがあります。このクラスには，実行するストアドプロシジャの準備，実行，引数の設定，更に，ストアドプロシジャの実行結果を取得するためのメソッドがあります。

(a)　ストアドプロシジャの実行

アプリケーションでは，実行するストアドプロシジャ名をSetProcedureメソッドを使ってDBMSに通知します。引数を持つ場合，プロシジャ名の後に引数の数だけ"?"を指定し，SetParamメソッドで引数の値を設定します。次に，Executeメソッドでプロシジャを実行します。

引数を持つプロシジャの実行を図1-7に示します。

図1-7　引数を持つプロシジャの実行

(b)　戻り値の受取り

戻り値を引数で受け取る場合，DBCallableStatementクラスGetParamメソッドを呼び出して取得します。

(c)　戻り値として複数のレコードを取得する場合

下記DBMSの場合，ストアドプロシジャでのSELECT文の実行結果が複数のレコードでもアプリケーションで受け取ることができます。

SQL Anywhere

Adaptive Server Anywhere

この場合，ストアドプロシジャではResultで戻り値の型を定義し，アプリケーションでは，DBResultSetクラスのResultSetとして受取り，GetFieldメソッドで参照します。

CREATE PROCEDURE sample ()
RESULT ("Value" INT,"Shop" CHAR(30))
BEGIN
       SELECT  CAST( sum( sales_order_items.quantity * product.unit_price)
                      AS INTEGER ) AS value
               shop_name,
       FROM customer
               INNER JOIN sales_order
               INNER JOIN sales_order_items
               INNER JOIN product
       GROUP BY shop_name
       ORDER BY value desc;
END

この例では，value及びshop_nameの検索結果をResultSetとして扱うために，RESULT句でValue及びShopフィールドとそのデータ型を新しく定義しています。

また，SELECT文中に演算処理がある場合は，その結果を考慮してストアドプロシジャの作成時に，結果に合ったデータ型をRESULT句で用意しておきます。

2.　データベースアクセス

DABrokerでは，C++によるアプリケーション開発向けのプログラミングインタフェースとして，簡易版と詳細版の二つのC++クラスライブラリを提供します。この章では，クラスライブラリを使用した，データベースアクセス方法について説明します。

＜この章の構成＞

2.1　データベースへの接続と切断

2.2　同期・非同期処理

2.3　トランザクションと排他制御

2.4　エラー処理

2.5　簡易版クラスのデータベースアクセス

2.6　詳細版クラスのデータベースアクセス

2.7　繰り返し列へのアクセス

2.8　XDM/SDへのアクセス

2.1　データベースへの接続と切断

この節では，データベースへの接続と切断の方法を説明します。

各メソッドの引数などについては，「4. 簡易版関数詳細」及び「5. 詳細版関数詳細」を参照してください。

＜この節の構成＞

2.1.1　データベースへの接続

2.1.2　データベースとの切断

2.1.1　データベースへの接続

アプリケーションでは，接続先データベース定義ファイルのデータベース種別名及びデータベース名を使用してデータベースに接続します。接続先データベース定義ファイルを使うことによって，接続条件に変更が発生した場合などでも，アプリケーションを変更することなく，接続するデータベースの変更ができます。

＜この項の構成＞

(1)　接続先データベース定義ファイルの作成

(2)　データベースとの接続

(3)　複数データベースへの接続

(1)　接続先データベース定義ファイルの作成

データベースに接続するために，接続先データベース定義ファイルを作成しておく必要があります。接続先データベース定義ファイルの作成方法については，マニュアル「DABroker」を参照してください。

次に，接続先データベース定義ファイルの定義形式の例を示します。

（定義形式の例）

DBDEF_HIR1{                          # データベース種別名
   DBTYPE=hirdb                     # データベース種別
   db01{                            # データベース名
       DBHOST=host01                # データベースのホスト名
       DBNAME=22200                 # データベースのポート番号
       USRID="uid"                  # ユーザID
       PASSWD="passwd"              # パスワード
   }
}

TPBroker for C++のOTS機能を使用してトランザクション制御を行う場合，接続先定義ファイルは使用できません。

(2)　データベースとの接続

(a)　簡易版クラス

アプリケーションからデータベースアクセスを行うためには，DBRDatabaseクラスのコンストラクタで，接続先データベース定義ファイルのデータベース種別名を指定し，Databaseオブジェクトを生成します。次に，DatabaseオブジェクトのConnectメソッドの引数にデータベース名やユーザID，パスワードを指定しデータベースと接続します。

//////////////////////////////////////////////////////////////
///  単一データベースとの接続と切断の例
DBRDatabase *pDB1;
    pDB1 = new DBRDatabase(         // Databaseオブジェクトを生成
                     "DBDEF_HIR1",  // データベース種別名称
                      NULL,0);
// データベースとの接続
    pDB1->Connect("UID",                      // ユーザID
                    "PASS",                   // パスワード
                     NULL,NULL,
                    "db01",                   // データベース名
                     LOCK_OPT_WAIT,0,STMT_SYNC);
//   データベースとの接続を切断
    pDB1->close();                         // データベースとの接続を切断

(b)　詳細版クラス

アプリケーションからデータベースと接続を行うには，DBDriverManagerクラス， DBDriverクラス， DBConnectionクラスを使用します。

まず，DBDriverManagerクラスからトップオブジェクトであるDriverManagerオブジェクトを生成する必要があり，これは，new演算子，又は自動変数として生成します。※

次に，DriverManagerオブジェクトのDriverメソッドを呼び出してDriverオブジェクトを生成します。このDriverメソッドの引数には，接続先データベース定義ファイルで定義してある，データベース種別名を指定します。

Driverオブジェクトを生成後，接続先のデータベース名やユーザID，パスワードを指定したConnectメソッドを呼び出してデータベースと接続し，Connectionオブジェクトを生成します。

注※　DriverManagerオブジェクト以外のオブジェクトは必ず，上位オブジェクトの生成メソッドを使って，生成してください。また，必ず削除メソッドを使って，削除してください。

///////////////////////////////////////////////////////////////
///  単一データベースとの接続と切断の例
DBDriverManager*  pDrvMan;
DBDriver * pDriver = NULL;
DBConnection * pConnect = NULL;

//データベース接続
     pDrvMan = new DBDriverManager;
                              //DriverManagerをnew演算子で生成
     pDrvMan->InitializeMessage();
     pDriver = pDrvMan->Driver("DBDEF_HIR1");
                                    // データベース種別名の設定
     pConnect = pDriver->Connect("Con1",           // オブジェクト名
                                      "UserID",    // ユーザID
                                      "Password",  // パスワード
                                      NULL,NULL,
                                      "db01",      // データベース名
                                      LOCK_OPT_WAIT,0,STMT_SYNC);
//データベース切断
     pDriver->RemoveConnection("Con1");      // データベース切断
     pConnect = NULL;
     delete pDrvMan;                         // トップオブジェクトの削除
     pDrvMan = NULL;

(3)　複数データベースへの接続

一つのアプリケーションから，複数のデータベースをアクセスできます。例えば，HiRDBで作成した支店データベースと全社データベースというような，複数データベースにアクセスできます。また，HiRDBとORACLEといった，複数種別のデータベースにもアクセスできます。複数のデータベース間の整合性を保ちながらアクセスする場合は，TPBroker for C++のOTS機能を使用したトランザクション制御が必要です。

(a)　データベースとオブジェクトの関係

簡易版クラスでは，データベースごとにDBRDatabaseクラスでDatabaseオブジェクトを生成し，DatabaseオブジェクトのConnectメソッドを使用してデータベースと接続します。

詳細版クラスでは，データベース種別ごとにDBDriverオブジェクトを生成し，データベースごとに，Connectメソッドでデータベースと接続し，DBConnectionオブジェクトを生成します。

(b)　接続できるデータベースの数

DABrokerでは同時に接続できる数に制限はありませんが，接続できる数は，データベースの同時ユーザ数(そのデータベースに同時にログインできるユーザ数の制限)に依存します。

//////////////////////////////////////////////////////////////
//   複数のデータベースにアクセスする例
//   オブジェクトの生成
    DBRDatabase db1("DBDEF_HIR1",NULL,0);
    DBRDatabase db2("DBDEF_RDALINK",NULL,0);
    DBRDatabase db3("DBDEF_RDALINK",NULL,0);
//   データベースとの接続
    db1.Connect("UserID","password",         // ユーザID，パスワード
                   NULL,NULL,
                  "db01",                         // データベース名
                   LOCK_OPT_WAIT,0,STMT_SYNC);
    db2.Connect("UserID","password",         // ユーザID，パスワード
                   NULL,NULL,
                  "db02",                         // データベース名
                   LOCK_OPT_WAIT,0,STMT_SYNC);
    db3.Connect("UserID","password",         // ユーザID，パスワード
                   NULL,NULL,
                  "db03",                         // データベース名
                   LOCK_OPT_WAIT,0,STMT_SYNC);

//   データベースとの接続を切断
    db1.close();                           // データベースとの接続を切断
    db2.close();                          
    db3.close();                          

2.1.2　データベースとの切断

簡易版クラスでは，DatabaseオブジェクトのCloseメソッドにより，データベースが切断されます。再接続するには再度Connectメソッドを実行してください。Databaseオブジェクトは，Closeメソッドを呼んでも削除されず，アプリケーションが終了するとき自動的に削除されます。

詳細版では，該当するDBConnectionオブジェクトを削除することでデータベースが切断されます。一時的にデータベースとの接続を切り離したい場合は，DBConnectionクラスのCloseメソッドを使います。再接続にはConnectメソッドを使ってください。

DBConnectionオブジェクトの削除には，DBDriverクラスのRemoveConnectionメソッド又はDBConnectionクラスのRemoveメソッドを使います。最後に，トップオブジェクトであるDBDriverManagerオブジェクトを削除します。トップオブジェクトをnew演算子で生成した場合には，Delete演算子で削除します。

具体的なコーディング例については，「2.1.1 データベースへの接続」を参照してください。

2.2　同期・非同期処理

データベースアクセスを同期処理で行うか，非同期処理で行うかをアプリケーションで選択できます。

＜この節の構成＞

2.2.1　同期・非同期処理を選択するメソッド

2.2.2　非同期処理の完了確認

2.2.3　非同期処理実行中にエラーとなるメソッド

2.2.1　同期・非同期処理を選択するメソッド

SQLの実行を同期・非同期処理を行えるメソッドについて説明します。

なお， TPBrokerのOTS機能を使用してトランザクションを制御する場合は，SQL文の非同期処理が実行できないため，注意してください。

＜この項の構成＞

(1)　簡易クラス

(2)　詳細クラス

(1)　簡易クラス

データベースとの接続時に，SQLの実行を同期・非同期処理のどちらで行うかを，下記メソッドの引数で選択します。

DBRDatabaseクラス：Connect（データベースとの接続）

SQLの実行を同期処理で実行する場合は，Connectメソッドの引数に「STMT_SYNC」を指定します。非同期処理で実行する場合は，「STMT_ASYNC」を指定します。

（例）  pCon1->Connect(…,STMT_ASYNC)

同期・非同期処理の設定に従って，同期・非同期処理で実行されるメソッドを次に示します。

DBRDatabaseクラス：Connect，ExecuteDirect

DBRResultSetクラス：Delete，Execute，Next，Open，PageNext，Refresh，Update

(2)　詳細クラス

データベースとの接続時に，SQLの実行を同期・非同期処理のどちらで行うかを，下記メソッドの引数で選択します。

DBDriverクラス：Connect（DBConnectionオブジェクトの生成）

DBConnectionクラス：Connect（Close後の再接続）

SQLの実行を同期処理で実行する場合は，Connectメソッドの引数に「STMT_SYNC」を指定します。非同期処理で実行する場合は，「STMT_ASYNC」を指定します。

ここで設定した同期・非同期処理は，データベースと接続している間有効です。

（例） pConnect=pDriver->Connect(…,STMT_ASYNC)

同期・非同期処理の設定に従って，同期・非同期処理で実行されるメソッドを次に示します。

DBDriverクラス
Connect

DBConnectionクラス
Connect，ExecuteDirect

DBStatementクラス
Execute，GetResultSet

DBPreparedStatementクラス
ExecuteUpdate，GetResultSet

DBCallableStatementクラス
Execute

DBResultSetクラス
PageNext，Refresh，Update，Delete

DBDatabaseMetaDataクラス
GetTables，GetColumns，GetProcedures，GetProcedureColumns，GetPrimaryKeys

2.2.2　非同期処理の完了確認

＜この項の構成＞

(1)　簡易クラスでの非同期処理完了確認

(2)　詳細クラスでの非同期処理完了確認

(1)　簡易クラスでの非同期処理完了確認

非同期処理の完了を待つには，DBRDatabaseクラスとDBRResultSetクラスのWaitForDataSourceメソッドを使用します。このメソッドが呼び出されると，メソッドが呼び出されたオブジェクトで実行中の非同期処理すべてが終わるまで待ちます。

（例） WaitForDataSourceメソッドによる完了待ち

if(pDB1->WaitForDataSource())   // 非同期処理が終わるまで待つ
{
printf("非同期で要求した処理が終了しました");
}

非同期処理の完了を確認するには，InWaitForDataSourceメソッドを使用します。

DBRDatabaseクラスの場合，Databaseオブジェクトに関係するすべてのResultSetオブジェクトのアクセス完了を意味し，DBRResultSetクラスの場合，単独のResultSetオブジェクトのアクセス完了を意味します。

また，DBRDatabaseクラスのInExecuteメソッドでも確認することができます。

例えば，DatabaseオブジェクトのExecuteDirectメソッドの処理は終了していても， ResultSetオブジェクトのExecuteメソッドが実行中ならば，InWaitForDataSourceメソッドはTRUEを返します。

（例） InWaitForDataSourceメソッドによる完了確認

if(pDB1->InWaitForDataSource())
{
 printf("非同期処理要求が残っています");
 if(pDB1->WaitForDataSource(10000))            // 10秒待つ
 {
    printf("非同期処理がすべて終了しました");
 }
 else
 {
   printf("10秒経ちましたが，非同期処理継続中です。
                                         終了までお待ちください。");
   pDB1->WaitForDataSource();    // 非同期処理が終わるまで待つ
 }
}

(2)　詳細クラスでの非同期処理完了確認

非同期処理の完了を待つには，各クラスのWaitForDataSourceメソッドを使用します。このメソッドが呼び出されると，メソッドが呼び出されたオブジェクトで実行中の非同期処理すべてが終わるまで待ちます。

（例） WaitForDataSourceメソッドによる完了待ち

    if(pStatement->WaitForDataSource())
                                      // 非同期処理が終わるまで待つ
    {
     printf("非同期で要求した処理が終了しました");
    }

非同期処理の完了を確認するには，DBConnectionオブジェクトのInWaitForDataSourceメソッドや各クラスのInExecuteメソッドを使用します。これは， DBConnectionクラスのメソッドに限らず，どのクラスのメソッドであっても，そのDBConnectionオブジェクトから生成されたオブジェクトのメソッドでデータベースアクセス中であれば，TRUE（非同期処理継続中）が返ります。

例えば，DBConnectionオブジェクトのExecuteDirectメソッドの処理は終了していても， DBStatementオブジェクトのExecuteメソッドが実行中ならば，InWaitForDataSourceメソッドはTRUEを返します。

（例） InWaitForDataSourceメソッドによる完了確認

    if(pConnect->InWaitForDataSource())
    {
      printf("非同期処理要求が残っています");
      if(pConnect->WaitForDataSource(10000)) {      // 10秒待つ
        printf("非同期処理がすべて終了しました");
      } else {
        printf("10秒経ちましたが，非同期処理継続中です。
                                        終了までお待ちください。");
        pConnect->WaitForDataSource()
                                //非同期処理が終わるまで待つ
      }
    }

2.2.3　非同期処理実行中にエラーとなるメソッド

非同期処理中は，基本的にデータベースアクセス処理が完了するまで，次のメソッドの呼び出しを除き，データベースアクセス処理を要求しているオブジェクトの操作はできません。

非同期処理中かどうかを確認するメソッド

非同期処理の完了を待つメソッド

他のメソッドを要求すると，エラーがスローされます。

2.3　トランザクションと排他制御

トランザクションの制御は，次の三つの方式に分けられます。

一つのDBMSを対象にトランザクション制御を行う方法
DABroker for C++のクラスライブラリを使ってトランザクションを制御します。

複数のDBMSを対象にトランザクション制御を行う方法（TPBrokerのOTS機能を使用する場合）
TPBrokerのOTS機能を使ってトランザクションを制御します。

複数のDBMSを対象にトランザクション制御を行う方法（OpenTP1を使用する場合）
OpenTP1を使ってトランザクションを制御します。

＜この節の構成＞

2.3.1　一つのDBMSを対象にトランザクション制御を行う方法

2.3.2　複数のDBMSを対象にトランザクション制御を行う方法（TPBrokerのOTS機能を使用する場合）

2.3.3　複数のDBMSを対象にトランザクション制御を行う方法（OpenTP1を使用する場合）

2.3.4　排他制御

2.3.1　一つのDBMSを対象にトランザクション制御を行う方法

＜この項の構成＞

(1)　トランザクションの開始

(2)　コミットとロールバック

(3)　サンプルコーディング

(1)　トランザクションの開始

データベースを更新する場合，クライアントからの一つの要求に対しては，必ず一つのトランザクションにすべきです。また，注意すべきことは，トランザクションはデータベース単位となる点です。複数のデータベースに対して同時にCommitやRollbackすることはできません。

簡易版クラスを使用した場合のトランザクションは，Connectメソッドを実行するとそのオブジェクトはトランザクション開始状態になります。したがって，自動コミットは利用できません。

詳細版クラスでは，明示的にトランザクションを制御する方法と自動コミットの２通りの利用方法が選択できます。

トランザクションを制御するには，DBTransactionクラスの，BeginTransメソッド，Commitメソッド，Rollbackメソッドを使用して制御します。まず，DBDriverManagerオブジェクトのTransactionメソッドを呼び出して，DBTransactionオブジェクトを生成します。このDBTransactionオブジェクトは，DBConnectionクラスのRegisterTransactionsメソッドを利用してDBConnectionオブジェクトと関連付けます。次に，DBTransactionオブジェクトのBeginTransメソッドを呼び出すか，SetAutoCommitメソッドをFALSEで呼び出すことでトランザクションを開始します。

トランザクションを使用しないでデータベースアクセスを行った場合，SQL文を一文実行するごとにコミットします（自動コミット）。これはデータベースを参照する場合にだけ利用し，データベースの更新がある場合は，必ずトランザクション制御を行ってください。

(2)　コミットとロールバック

簡易版の場合，DBRDatabaseクラスのCommitメソッド，Rollbackメソッドを呼び出すことによってトランザクションが終了します。

詳細版の場合，DBTransactionオブジェクトのCommitメソッド，Rollbackメソッドを呼び出すことによりトランザクションが終了します。

トランザクションを終了させないで， データベースとの接続を切断した場合は，アプリケーションの処理が異常であると認識し，DABrokerがロールバック要求しますので注意が必要です。

(3)　サンプルコーディング

コミット，及びロールバックを使用したトランザクションのサンプルコーディングを次に示します。

（例１） 簡易版クラスのトランザクション

////////////////////////////////////////////////////////////
///  クラスライブラリによるトランザクション制御（簡易版）
DBRDatabase *pDB1;
try
{
pDB1 = new DBRDatabase("DBDEF_HIR1", NULL,0);
                                      // オブジェクトの生成
 pDB1->Connect("UID","PASS",
                                      // データベースと接続
                NULL,NULL, "db01",    // データベース名
                LOCK_OPT_WAIT,0,STMT_SYNC);
                          // 自動的にトランザクションの開始
   :   // データ操作など，その他の処理
 pDB1->Commit();          // 処理が正常に終了した場合コミット
   :
}
catch(DBSQLCA e)
{
   cout << "エラーが発生しました。¥n" << e.ErrorMessage << "¥n"
                                                      << flush;
   if(e.e_SQLERROR)
   {
     cout << e.e_SQLERROR << "¥n" << flush;
                                     // エラーメッセージの取得
   pDB1->Rollback();                 // 処理中ならばロールバック
 }
  pDB1->close();                     // コネクションの解放
}

（例２） 詳細版クラスのトランザクション

////////////////////////////////////////////////////////////
///  クラスライブラリによるトランザクション制御（詳細版）

DBDriverManager*  pDrvMan;
DBDriver*  pDriver;
DBConnection* pCnct;
DBTransaction* pTrns;
 try
 {
   pDrvMan = new DBDriverManager;
                       //DBDriverManagerをnew演算子で生成
   pDrvMan->InitializeMessage();
   pDriver = pDrvMan->Driver("DBDEF_HIR1");
                                // データベース種別名の設定
   pTrns = pDrvMan->Transaction();
                          // DBTransactionオブジェクト生成
   pCnct = pDriver->Connect("Con1",      //データベース接続
                            "UserID","Password",NULL,NULL,
                            "db01",LOCK_OPT_WAIT,0,STMT_SYNC);
   pCnct->RegisterTransactions(pTrns);
                                  //オブジェクトの関連付け
   pTrns->BeginTrans();           // トランザクションの開始
   :  // データ操作など，その他の処理
   pTrns->Commit();     // 処理が正常に終了した場合コミット
   :
 }
 catch(DBSQLCA e)
 {
   cout << "エラーが発生しました。¥n" << e.ErrorMessage << "¥n"
                                                      << flush;
   if(e.e_SQLERROR)
     cout << e.e_SQLERROR << "¥n" << flush;
                                     // エラーメッセージの取得
 {
     pTrns->Rollback();            // 処理中ならばロールバック
 }
 if(pCnct)
 {
   pDriver->RemoveConnection("Con1");    // コネクションの解放
   pCnct = NULL;
}

2.3.2　複数のDBMSを対象にトランザクション制御を行う方法（TPBrokerのOTS機能を使用する場合）

この方法では，DBMSへのアクセスは一つのDBMSを対象にトランザクション制御を行う方法と同じで，トランザクション制御の部分でTPBroker for C++が提供するOTS機能を使用します。

OTS機能はRed Hat Linux版では使用できません。

＜この項の構成＞

(1)　動作概要

(2)　リソースマネジャの動作環境の設定（①）

(3)　リソースマネジャの登録（②）

(4)　アプリケーションでの処理手続き（③，④）

(5)　グローバルトランザクション（⑤）

(6)　サンプルコーディング

(7)　DBStatementオブジェクトの使用可能範囲

(1)　動作概要

複数のDBMSを対象にトランザクション制御を行う場合の動作概要を図2-1に示します。TPBrokerのトランザクション制御では， X/Openで規定されたDTPモデルに準拠し，ユーザアプリケーションをアプリケーションプログラム（AP），DBMSをリソースマネジャ（RM），トランザクション制御を行うTPBrokerをトランザクションマネジャ（TM）と呼びます。

図2-1　複数のDBMSを対象にトランザクション制御を行う場合の動作概要

複数DBMSに対してトランザクション制御する場合（③）は，TPBrokerのメソッドを使ってトランザクションの開始・決着を記述し，その間のDBMSへのアクセス（④）はDABroker for C++のメソッドを使います。このときDABroker for C++のメソッドの延長でDABrokerがトランザクション識別子を取得し，SQLへ付加してDBMSへアクセスします。つまり，DABroker for C++のメソッドを使用するCORBAオブジェクトは別々であっても，トランザクション識別子が引き継がれるような仕組みになっています。

次に図2-1の丸付き数字の順に，必要になる準備，アプリケーションの処理手続きなどを説明します。TPBrokerのコマンドの詳細についてはTPBrokerのマニュアル「トランザクショナル分散オブジェクト基盤TPBrokerユーザーズガイド」を参照してください。

(2)　リソースマネジャの動作環境の設定（①）

TPBrokerの機能（コマンドなど）を使用してリソースマネジャ（DBMS）のXAインタフェースを利用するために必要な情報をTPBrokerのシステム定義へ設定します。

TPBrokerのシステム定義には，システム環境定義やプロセス監視定義があります。DBMSごとに固有な情報なので，使用するDBMSのドキュメントを参照して登録してください。

例えば，システム環境定義の中のリソースマネジャ定義では，X/Openの規格に従った，オープン文字列，クローズ文字列，環境変数などDBMSで解釈される情報を設定します。設定にはTPBrokerのtskeycreate，tsdefvalueコマンドを使います。

(3)　リソースマネジャの登録（②）

アプリケーションで使用するリソースマネジャ（DBMS）をトランザクションマネジャへTPBrokerのtslnkrmコマンドを使って登録します。登録方法には，動的登録と静的登録があります。

(4)　アプリケーションでの処理手続き（③，④）

(a)　グローバルトランザクションの開始・決着

アプリケーションでは，TPBrokerが提供するメソッドを使ってトランザクションの開始と決着を記述します。このトランザクションのことをTPBrokerではグローバルトランザクションと呼んでいます。

グローバルトランザクションの開始と決着はTPBrokerが提供する次のメソッドを使います。

＃ | 処理 | 使用するTPBroker提供のメソッド
１ | 開始 | CosTransactions::Current::begin()メソッド
２ | 決着(コミット） | CosTransactions::Current::commit()メソッド
３ | 決着(ロールバック) | CosTransactions::Current::rollback()メソッド

(b)　DBMSへのアクセス手続き

DBMSへのアクセスは，一つのDBMSを対象にトランザクション制御を行う方法と同様ですが，オブジェクトの生成方法が一部変わります。詳細は次の個所を参照してください。

簡易版クラスを使用する場合
DBRDatabaseクラスのコンストラクタ
DBRDatabaseクラスのConnectメソッド

詳細版クラスを使用する場合
DBDriverManagerクラスのDriverメソッド
DBDriverクラスのConnectメソッド

この指定によって，そのオブジェクト，すなわちDBMSへのアクセスはグローバルトランザクションの制御対象になるわけです。指定しない場合は対象からはずれるので，DABrokerが提供しているトランザクション用のメソッド（DBTransaction）を使って制御します。

(c)　アプリケーションのリンケージ

作成したアプリケーションのリンケージの際に，次の三つのオブジェクトファイルを付け加えてください。

トランザクション制御用オブジェクトファイル
TPBrokerのtsmkobjコマンドでアプリケーションが使用しているDBMSを対象にトランザクション制御で必要になるXAスイッチリストを含むオブジェクトファイルを作成します。
例)　リソースマネジャ名がOracle_XAの場合
tsmkobj -o oracle_xa -r Oracle_XA

DBMSが提供するXA用ライブラリ
DBMSのドキュメントを参照して指定してください。

DABroker for C++が提供するライブラリ

(5)　グローバルトランザクション（⑤）

グローバルトランザクションの開始によってトランザクションの識別子が付与され，アプリケーションとDBMSの間でのアクセスは同じトランザクションの識別子で管理されます。コミットによって該当する識別子を対象にXAインタフェースを使ってトランザクションマネジャとDBMSの間で2相コミットプロトコルが実行されます。

(6)　サンプルコーディング

（例１）簡易版クラスのトランザクション

////////////////////////////////////////////////////////////
///  TPBrokerによるトランザクション制御（簡易版）
#include "tsport_c.hh"
#include "tpcosots_c.hh"
#include "dbbroker.h"

DBRDatabase *pDB1
DBRDatabase *pDB2

int main(int argc,char* argv[])
{
 pDB1 = NULL;
 pDB2 = NULL;

 try
 {
   CORBA::ORB_var orb=CORBA::ORB_init(argc,argv);
   CORBA::BOA_var boa=orb->BOA_init(argc,argv);
   CORBA::Object_var obj=orb->resolve_initial_referrences
                                  ("TransactionCurrent");
   CosTransactions::Current_var current=
                  CosTransactions::Current::_narrow(obj);

current->begin();　　　// グローバルトランザクションの開始

   try
   {
     pDB1 = new DBRDatabase(DRV_TYPE_ORACLE7,"XA");
     pDB1->Connect("orauser", "orapw1", "ORA1");
     pDB1->ExecuteDirect("INSERT INTO SAMPLETABLE
                                       VALUES(1,'ABC')");

     pDB2 = new DBRDatabase(DRV_TYPE_ORACLE7,"XA");
     pDB2->Connect("orauser2", "orapw2", "ORA2");
     pDB2->ExecuteDirect("INSERT INTO SAMPLETABLE2
                                       VALUES(2,'DEF')");

current->commit(1);
            // グローバルトランザクションのコミット

     pDB1->Close();
     pDB2->Close();
  }
  catch (DBSQLCA& ca)
  {
    current->rollback();
            // グローバルトランザクションのコミット
    // エラー処理
  }
 }
 catch(CORBA::SystemExecution se)
 {
   //  エラー処理
 }
 if(pDB1)
   delete pDB1;
 if(pDB2)
   delete pDB2;
 return();
}

（例２）詳細版クラスのトランザクション

///////////////////////////////////////////////////////////
///  TPBrokerによるトランザクション制御（詳細版）
#include "tsport_c.hh"
#include "tpcosots_c.hh"
#include "dbbroker.h"

DBDriverManager * pDrvMan;

int main(int argc, char* argv[])
{
 pDrvMan = NULL;
 try
 {
   CORBA::ORB_var  orb = CORBA::ORB_init(argc, argv);
   CORBA::BOA_var  boa = orb->BOA_init(argc, argv);
   CORBA::Object_var  obj = orb->resolve_initial_references
                                   ("TransactionCurrent");;
   CosTransactions::Current_var  current =
                    CosTransactions::Current::_narrow(obj);

   current->begin();    // グローバルトランザクションの開始

   try
   {
     pDrvMan = new DBDriverManager;
     pDrvMan->InitializeMessage();

// OTS機能を使用したトランザクション制御の使用
     DBDriver*  pDriver =
                   pDrvMan->Driver(DRV_TYPE_ORACLE7,"XA");

     DBConnection*  pConnect1 = pDriver->Connect
                ("Sample1", "orauser1", "orapw1", "ORA1");
     DBConnection*  pConnect2 = pDriver->Connect
                ("Sample2", "orauser2" , "orapw2","ORA2");
     pConnect1->ExecuteDirect
             ("INSERT INTO SAMPLETABLE VALUES (1,'ABC')");
     pConnect2->ExecuteDirect
             ("INSERT INTO SAMPLETABLE VALUES (2,'DEF')");

     current->commit(1);     // トランザクションのコミット

     pConnect1->Close();
     pConnect2->Close();
   }
   catch (DBSQLCA& ca)
   {
     current->rollback();
                        // トランザクションのロールバック
     //エラー処理
   }
 }
 catch (CORBA::SystemException se)
 {
   //エラー処理
 }
 if(pDrvMan)
   delete pDrvMan;
 return 0;
}

(7)　DBStatementオブジェクトの使用可能範囲

DBStatementオブジェクト，DBPreparedStatementオブジェクト，DBCallableStatementオブジェクトについては，複数のサーバメソッド間で共有しないようにしてください。同じＲＭに対する操作であっても，異なるスレッドで起動されたメソッドでは正常に動作しません。あるメソッドで生成したDBStatementオブジェクト（DBPreparedStatementオブジェクト，DBCallableStatementオブジェクト）はそのメソッド内で削除するようにしてください。

2.3.3　複数のDBMSを対象にトランザクション制御を行う方法（OpenTP1を使用する場合）

この方法では，DBMSへのアクセスは一つのDBMSを対象にトランザクション制御を行う方法と同じで，トランザクション制御の部分でTPBroker for C++が提供するOpenTP1を使用します。

＜この項の構成＞

(1)　動作概要

(2)　OpenTP1を使用する場合のDABroker for C++の操作

(3)　注意事項

(1)　動作概要

OpenTP1を使用してトランザクション制御を行う場合の動作概要を図2-2に示します。OpenTP1のトランザクション制御は，X/Openで規定されたDTPモデルに準拠しており，ユーザアプリケーションをアプリケーションプログラム（AP），HiRDBをリソースマネジャ（RM），トランザクション制御を行うOpenTP1をトランザクションマネジャ（TM）と呼びます。

図2-2　OpenTP1を使用してトランザクション制御を行う場合の動作概要

グローバルトランザクションを制御する場合，APはOpenTP1に対してトランザクションの開始・決着の要求を出します。このときDABroker for C++のDBTransactionクラスは使用せず，OpenTP1が提供するインタフェースを使用します。グローバルトランザクションの制御対象となっているデータベースに対して検索・更新処理をする場合はDABroker for C++のメソッドを使います。

HiRDBを使用する分散トランザクション環境の構築やグローバルトランザクションの制御方法については，OpenTP1のマニュアル，及びHiRDBのマニュアルを参照してください。

(2)　OpenTP1を使用する場合のDABroker for C++の操作

HiRDBを使用した分散トランザクション環境で，SQLの処理をグローバルトランザクションの制御対象とするためには，DABroker for C++のメソッドを次のように使用する必要があります。

データベースへのアクセスをグローバルトランザクションの制御対象とした場合
トランザクション制御はOpenTP1が提供するインタフェースを使うため，DABroker for C++が提供しているDBTransactionクラスは使用しません。

DBRDatabaseクラスを使用している場合
CommitメソッドとRollbackメソッドは使用できません。これらのメソッドを使用しても，トランザクションの制御は行いません。

グローバルトランザクションの制御対象としない場合
DBTransactionクラスを使用してトランザクションを制御します。

グローバルトランザクションの制御対象とするためにデータベースに接続する場合
接続先データベース定義ファイルによる接続はできません。

OpenTP1のトランザクション制御を使用する場合
次の関数の使用方法に注意してください。

DBRDatabaseクラスのコンストラクタ（「4.3　DBRDatabaseコンストラクタ」参照）

DBRDatabaseクラスのConnectメソッド（「4.3　Connectメソッド」参照）

DBDriverManagerクラスのDriverメソッド（「5.3　Driverメソッド」参照）

DBDriverクラスのConnectメソッド（5.4　Connectメソッド）

上記以外の動作についてはグローバルトランザクションの制御対象としない場合と変更ありません。

(3)　注意事項

(a)　排他制御に関する注意

複数のデータベースにアクセスする場合，排他制御の範囲はデータベース単位です。複数のデータベースにわたる排他制御はできません。つまり，一つのデータベース内でのデッドロックは検出されますが，複数のデータベース間にわたる待ち状態は検出されないことになります。このため，複数のデータベース間でデッドロックが発生するようなアプリケーションは設計しないでください。

(b)　HiRDBのライブラリについて

アプリケーションが使用するHiRDBのライブラリは，静的登録・動的登録どちらの場合も各OSの複数接続機能に対応したシングルスレッド用のライブラリを使用してください。

(c)　スレッドについて

OpenTP1上で動作するプログラムではスレッドを生成してはいけません。

DABroker for C++とHiRDBでもシングルスレッドに対応したライブラリを使用する必要があります。DABroker for C++が提供するシングルスレッドライブラリを使用する場合には，次の条件を満たす必要があります。

DABroker for C++を使用するアプリケーション（プロセス）が，pthreadライブラリを使用しないこと。

DABroker for C++のマルチスレッドを前提とする次の機能は使用しないこと。

非同期処理機能
詳細については「1.4.3　同期・非同期処理」を参照してください。

2バッファ方式
詳細については「3.3.3　検索性能の向上策」を参照してください。

(d)　グローバルトランザクションの制御対象としないアプリケーションの作成について

トランザクション制御
グローバルトランザクションの制御対象としないアプリケーションでは，トランザクション制御はDBTransactionクラスを使用してください。

HiRDBのライブラリについて
アプリケーションが使用するHiRDBのライブラリは，各OSに合ったライブラリを使用してください。

シングルスレッドライブラリ

OpenTP1上で動作するプログラムではスレッドを生成しないでください。DABroker for C++とHiRDBでもシングルスレッドに対応したライブラリを使用する必要があります。詳細については「3.3.4(3)スレッドについて」を参照してください。

2.3.4　排他制御

排他制御では，レコードやテーブルのロック方法を設定したり，データの入力方法までも設定します。この排他制御は，データの整合性やアプリケーションの実行性能に影響するものであり，正しく理解して利用することが必要です。特に，性能を重視する場合，ロックする対象や範囲を必要最小限とする必要があります。

また，利用するデータベースによって，この排他制御の機能や動作が異なりますので，注意が必要です。

＜この項の構成＞

(1)　レコード排他の種類

(2)　HiRDB，XDM/RDの排他

(3)　ORACLEの排他

(4)　SQL Anywhere，Adaptive Server Anywhereの排他

(5)　SQL Serverの排他

(6)　SQL/Kの排他

(7)　UPDATE，DELETE，INSERT文によるロック

(8)　LOCK文によるテーブルのロック

(9)　排他エラーとデッドロック

(10)　TPBrokerのOTS機能を利用するケースの排他

(1)　レコード排他の種類

(a)　排他の設定方法

簡易クラスでは，ResultSetに検索結果を得る時，DBRResultSetクラスのExecuteメソッドの引数で排他の種類を設定します。

詳細版クラスでは，ResultSetに検索結果を得る時，SetResultSetTypeメソッドの引数で排他の種類を設定します。

(b)　排他の種類

ExecuteメソッドやSetResultSetTypeメソッドで設定する排他の種類と目的について説明します。

更新目的の検索
排他の種類として，TYPE_EXCLUSIVEを指定します。基本的に，SELECT文には"FOR UPDATE"が付加され，検索したレコードはロックされます。ResultSetから更新する場合は，この排他を選択してください。TYPE_EXCLUSIVEは，すべてのデータベースに有効です。

参照目的の検索
TYPE_NONEを指定します。この指定は，SQL実行時に排他オプションは付加されず，ロック方法は，対象となるデータベースのデフォルトとなります。

ダーティリード
TYPE_NOWAITを指定します。この指定は，レコードにどの種類のロックが掛かっていても，レコードを検索する（ダーティリード）オプションです。このため，読み取りの一貫性は保証されません。また，HiRDB，XDM/RD，SQL Serverに有効です。

(c)　ロックの有効範囲

簡易クラスでは，Executeメソッドでロックの方法を設定した場合に，ロック制御されるのは，Openメソッド実行時点から，コミット，又はロールバック実行終了までの間です。詳細版クラスでは，GetResultSetメソッド実行時点から，コミット又はロールバック実行終了までロック制御されます。

(2)　HiRDB，XDM/RDの排他

HiRDB，XDM/RDでは，排他の種類ごとに下記オプションが付加されます。

TYPE_EXCLUSIVE
SELECT文に"FOR UPDATE"が付加され，レコード排他は，WITH EXCLUSIVE LOCKが仮定されます。

TYPE_NONE
SELECT文にオプションは付加されません。

TYPE_WAIT
"WITHOUT LOCK WAIT"が付加されます。このオプションでは，検索時に共有ロックされますが，参照が済んだレコードからロックが解除されます。
TYPE_WAITを指定した検索では，トランザクションの終了を待たせないで排他が解除されるので，同時実行性が向上します。

TYPE_NOWAIT
"WITHOUT LOCK NOWAIT"が付加されます。レコードにどの種類のロックが掛かっていても,又コミットされていないデータも検索します。このため,読み取りの一貫性は保証されません。

TYPE_SHARED
"WITH SHARE LOCK"が付加されます。このオプションでは，検索時に共有ロックされます。共有ロックの掛かったレコードは，ほかのトランザクションから参照できますが，更新はできません。

(3)　ORACLEの排他

ORACLEの場合，排他の種類ごとに下記オプションが付加されます。

TYPE_EXCLUSIVE　… "FOR UPDATE"が付加されます。

TYPE_NONE, TYPE_SHARED　… SELECT文にオプションは付加されません。

TYPE_WAIT　… 利用できません。

TYPE_NOWAIT　… 利用できません。

ORACLEの場合，TYPE EXCLUSIVEだけですが，SQLのLOCK文を実行（ExecuteDirectメソッド）することによっても，レコードのロック方法やテーブルのロック方法を設定できます。

下記にLOCK文で設定できる排他オプションの概略について説明します。詳細については，ORACLEのドキュメントを参照してください。

ROW SHARE／SHARE UPDATE
レコードの共用モードです。参照ロックはできません。更新・追加・削除レコードはロックされます。

ROW EXCLUSIVE
レコードの排他モードです。参照ロックができ，更新・追加・削除レコードはロックされます。

SHARE ROW EXCLUSIVE
レコードの共用排他モードです。

SHARE
テーブルの共用モードです。参照ロックはできません。更新・追加・削除できません。

EXCLUSIVE
テーブル単位にロックを掛けます。

(4)　SQL Anywhere，Adaptive Server Anywhereの排他

このデータベースの場合，排他の種類ごとに下記オプションが付加されます。

TYPE_EXCLUSIVE　… "FOR UPDATE"が付加されます。

TYPE_NONE, TYPE_SHARED　… SELECT文にオプションは付加されません。

TYPE_WAIT　… 利用できません。

TYPE_NOWAIT　… 利用できません。

SQL Anywhere，Adaptive Server Anywhereの場合，SQLのSET OPTION文を実行（ExecuteDirectメソッド）することによっても，レコードのロック方法を設定できます。

下記にSET OPTION文で設定できる排他オプションの概略について説明します。詳細については，データベースのドキュメントを参照してください。また，ロックモードを切り替える場合には，再度SET OPTION文を実行する必要があります。

SET OPTION ISOLATION_LEVEL=n

n=0：参照ロックを使用しないため，ほかのトランザクションで排他ロックされているレコードも検索します。検索したレコードは参照ロックしません。
排他ロックされているレコードの更新は待ちとなります。

n=1：参照ロックされていても，レコードを検索します。
検索したレコードは，カーソルがあるレコードに対して参照ロックをかけますが，参照が済んだレコードから参照ロックを解除します。排他ロックされているレコードのアクセスでは，待ちとなります。

n=2：参照ロック，排他ロックされているレコードのアクセスで待ちとなります。
検索したレコードには参照ロックをかけ，更新したレコードには排他ロックをかけます。

n=3：ISOLATION_LEVEL=2の制御に加え，検索した条件を満たすレコードの追加，更新を抑止するためファントムロックをかけます。

オプションの詳細については，SQL Anywhereのドキュメントを参照してください。

(5)　SQL Serverの排他

SQL Serverの場合，排他の種類ごとに下記オプションが付加されます。

TYPE_EXCLUSIVE　… "UPDLOCK"が付加されます。
Openメソッド実行時点からレコードに共有ロックを掛け，SQLで更新する時点で更新ロックを掛けます。共有ロックを掛けられたレコードは，ほかのトランザクションから参照することは可能ですが，更新できません。更新ロックが掛かるとほかのトランザクションから更新も参照もできません。

TYPE_NONE, TYPE_SHARED　… SELECT文にオプションは付加されません。

TYPE_WAIT　… "HOLDLOCK"が付加されます。
Openメソッド実行時点からトランザクションの終了まで共有ロックを掛けます。共有ロックの掛かったレコードは，ほかのトランザクションから参照できますが，更新はできません。

TYPE_NOWAIT　… "NOLOCK"が付加されます。

(6)　SQL/Kの排他

SQL/Kの場合，排他の種類ごとに下記オプションが付加されます。

TYPE_EXCLUSIVE　… "FOR UPDATE"が付加されます。
FOR UPDATE句の詳細については，マニュアル「SQL/K」を参照してください。

TYPE_NONE，TYPE_WAIT，TYPE_NOWAIT，TYPE_SHARED　… SELECT文にオプションは付加されません。

SQL/Kの場合，SQLのSELECT文にFOR UPDATE句を指定することによっても，レコードのロック方法を設定できます。この場合，資源の競合時に共用しない設定にしていると，競合が解除されるまで待ち状態になります。

(7)　UPDATE，DELETE，INSERT文によるロック

簡易クラスでは，DBRDatabaseクラスのExecuteDirectメソッドにUPDATE文，DELETE文，INSERT文を使って更新・削除・追加することができます。

詳細クラスでは，DBStatementクラスのExecuteメソッドなどにUPDATE文，DELETE文，INSERT文を使って更新・削除・追加をすることができます。

UPDATE文，DELETE文，INSERT文の場合には， ExecuteDirectやExecuteメソッド実行開始からコミット，又はロールバック実行時点までの間，更新・削除・追加されたレコードがロックされます。

このUPDATE文，DELETE文で更新・削除対象のレコードは，いったん検索してから更新・削除されますので検索時はロックによる待ちが発生します。

SQL Serverの場合は付属のドキュメントを参照してください。

(8)　LOCK文によるテーブルのロック

簡易クラスの場合，DBRDatabaseクラスのExecuteDirectメソッドでLOCK文を実行することにより，テーブルをロックすることができます。

詳細クラスの場合，DBConnectionオブジェクトのExecuteDirectメソッド，DBStatementオブジェクトのExecuteメソッド，DBPreparedStatementオブジェクトのExecuteメソッドからLOCK文を実行することにより，テーブルをロックすることができます。

テーブルのロック範囲は，LOCK文を実行した時点から，コミット，又はロールバック実行終了までの間です。

LOCK文でテーブルをロックすると，レコード単位のロックをしないため，オーバヘッドが大幅に削減できますが，同時に動作できるアプリケーションの多重度が下がります。

テーブル単位にロックを掛けるためには，LOCK文でテーブルをEXCLUSIVEモードとします。

（例）hirdb.ExecuteDirect("LOCK TABLE TABLE1 IN EXCLUSIVE");

SQL Serverでは，SELECT文の排他オプションを使ってテーブルをロックし，詳細版クラスの場合は，SetResultSetTypeメソッドの設定でテーブルをロックすることもできます。「2.3.3(5)SQL Serverの排他」を参照してください。

SQL Anywhere,Adaptive Server Anywhereの場合はテーブルのロックは使用できません。

(9)　排他エラーとデッドロック

(a)　排他エラー時の動作

ロックを掛けようとしたときに，ほかのトランザクションによって該当するレコードやテーブルがロックされていた場合の動作として，ロックが解除されるまで待つか，エラーを報告するかのどちらかの動作を選択できます。この選択は，データベース接続時にConnectメソッドの引数で次の指定をします。

LOCK_OPT_WAIT
ロックが解除されるまで待つ

LOCK_OPT_NOWAIT
ロックされていた場合は，すぐにDB_ERROR_DRIVER_ERRORのエラーをスロー

これ以外に，ロックされていたときのエラースロー時に，ロールバックするかどうかを指定する， LOCK_OPT_WITH_ROLLBACK, LOCK_OPT_WITHOUT_ROLLBACKがありますが，使用するDBMSによって動作が異なるため，詳細については「4.簡易版関数詳細」又は「5.詳細版関数詳細」のConnectメソッドを参照してください。

簡易版クラスでは，DBRDatabseクラスのConnectメソッドで指定した値は，そのコネクションでのデフォルト値となります。また，ロックされていたときの動作は，DBRResultSetクラスのExecuteメソッドの実行時にも指定できます。実行時に特に指定しない場合は，DBRDatabaseクラスのConnectメソッドで指定した値が有効になります。

詳細版クラスでは，DBDriverクラスのConnectメソッドで指定した値がデフォルト値となります。また，ロックされていたときの動作は，DBStatementクラスのExecuteメソッド，又はDBPreparedStatementクラスのExecuteメソッドの実行時にも指定できます。実行時に特に指定しない場合は，Connectメソッドで指定した値が有効になります。

一般的なアプリケーションでは，LOCK_OPT_WAITと設定し，ロックエラーを意識しないで，デッドロックだけを意識したコーディングにします。LOCK_OPT_NOWAITを使用するアプリケーションでは，個々のデータベースアクセスごとに一定時間を空けてリトライをするなどのコーディングが余計に必要となります。

SQL Serverの場合，引数の指定は無効です。ロックが解除されるまで待ちます。

(b)　排他エラーとデッドロックの判定

排他エラー時の動作で，LOCK_OPT_WAITを指定した場合，ほかのトランザクションとの間でデッドロックが発生することがあります。この場合，DBMSからエラーが返され，DABroker for C++ではDB_ERROR_DRIVER_ERRORをスローします。

トランザクション処理中にエラーがスローされたとき，DBSQLCAクラスのe_USERCODE，又はe_USERERRORメソッドに次に示す値が設定されます。

排他エラーが発生した場合
(ロックしようとしたときに対象となるリソースが，既にほかのトランザクションによって排他されていた場合)
e_USERCODEに-20001，e_USERERRORに排他されていることを示すエラーメッセージが設定されます。

デッドロックが発生した場合
e_USERCODEに-20002，e_USERERRORにデッドロックが発生したことを示すエラーメッセージが設定されます。

ただし，RDA Link for Gatewayを経由してメインフレーム系のデータベースをアクセスする場合には，e_USERCODEにエラーが返らないので注意が必要です。

(c)　デッドロック時の対応

アプリケーションでは，デッドロックが発生した場合に，どのように対処するかを決めておく必要があります。

基本的には，デッドロックが発生したときには，デッドロックが通知されたトランザクションは，ロールバックしてそのロックを解除することで，デッドロックを回避します。

その後の処理方法は，アプリケーションの形態によって異なりますが，特にバッチ処理，又はWebから起動されるアプリケーションの場合は，次のような処理をするのが一般的です。

デッドロックを検知したため，ロールバックを実行してロックを解除します

一定時間を置いて，再度実行します

一定の回数，繰り返して同様のエラーが起こるようであれば，アプリケーションの処理を終了させます

デッドロックが発生した場合のコーディング例については，「2.4 エラー処理」を参照してください。

(d)　効率を考えた参照と更新

複数のサーバアプリケーションからDABroker及びデータベースにアクセスする場合は，使用するデータベースの排他範囲を最小限に押さえたり，データベースとの連絡回数を削減することを考慮しておく必要があります。

参照してから更新するような場合，次のような方法があります。

更新したいデータを，まず参照専用のResultSetで検索し，排他制御は掛けません。

検索したデータの中から更新に必要なレコードを確認します。

更新対象のレコードだけを更新可能なResultSetで検索し，ロックを掛けます。

レコードを更新します

必要なレコードだけにロックが掛かるので，ほかのトランザクションからのアクセスへの排他を最小限に押さえられます。

(10)　TPBrokerのOTS機能を利用するケースの排他

TPBrokerのOTS機能を利用し，複数のDBMSをアクセスする場合，排他制御の範囲はDBMS単位です。複数のDBMSにまたがる排他制御は行われません。つまり，一つのDBMS内でのデッドロックは検出されますが，複数のDBMS間にまたがる待状態は検出されないことになります。このため，複数のDBMS間でデッドロックが発生するようなアプリケーションは設計してはなりません。

2.4　エラー処理

DABrokerでは，アプリケーションからのデータベースアクセス要求に対して，アプリケーションの処理続行が不可能なエラーが発生した場合，エラーをスローします。

エラーは，DBSQLCAクラスを利用して解析することができます。

特に，DABrokerでは，DBMSごとに異なるエラー発生時のエラーコードの違いを吸収し，アプリケーションでは，DBMSを意識することなくエラー処理を記述できます。ただし，すべてのエラーコードを対象としている訳ではなく，アプリケーションのエラー処理の判断に必要な，次のコードだけを対象としています。

エラーの種類
e_USERCODE
e_USEREEROR

ロックエラー
-20001
更新またはロックしようとしたレコードは他のトランザクションによってすでにロックされています。

デッドロック
-20002
デッドロックが発生しました。

UserID/Password不正※
-20003
ユーザIDまたはパスワードの指定が不正です。

テーブルのアクセス
権限不足
-20004
テーブルに対するアクセス権限が不足しています。

注※

SQL/Kの場合，接続時以外(例えば不正な構文のSQL文を指定してDBStatement::Execute関数を実行したとき)でもこのエラーコードとメッセージが返される場合があります。接続時以外でこのエラーコードとメッセージが返された場合は無視してください。

＜この節の構成＞

2.4.1　基本的なアプリケーションのエラー処理

2.4.1　基本的なアプリケーションのエラー処理

データベースアクセス中のエラーは，C++の例外処理に通知されます。このため，例外処理の中でエラーコードを判断し，エラー後の処理を決定します。

アプリケーションの構造は，さまざまな構造が考えられますが，ここでは，メインの処理，データベースとの接続処理，データベースアクセス処理が分離されているという前提で，エラー処理を説明します。

デッドロックエラーの場合

まず，仕掛り中のトランザクションをロールバックします。その後，時間をおいてリトライして，同様のエラーが何度も起こる場合はアプリケーションの処理を中止します。

パスワード不正，アクセス権限不足の場合

アプリケーションからエラーメッセージを出力して終了します。

＜この項の構成＞

(1)　メイン処理

(2)　データベース接続処理

(3)　データベースアクセス処理

(1)　メイン処理

メイン処理では，外部から入力したユーザIDとパスワードをデータベース接続関数へ渡し，次にデータベースアクセス関数を呼び出すものとします。

#define LockError -20001
#define DeadLock  -20002
#define UIDPwdInv -20003
////////////////////////////////////////////////////////////
/// メイン処理
main(int argc, char** argv)
{
  retry=10;
      .....
ユーザIDとパスワード入力
データベース接続関数呼び出し
while(retry > 0){
    try{
    データベースアクセス関数呼び出し
    }
    catch(DBSQLCA e) {
      if (e.e_USERCODE == DeadLock) {
        // デッドロックエラー
        pDB1->Rollback();
        cout << e.e_USERERROR << endl;
        cout << "3秒待ってリトライします" << endl;
        SLEEP(3);
        retry--;
      } else {
        retry = 0;
      }
    }
  }
}

(2)　データベース接続処理

メイン関数から渡されたユーザIDとパスワードが正しくなかった場合，アプリケーションからエラーメッセージを出力し，接続を中止します。

////////////////////////////////////////////////////////////
/// データベース接続処理
.....
  try{
  //データベース接続処理
  }
  catch(DBSQLCA e)
  {
    if (e.e_USERCODE == UIDPwdInv )
    {
      // USERID/Password不正
      cout << e.e_USERERROR << endl;
      cout << "接続に失敗しました。
         ユーザID又はパスワードが正しくありません。"<< endl;
    } else {
      .....
    }
  }

(3)　データベースアクセス処理

データベースアクセス処理中のエラーは，catchにスローされるので，e_USERCODEに設定されたエラーコードを判定します。データベースアクセスで判断するエラーで，デッドロックが発生した場合は，ロールバックしてロックを解除し，デッドロックを回避します。また，その後，複数回リトライしても同様のエラーが起こる場合は，アプリケーションを終了させます。

//////////////////////////////////////////////////////////////
// データベースアクセス処理
try{
     .....
     // 一つ目のテーブルをロック
     pRs1->Execute("SELECT IN,F_NAME FROM TEST",LOCK_OPT_WAIT);
     pRs1->open();
     // 二つ目のテーブルをロック
     pRs2->Execute("SELECT IN,F_COUNTRY FROM TEST2",LOCK_OPT_WAIT);
     pRs2->open();
  }
  catch(DBSQLCA e) {
    switch (e.e_USERCODE) {
      case DeadLock:    // デッドロックエラー
          throw e;
      case .....   :    // その他のエラー処理
          throw ....;
    }
  }
}

2.5　簡易版クラスのデータベースアクセス

ここでは，簡易版クラスを利用したデータベースアクセスの方法について説明します。

＜この節の構成＞

2.5.1　レコードの検索

2.5.2　検索レコードの参照

2.5.3　レコードの更新

2.5.4　レコードの削除

2.5.5　レコードの追加

2.5.6　DBRResultSet仮想関数の利用

2.5.1　レコードの検索

レコードの検索には，DBRResultSetクラスのコンストラクタを利用して生成するResultSetオブジェクトのメソッドを使用します。

レコードの検索は，SELECT文をExecuteメソッドで通知し，Openメソッドで検索を実行します。検索したレコードは，このResultSetオブジェクトに格納されます。

レコードの検索には検索したレコードを参照だけする参照目的とレコードの更新または削除をする更新目的の２種類があり，この目的により検索するレコード数が異なります。

また，SELECT文の組み立てでは，SELECTの一部を実行時に置き換える，?パラメタの利用も可能です。

＜この項の構成＞

(1)　参照目的の検索

(2)　更新目的の検索

(3)　?パラメタを使用した検索

(1)　参照目的の検索

参照を目的とした検索では，Executeメソッドの引数swTypeにTYPE_NONEを指定する必要があります。レコードの検索は，Openメソッドを呼び出すことにより実行され，検索したレコードがResultSetに読込まれます。ResultSetに読込むレコード数は，SetMaxRowsメソッドで設定します。

検索条件に一致したレコードすべてを処理する場合はNextメソッドでカーソルを移動します。この場合，SetMaxRowsメソッドで設定したレコード数を越えてNextメソッドが要求されると，次のレコードが自動的にResultSetに読込まれます。

参照専用のResultSetに検索結果を読込む例を示します。

//////////////////////////////////////////////////////////////
/// SQLの実行（検索）  
DBRResultSet *pRs1;  
 pRs1 = new DBRResultSet(pDB1);                // オブジェクトの生成

 pRs1->SetMaxRows(10);                         // レコード数
 pRs1->Execute("SELECT F1, F2 FROM TABLE1",    // SELECT文の設定
                  TYPE_NONE);                  // 参照目的
 pRs1->Open();                                 // レコードの検索
 while(!pRs1->IsEOF())
 {                  
   .....
   pRs1->Next();
 }

(2)　更新目的の検索

更新を目的とした検索では，Executeメソッドの引数swTypeにTYPE_EXCLUSIVEを指定する必要があります。この場合，ResultSetには１レコードだけが読込まれます。

TYPE_EXCLUSIVEを指定した場合は，検索時のSELECT文でFOR UPDATEオプションは指定する必要はありません。

注意事項

更新目的の検索の場合，下記例に示すSELECT文を指定するとデータベースによりエラーとなります（Executeメソッド実行時にエラーがスローされる）。

集合関数(avg, countなど)や組み込み関数を使用する場合

DISTINCTを使用する場合

GROUP BY句やUNION句を使用する場合

演算子を含む場合(UNION, INTERSECT, MINUS)

JOINを含む場合

上記に該当するVIEWを利用する場合

(3)　?パラメタを使用した検索

SELECT文の一部を実行時に置き換える?パラメタを利用する場合，Executeメソッドの引数で?パラメタ付きのSELECT文とします。?パラメタの値は，SetParamメソッドで指定します。レコードの検索は，Openメソッドを呼び出すことにより実行され，検索したレコードがResultSetに読込まれます。

?パラメタを使用した例を示します。

//////////////////////////////////////////////////////////////
/// ?パラメタを使用した検索
DBRResultSet *pRs1;  
 pRs1 = new DBRResultSet(pDB1);               // オブジェクトの生成

 pRs1->Execute("SELECT F1, F2 FROM TABLE1 ID > ? AND ID < ?",
                  TYPE_NONE);
 pRs1->SetParam(1,100);        // １番目の?パラメタに対する値の設定
 pRs1->SetParam(2,300);        // ２番目の?パラメタに対する値の設定
 pRs1->Open();                 // レコードの検索

2.5.2　検索レコードの参照

ここでは，ResultSetに読込まれたレコードを参照する方法について説明します。参照目的で検索したレコードをアクセスする時には，カーソルを制御してカレントレコードを決定する必要がありますが，更新目的で検索した場合には，１レコードだけが読込まれますのでカーソルの制御は不要です。

＜この項の構成＞

(1)　参照目的レコードのカーソル制御

(2)　フィールド値の参照・データ変換

(1)　参照目的レコードのカーソル制御

カーソルの移動には，次のメソッドを利用します。

カーソルを次のレコードへ移動（Nextメソッド）

カーソルを前のレコードへ移動（Perviousメソッド）

カーソルをn番目のレコードへ移動（Absoluteメソッド）

カーソルを現在のレコードからn個先のレコードへ移動（Relativeメソッド）

カーソルを最後のレコードへ移動（Bottomメソッド）

カーソルを先頭のレコードへ移動（Topメソッド）

カーソルを次のResultSetの先頭レコードへ移動（PageNextメソッド）

ResultSetには，SetMaxRowsメソッドで設定したレコード数だけが格納され，これより多くのレコードが検索されている場合は，NextメソッドやPageNextメソッドを呼び出し，次のレコードをResultSetに読込むことが必要です。

レコードを先頭から順に参照する場合には，Nextメソッドだけを利用することにより，次のレコードが自動的にResultSetに読込まれます。

ResultSetに読込まれたレコードのカーソルを自由に移動するようなケースでは，次のレコードをResultSetに読込むために，一度Bottomメソッドで最後のレコードに位置付け，Nextで読込む方法もありますが，PageNextメソッドを使用することにより，カーソルの位置を意識せず，次のレコードをResultSetに読込むことができます。

カーソルの移動は，ResultSetに格納されたレコードだけに対して有効であり，前に読込まれたレコードに位置づけることはできません。

カーソルがResultSetのレコードの範囲を越えて指定された場合には，エラーがスローされます。アプリケーションでは，カーソルを移動する前後でIsEOFメソッドの戻り値を確認することでResultSetの範囲を確認できます。

(2)　フィールド値の参照・データ変換

ResultSetのレコードのフィールド値は，DBRResultSetクラスのGetFieldメソッドを使って参照します。データベースのデータ型とGetFieldメソッドの引数に指定したデータ型とが異なる場合は，引数のデータ型に合わせて変換されます。データ型の変換規則については，「7. データ型」を参照してください。

//////////////////////////////////////////////////////////////
// 値の参照の例
LPTSTR          pField;
INT32           nField;
  //データベースのデータの検索処理
                  :
  // 検索結果をResultSetに取得
  // レコードの読み込み
  while(!pRs1->IsEOF())
  {
      // フィールドのデータの文字列変換と「ポインタ」の受け取り
          pRs1->GetField(1, &nField);
          cout << "  Data=" << nField;
          pRs1->GetField(2, &pField);
          cout << "  Data=" << pField;
      cout << endl;
      // 次のレコードの読み込み
      pRs1->Next();
  }

注意事項

Nullが格納されているフィールドに対してGetFieldメソッドを呼出すと取得データは意味のない値が戻されますので,Nullが格納される可能性があるフィールドに対してはIsFieldNullメソッドでフィールドの内容がNullでないことを確認してください。

文字列から数値データ型への変換に失敗した場合には，0が返されます。指定したフィールドがなかった場合や値が変換できない場合は，エラーをスローします。

Executeメソッドで，TYPE_BLOB_FILEを指定した場合は，BLOB型のフィールドに対するGetFieldメソッドの引数にファイル名称が戻されます。この場合，GetFieldメソッドの引数の型には，文字列と同様に，LPTSTRを指定してください。

2.5.3　レコードの更新

レコードを更新するには，検索したレコードを更新する方法（ResultSetを利用）と，UPDATE文で直接更新する方法とがあります。

データの更新が完了した後でCommitメソッドを発行してデータベースの更新情報を確定させる必要があります。

＜この項の構成＞

(1)　検索したレコードの更新

(2)　UPDATE文を利用した更新

(1)　検索したレコードの更新

レコードを検索し更新するためには，更新目的でレコードを検索する必要があります。検索されたレコードはResultSetに１レコードだけ格納され，このレコードを更新するには，Editメソッドで更新準備を指示し，SetFieldメソッドでフィールドの内容を変更し，Updateメソッドで更新を指示します。複数のレコードを処理する場合には，Nextメソッドで次のレコードを読込み，この処理を繰り返す必要があります。

SetFieldメソッドの引数に指定したデータ型とデータベースのデータ型とが異なる場合は，データベースのデータ型に合わせて変換されます。データ型の変換規則は「7. データ型」を参照してください。

//////////////////////////////////////////////////////////////
/// SQLの実行（更新）
DBRResultSet *pRs1;  
 pRs1 = new DBRResultSet(pDB1);               // オブジェクトの生成

  // 更新目的で検索
 pRs1->Execute("SELECT F1, F2 FROM TABLE1", TYPE_EXCLUSIVE);

 pRs1->Open();                     // レコードの検索
 while(!pRs1->IsEOF())
 {
   // フィールド"F2"のデータを更新。uFunc()というユーザ関数を使用
   pRs1->Edit();
   pRs1->SetField("F2", uFunc());
   pRs1->Update();

   pRs1->Next();                   // 次のレコードの読み込み
 }
 pDB1->Commit();                   // 更新内容の確定
  .....

注意事項

接続するDBMSがSQL Serverの場合，CloseメソッドでResultSetを削除してからCommitメソッドを呼出してください。Closeメソッドを呼ばないと排他ロックが解除されません。

BLOB型データの渡し方

Executeメソッドで，TYPE_BLOB_FILEを指定した場合は，BLOB型のフィールドに対するGetFieldメソッドの引数にファイル名称が戻されます。この場合，GetFieldメソッドの引数の型には，文字列と同様に，LPTSTRを指定してください。

XDM/RDをご使用の場合の注意

XDM/RDをご使用の場合，LONG VARCHAR型， LONG NVARCHAR型，及びLONG MVARCHAR型のフィールドのデータの更新はできません。SetFieldメソッドで値を設定しても，Updateメソッドの実行時にエラーになります。

(2)　UPDATE文を利用した更新

UPDATE文を使ってレコードを更新できます。これは，既に更新するデータや内容が特定できる場合に，UPDATE文で直接，更新個所及び値を指定する方法です。UPDATE文を利用してデータを更新するにはDBRDatabaseクラスのExecuteDirectメソッドを使用します。

////////////////////////////////////////////////////////////
/// SQLの実行(更新) - DBRDatabaseクラスでUPDATE文を指定
   pDB1->ExecuteDirect("UPDATE TABLE1 SET F1=100 WHERE F2=300");
   pDB1->Commit();

2.5.4　レコードの削除

レコードの削除方法には，検索したレコードを削除する方法（ResultSetを利用）と，DELETE文で直接削除する方法があります。

レコードの削除が完了した後でCommitメソッドを発行してデータベースの更新情報を確定させる必要があります。

＜この項の構成＞

(1)　検索したレコードの削除

(2)　DELETE文を利用した削除

(1)　検索したレコードの削除

レコードを検索し削除するためには，更新目的でレコードを検索する必要があります。検索されたレコードはResultSetに１レコードだけ格納され，このレコードを削除するには，Editメソッドで削除準備を指示し，Deleteメソッドで更新を指示します。複数のレコードを処理する場合には，Nextメソッドで次のレコードを読込み，この処理を繰り返す必要があります。

////////////////////////////////////////////////////////////
/// SQLの実行(削除)
 DBRResultSet *pRs1(pDB1);      // オブジェクトの生成

  // 更新目的で検索
  pRs1->Execute("SELECT F1，F2 FROM TABLE1", TYPE_EXCLUSIVE);

  pRs1->Open();                 // レコードの検索
  while(!pRs1->IsEOF())  
  {
     pRs1->Delete();            // 削除のためのDeleteメソッドの呼び出し
     pRs1->Next();      // Nextメソッドにより次のレコードの読み込み
  }
  pDB1->Commit();               // トランザクションのコミット
   .....

注意事項

接続するDBMSがSQL Serverの場合，CloseメソッドでResultSetを削除してからCommitメソッドを呼出してください。Closeメソッドを呼ばないと排他ロックが解除されません。

(2)　DELETE文を利用した削除

DELETE文を使ってレコードを削除できます。これは，既に削除するレコードが特定できる場合に，DELETE文で削除するレコードを指定する方法です。DELETE文を利用してレコードを削除するにはDBRDatabaseクラスのExecuteDirectメソッドを使用します。

//////////////////////////////////////////////////////////////
/// SQLの実行(削除)
    pDB1->ExecuteDirect("DELETE FROM TABLE1 WHERE F1=100");
    pDB1->Commit();

2.5.5　レコードの追加

レコードを追加するためには,ExecuteDirectメソッドを利用します。追加するレコードの内容を指定したINSERT文をExecuteDirectメソッドの引数に設定することにより，追加できます。

INSERT文には?パラメタが指定できません。

レコードの追加が完了した後でCommitメソッドを発行してデータベースの更新情報を確定させる必要があます。

//////////////////////////////////////////////////////////////
/// SQLの実行(追加)
    pDB1->ExecuteDirct("INSERT INTO TABLE1(F1,F2)
                                             VALUES(1,100)");
    pDB1->Commit();

2.5.6　DBRResultSet仮想関数の利用

DBRResultSetクラスでは，オーバライド可能な仮想関数を提供しています。この仮想関数を利用するためには，派生クラスを作成する必要があります。

ここでは，この関数仕様とその利用方法について説明します。

＜この項の構成＞

(1)　OnBeforeRefreshメソッドの仕様

(2)　OnMoveRecordメソッドの仕様

(3)　OnEndRecordメソッド

(4)　仮想関数の利用例

(1)　OnBeforeRefreshメソッドの仕様

■機能

Open，RefreshメソッドでResultSetに検索結果を読込む前に呼び出される。

■形式

virtual void OnBeforeRefresh(BOOLEAN bRefesh);

■引数

bRefesh … 呼び出し元がRefreshメソッドの場合はTRUE，OpenはFALSE

(2)　OnMoveRecordメソッドの仕様

■機能

Absolute，Bottom，Next，PageNext，Previous，Refresh，Relative，Topメソッドでカーソルの移動時に呼び出される。また，Updateメソッドで更新直前に呼び出される。

■形式

virtual void OnMoveRecord(BOOLEAN bSaveAndValidate);

■引数

bSaveAndValidate … 呼び出し元がUpdateメソッドの場合はTRUE，他はFALSE

(3)　OnEndRecordメソッド

■機能

カレントレコードを移動した結果，IsEOFがTRUEになった時に呼び出される。

■形式

virtual void OnEndRecord(BOOLEAN bEndRecord);

■引数

bEndRecord … TRUE固定

(4)　仮想関数の利用例

DBRResultSetクラスで提供する仮想関数を利用する例を説明します。この仮想関数を利用するためには，派生クラスを作成する必要があります。

(a)　派生クラスの外部仕様

図2-3に示すテーブルをアクセスするCustomクラスとし，OnMoveRecordのカーソル移動では，フィールド値をメンバ変数に格納し，Updateの時には，フィールド値をチェックするものとします。

図2-3　業務で使用するテーブルの例

(b)　派生クラスの作成

■派生クラスの仕様

Customコンストラクタ
機能
DBRResultSetクラスの機能を継承したCustomオブジェクトを生成します。テーブルcustomに対応した変数 tokuisakiCD，TELNO，ZIPCDを持ちます。
形式
Custom(DBRDatabase *pDatabase)
引数
pDatabase：DBRDatabaseオブジェクトのポインタを指定します。

Nextなどのカーソル操作メソッド
機能
カーソルを移動すると，テーブルCustomに対応した変数 tokuisakiCD，TELNO，ZIPCDにフィールド値を格納します。

Updateメソッド
機能
変数 tokuisakiCD，TELNO，ZIPCDにフィールド値を設定後に呼び出すとデータのチェックを行った後，Update処理を行う。

■派生クラスの定義

データの型をLPTSTRとしてメンバ変数tokuisakiCD，TELNO，ZIPCDを定義します。これらのメンバ変数はアプリケーションに参照させるためpublic属性にします。

OnMoveRecordメソッドのプロトタイプだけを定義します。

////////////////////////////////////////////////////////////
class Custom : public DBRResultSet
{
Public:
// Customのコンストラクタ
 Custom(DBRDatabase* pDatabase) ;
 // OnMoveRecord関数の定義
 virtual void OnMoveRecord(BOOLEAN bSaveAndValidate);
 // メンバ変数の定義
 LPTSTR tokuisakiCD;
 LPTSTR TELNO;
 LPTSTR ZIPCD;
};

■コンストラクタの定義

コンストラクタでは，フィールド値を格納するメンバ変数を初期化します。

////////////////////////////////////////////////////////////
Custom::Custom(DBRDatabase* pDatabase) :
                                    DBRResultSet(pDatabase)
{
 tokuisakiCD = NULL;
 TELNO = NULL;
 ZIPCD = NULL;
}

■OnMoveRecord仮想関数の再定義

Updateメソッドの場合，メンバ変数ZIPCDのデータの妥当性をチェックし，不当なデータの場合は０００を設定します。

他のカーソル移動メソッドの場合，カレントレコードの各フィールド値をそれぞれtokuisakiCD,TELNO,ZIPCDメンバ変数に設定します。

////////////////////////////////////////////////////////////
void Custom::OnMoveRecord(BOOLEAN bSaveAndValidate)
{
  if (bSaveAndValidate){        // レコードの更新要求か
    // 更新データのチェック
    if(ZIPCD[0]!='0') {         // 先頭文字は０か
       ZIPCD="000";             // ０００を設定
    }
    SetField(1, tokuisakiCD);
    SetField(2, TELNO);
    SetField(3, ZIPCD);
  } else {                      // いいえ
    GetField(1, &tokuisakiCD);
                       // USERIDフィールドをtokuisakiCD変数に設定
    GetField(2, &TELNO);        // TELフィールドをTELNO変数に設定
    GetField(3, &ZIPCD);        // ZIPフィールドをZIPCD変数に設定
  }    
};

2.6　詳細版クラスのデータベースアクセス

ここでは，詳細版クラスを利用したデータベースアクセスの方法について説明します。

＜この節の構成＞

2.6.1　レコードの検索

2.6.2　検索レコードの参照

2.6.3　レコードの更新

2.6.4　レコードの削除

2.6.5　レコードの追加

2.6.6　ストアドプロシジャの利用

2.6.1　レコードの検索

＜この項の構成＞

(1)　DBStatementクラスを利用した検索

(2)　DBPreparedStatementクラスを利用した検索

(3)　検索結果の確認

(1)　DBStatementクラスを利用した検索

レコードの検索にはSQL文のSELECT文を使います。DBStatementクラスを使用する場合， SELECT文中に?パラメタを指定できません。

アプリケーションでは， DBConnectionオブジェクトのCreateStatementメソッドを呼び出して， DBStatement オブジェクトを生成し，Executeメソッドの引数としてSELECT文を指定します。

ロック方法は，SetResultSetTypeメソッドで設定し，一度にResultSetに読み込むレコードの最大数は，SetMaxRowsメソッドを使って設定します。

レコードの検索は，DBStatementオブジェクトのGetResultSetメソッドを呼び出して，検索結果をResultSetに得ます。

//////////////////////////////////////////////////////////////
/// SQLの実行（検索）  ?パラメタを使用しない

DBStatement*                pStatement;
DBResultSet*                pResultSet;

                      // DBStatementオブジェクトの生成
pStatement = pConnect->CreateStatement();
                      // 排他オプションの設定
pStatement->SetResultSetType(TYPE_NONE);
                      // SELECT文の設定
pStatement->Execute("SELECT F1, F2 FROM TABLE1");
                      // レコードの検索
pResultSet = pStatement->GetResultSet();
.....

(2)　DBPreparedStatementクラスを利用した検索

SQL文のSELECT文中に?パラメタを指定した検索には，DBPreparedStatementクラスを使用します。

アプリケーションでは， DBConnectionクラスのCreatePreparedStatementメソッドの引数としてSQL文を指定して，DBPreparedStatement オブジェクトを生成し，Executeメソッドでデータベースへ通知（SQL文の解析）します。その後，?パラメタへの値を， SetParamメソッドで設定します。

ロック方法は，SetResultSetTypeメソッドで設定し，一度にResultSetに読み込むレコード数の最大値は，SetMaxRowsメソッドを使って設定します。

レコードの検索は，GetResultSetメソッドを呼び出して，検索結果をResultSetに得ます。

//////////////////////////////////////////////////////////////
/// SQLの実行（検索）  ?パラメタを使用

DBPreparedStatement*        pStatement;
DBResultSet*                pResultSet;
                  ：
                  ：
// DBPreparedStatementオブジェクトを生成。
// このとき，SQL文に?パラメタを設定
pStatement=pConnect->CreatePreparedStatement
("SELECT * FROM TABLE1 ID > ? AND ID < ? ");
pStatement->Execute();                           // SQL文の実行
pStatement->SetParam(1,100);
                          // SetParamで?パラメタに対する値の設定
pStatement->SetParam(2,300);
pResultSet = pStatement->GetResultSet();       // レコードの検索

(3)　検索結果の確認

レコードの検索結果は，DBResultSetオブジェクトのIsEOFメソッドを使って確認します。判定がFALSEであれば，ResultSetにデータが読み込まれています。

又は，DBResultSetオブジェクトのGetRowCountメソッドでレコード数を調べられます。

（例１）IsEOFを使った場合

pResultSet = pStatement->GetResultSet();        // レコードの検索
if (pResultSet->IsEOF())                        // 検索結果の確認

（例２） GetRowCountを使った場合

pResultSet = pStatement->GetResultSet();        // レコードの検索
RCount=pResultSet->GetRowCount();               // 検索結果の確認

2.6.2　検索レコードの参照

ここでは，ResultSetに読込まれたレコードを参照する方法について説明します。

＜この項の構成＞

(1)　カーソルの移動

(2)　フィールド値の参照・データ変換

(3)　更新のための参照をする場合

(1)　カーソルの移動

ResultSetに複数の検索結果を得た場合，一つ一つのレコードを特定するために，カーソルを使用します。

ResultSetの中でカーソルを移動させるには，次のメソッドを呼び出します。

カーソルを次のレコードへ移動（Nextメソッド）

カーソルを前のレコードへ移動（Perviousメソッド）

カーソルをn番目のレコードへ移動（Absoluteメソッド）

カーソルを現在のレコードからn個先のレコードへ移動（Relativeメソッド）

カーソルを最後のレコードへ移動（Bottomメソッド）

カーソルを先頭のレコードへ移動（Topメソッド）

なお，１度にResultSetへ格納できるレコード数はSetMaxRowsメソッドで指定でき，これより多くのレコードを検索した場合は，複数回に分けてレコードを取得することになります。SetMaxRowsメソッドの値を超えたレコード数を参照するには，次に示すPageNextメソッドを利用します。

カーソルを次のResultSetの先頭レコードへ移動（PageNextメソッド）

この他に，現在のレコード位置を知るためのメソッドがあります。

先頭レコードから数えた現在のレコード位置：GetCurrentメソッド

現在読み込んでいるResultSetの先頭レコードから数えた現在のレコード位置：GetCurrentOfResultSetメソッド

カーソルが，ResultSetのレコードの範囲を越えて指定された場合には，エラーがスローされます。アプリケーションでは，カーソルを移動する前後でIsEOFメソッドの戻り値を確認することで，ResultSetの範囲を確認できます。

(2)　フィールド値の参照・データ変換

ResultSetのレコードのフィールド値は，DBResultSetクラスのGetFieldメソッドを使って参照します。データベースのデータ型とGetFieldメソッドの引数に指定したデータ型とが異なる場合は，引数のデータ型に合わせて変換されます。

文字列から数値データ型への変換に失敗した場合には，０が返されます。指定したフィールドがなかった場合や値が変換できない場合は，エラーをスローします。データ型の変換規則については，「7. データ型」を参照してください。

SetResultSetTypeメソッドで，TYPE_BLOB_FILEを指定した場合は，BLOB型のフィールドに対するGetFieldメソッドの引数にファイル名称が戻されます。この場合，GetFieldメソッドの引数の型には，文字列と同様に，LPTSTRを指定してください。

//////////////////////////////////////////////////////////////
// 値の参照の例
LPTSTR          pField;
INT32           nField;
      //データベースのデータの検索処理
                  :
                  :
      // 検索結果をResultSetに取得
      // レコードの読み込み
  while(!pResultSet->IsEOF())
  {
      // フィールドのデータの文字列変換と「ポインタ」の受け取り
          pResultSet->GetField(1, &nField);
          cout << "  Data=" << nField;
          pResultSet->GetField(2, &pField);
          cout << "  Data=" << pField;
      cout << endl;
      // 次のレコードの読み込み
      pResultSet->Next();
  }

(3)　更新のための参照をする場合

レコードの更新を目的として，データベースのレコードを参照するときには，SetResultSetTypeメソッドでResultSetの排他タイプをTYPE_EXCLUSIVEとします。これにより，GetResultSetで得るResultSetが更新可能になります。

更新可能なResultSetには，一度に一つのレコードしか読み込めません。次のレコードを読み込むには，Nextメソッドを使います。

なお，更新可能なDBResultSetオブジェクトを生成している場合は，検索時にSELECT文でFOR UPDATEオプションを指定する必要はありません。

2.6.3　レコードの更新

データを更新するには，前節で説明したResultSetを利用する方法と，SQLのUPDATE文を利用する方法とがあります。

＜この項の構成＞

(1)　ResultSetを利用した更新

(2)　UPDATE文を利用した更新

(3)　更新可能なResultSetの取得時の注意

(1)　ResultSetを利用した更新

ResultSetに検索されたレコードを更新するためには，カーソルをレコードに位置付け，Editメソッドで更新準備を指示します。この後，SetFieldメソッドでフィールドの内容を変更し，最後にUpdateメソッドで更新を指示します。複数のレコードを更新する場合には，この処理を繰り返す必要があります。

GetFieldメソッドの引数に指定したデータ型とデータベースのデータ型とが異なる場合は，データベースのデータ型に合わせて変換されます。データ型の変換規則は「7. データ型」を参照してください。

//////////////////////////////////////////////////////////////
/// SQLの実行（更新）

DBStatement*                pStatement;
DBResultSet*                pResultSet;

     // DBStatementクラスの生成
pStatement = pConnect->CreateStatement();
     // 更新可能なDBResultSetクラスを生成するために
     // DBResultSetクラスのタイプを指定
pStatement->SetResultSetType(TYPE_EXCLUSIVE);
     // SELECT文の設定
pStatement->Execute("SELECT F1, F2 FROM TABLE1");
     // レコードの検索
   pResultSet = pStatement->GetResultSet();
     // レコードの読み込み
   while(!pResultSet->IsEOF())
  {
     // フィールド"F2"のデータを更新
     // ここでは，uFunc()というユーザ関数を使用
     // LPCTSTR uFunc(void);
     // 更新のためのEdit-SetField-Updateメソッド呼び出し
  pResultSet->Edit();
  pResultSet->SetField("F2", uFunc());
  pResultSet->Update();
     // Nextメソッドで次のレコードの読み込み
  pResultSet->Next();
  }
// その他の処理
.....

BLOB型データの渡し方

SetResultSetTypeメソッドで，TYPE_BLOB_FILEを指定した場合は，BLOB型のフィールドに対するGetFieldメソッドの引数にファイル名称が戻されます。この場合，GetFieldメソッドの引数の型には，文字列と同様に，LPTSTRを指定してください。

XDM/RDをご使用の場合の注意

XDM/RDをご使用の場合，LONG VARCHAR型， LONG NVARCHAR型，及びLONG MVARCHAR型のフィールドのデータの更新はできません。SetFieldメソッドで値を設定しても，Updateメソッドの実行時にエラーになります。

(2)　UPDATE文を利用した更新

SQL文のUPDATE文を使って，データを更新できます。これは，既に更新するデータや内容が特定できる場合に，SQL文で直接，更新個所及び値を指定する方法です。この方法では，現在のデータを確認してから更新することはできません。

次に，DBStatementクラス及びDBConnectionクラスを使用して，?パラメタを使用しない更新をする場合と， DBPreparedStatementクラスを使用して，?パラメタを使用した更新をする場合の三通りについて説明します。

(a)　DBStatementクラスを使用した場合

DBConnectionクラスのCreateStatementメソッドでDBStatementオブジェクトを生成します。次にDBStatementクラスのExecuteメソッドにSQL文を指定してメソッドを呼び出し，データを更新します。

//////////////////////////////////////////////////////////////
/// SQLの実行(更新) - DBStatementクラスでUPDATE文を指定

  // DBStatementオブジェクトの生成
pStatement = pConnect->CreateStatement();
  // SQL文の実行
pStatement->Execute("UPDATE TABLE1 SET F1=100 WHERE F2=300");

(b)　DBConnectionクラスを使用した場合

DBConnectionクラスのExecuteDirectメソッドでSQL文を実行してデータを追加します。

この方法は手順が簡単ですが，データをいったん検索してから更新したい場合は，DBStatementクラスを使用してください。DBConnectionクラスでは検索結果を受け取ることができないため，検索ができません。

//////////////////////////////////////////////////////////////
/// SQLの実行(更新) - DBConnectionクラスでUPDATE文を指定

  // SQL文の実行
pConnect->ExecuteDirect("UPDATE TABLE1 SET F1=100
                                             WHERE F2=300");

(c)　DBPreparedStatementクラスを使用した場合

?パラメタを記述したUPDATE文を指定してDBConnectionクラスのCreatePreparedStatementメソッドを呼び出し，DBPreparedStatementオブジェクトを生成します。次に，ExecuteメソッドでSQL文をデータベースへ通知（解析）し，SetParamメソッドで?パラメタのデータを設定します。そして，ExecuteUpdateメソッドで更新を実行します。

//////////////////////////////////////////////////////////////
/// SQLの実行(更新)
///- DBPreparedStatementクラスで?パラメタのあるUPDATE文を指定

  // DBPreparedStatementオブジェクトの生成
pStatement = pConnect->CreatePreparedStatement(
                        "UPDATE TABLE1 SET F1=? WHERE F2=?");
  // SQL文の解析
pStatement -> Execute();
  // ?パラメタへの値の設定
pStatement->SetParam(1,100);
pStatement->SetParam(2,300);
  // 更新の実行
pStatement->ExecuteUpdate();

(3)　更新可能なResultSetの取得時の注意

SetResultSetTypeメソッドで引数にTYPE_EXCLUSIVEを指定した場合，GetResultSetメソッドで更新できるResultSetが取得できます。ただし，次の場合には，SetResultSetTypeメソッドの引数にTYPE_EXCLUSIVEを指定するとExecuteメソッド実行時にエラーをスローします。

集合関数(avg, countなど)や組み込み関数を使用する場合

DISTINCTを使用する場合

GROUP BY句やUNION句を使用する場合

演算子を含む場合(UNION, INTERSECT, MINUS)

JOINを含む場合

上記に該当するVIEWを利用する場合

また，XDM/RDを使用している場合，検索結果にlong列(long mvarchar型，long nvarchar型, long varchar型)を含んでいると，そのフィールドに対しては，Updateメソッドを実行できません。

2.6.4　レコードの削除

データを削除するには，ResultSetを利用する方法と，SQLのDELETE文を利用する方法とがあります。

＜この項の構成＞

(1)　ResultSetを利用した削除

(2)　DELETE文を利用した削除

(1)　ResultSetを利用した削除

ResultSetに検索されたレコードを削除するためには，カーソルをレコードに位置づけ，Editメソッドで削除準備を指示し，Deleteメソッドで削除を指示します。複数のレコードを削除する場合には，この処理を繰り返す必要があります。

//////////////////////////////////////////////////////////////
/// SQLの実行(削除)

DBStatement*                pStatement;
DBResultSet*                pResultSet;

     // SQL文実行のため，DBStatementクラスの生成
  pStatement = pConnect->CreateStatement();
     // 更新可能なDBResultSetオブジェクトを生成するため，
     // DBStatementオブジェクトでTYPE_EXCLUSIVEを設定
     // このオプションはデフォルト値なので省略可
  pStatement->SetResultSetType(TYPE_EXCLUSIVE);
     // SELECT文を指定し，SQL文の解析
     // ここでは，SELECT文に"FOR UPDATE"不要
     // このオプションは自動的に付加される。
  pStatement->Execute("SELECT F1，F2 FROM TABLE1");
     // DBResultSetを生成し，検索結果を取得
     // 削除できるレコードは１レコードだけ
  pResultSet = pStatement->GetResultSet();
  while(!pResultSet->IsEOF())          // すべてのレコードの読み込み
  {
     // 削除のためのDeleteメソッドの呼び出し
     pResultSet->Delete();
     pResultSet->Next();
                        // Nextメソッドにより次のレコードの読み込み
  }
     // その他の処理
.....

(2)　DELETE文を利用した削除

SQL文のDELETE文を使って，データを削除できます。次に，DBStatementクラス及びDBConnectionクラスを使用して，?パラメタを使用しない更新をする場合と，DBPreparedStatementクラスを使用して，?パラメタを使用した更新をする場合の三通りについて説明します。

(a)　DBStatementクラスを使用した場合

DBConnectionクラスのCreateStatementメソッドでDBStatementオブジェクトを生成します。生成されたDBStatementクラスのExecuteメソッドでSQL文を実行してデータを削除します。

//////////////////////////////////////////////////////////////
/// SQLの実行(削除) - DBStatementクラスでDELETE文を指定

  // DBStatementオブジェクトの生成
pStatement = pConnect->CreateStatement();
  // SQL文の実行
pStatement->Execute("DELETE FROM TABLE1 WHERE F1=100");

(b)　DBConnectionクラスを使用した場合

DBConnectionクラスのExecuteDirectメソッドでSQL文を実行してデータを削除します。

この方法は手順が簡単ですが，データをいったん検索してから削除したい場合は，DBStatementクラスを使用してください。DBConnectionクラスでは検索結果を受け取ることができないため，検索ができません。

//////////////////////////////////////////////////////////////
/// SQLの実行(削除) - DBConnectionクラスでDELETE文を指定

  // SQL文の実行
pConnect->ExecuteDirect("DELETE FROM TABLE1 WHERE F1=100");

(c)　DBPreparedStatementクラスを使用した場合

?パラメタを記述したDELETE文を指定して,DBConnectionクラスのCreatePreparedStatementメソッドを呼び出し，DBPreparedStatementオブジェクトを生成します。次に，ExecuteメソッドでSQL文をデータベースに通知（解析）し，SetParamメソッドで?パラメタのデータを設定します。そして，ExecuteUpdateメソッドで削除を実行します。

////////////////////////////////////////////////////////////
/// SQLの実行(削除)
/// - DBPreparedStatementクラスで?パラメタのあるDELETE文を指定

  // DBPreparedStatementオブジェクトの生成
pStatement = pConnect->CreatePreparedStatement(
                                "DELETE FROM TABLE1 WHERE F1 < ? AND F2 < ?");
  // SQL文の解析
pStatement->Execute();
  // ?パラメタへの値の設定
pStatement->SetParam(1,100);
pStatement->SetParam(2,300);
  // 削除の実行
pStatement->ExecuteUpdate();

2.6.5　レコードの追加

データを追加するには，SQLのINSERT文を利用します。

次に，DBStatementクラス及びDBConnectionクラスを使用して，?パラメタを使用しない更新をする場合と， DBPreparedStatementクラスを使用して，?パラメタを使用した更新をする場合の三通りについて説明します。

＜この項の構成＞

(1)　DBStatementクラスを使用した場合

(2)　DBConnectionクラスを使用した場合

(3)　DBPreparedStatementクラスを使用した場合

(1)　DBStatementクラスを使用した場合

DBConnectionクラスのCreateStatementメソッドでDBStatementオブジェクトを生成します。生成されたDBStatementクラスのExecuteメソッドでSQL文を実行してデータを追加します。

//////////////////////////////////////////////////////////////
/// SQLの実行(追加) - DBStatementクラスでINSERT文を指定

  // DBStatementオブジェクトの生成
pStatement = pConnect->CreateStatement();
  // SQL文の実行
pStatement->Execute("INSERT INTO TABLE1(F1,F2)VALUES(1,100)");

(2)　DBConnectionクラスを使用した場合

DBConnectionクラスのExecuteDirectメソッドでSQL文を実行してデータを追加します。

この方法は手順が簡単ですが，データをいったん検索してから追加したい場合は，DBStatementクラスを使用してください。DBConnectionクラスでは検索結果を受け取ることができないため，検索ができません。

//////////////////////////////////////////////////////////////
/// SQLの実行(追加) - DBConnectionクラスでINSERT文を指定

  // SQL文の実行
pConnect->ExecuteDirect("INSERT INTO TABLE1(F1,F2)
                                             VALUES(1,100)");

(3)　DBPreparedStatementクラスを使用した場合

?パラメタを指定したINSERT文を指定し,DBConnectionクラスのCreatePreparedStatementメソッドを呼び出し，DBPreparedStatementオブジェクトを生成します。次に， ExecuteメソッドでSQL文をデータベースに通知（解析）し，SetParamメソッドで?パラメタのデータを設定します。そして，ExecuteUpdateメソッドで追加を実行します。

なお，レコードはSetInsertRowsメソッドで設定する数（一度に追加するレコード数）に従って，追加されます。一度に複数レコードを追加する場合，SetParamメソッドの引数には，レコード番号とフィールド番号及びデータ値の，計3個を指定する必要があります。

//////////////////////////////////////////////////////////////
/// SQLの実行(追加)
/// - DBPreparedStatementクラスで?パラメタのあるINSERT文を指定

  // DBPreparedStatementオブジェクトの生成
pStatement = pConnect->CreatePreparedStatement
("INSERT INTO TABLE1(F1,F2)VALUES(?,?)");
  // SQL文の解析
pStatement->Execute();
  // ?パラメタへの値の設定
pStatement->SetParam(1,1);
pStatement->SetParam(2,100);
  // 追加の実行
pStatement->ExecuteUpdate();

2.6.6　ストアドプロシジャの利用

ストアドプロシジャを利用するには，データベースの接続時に生成したDBConnectionオブジェクトのCreateCallableStatementメソッドを呼び出し，DBCallableStatementオブジェクトを生成します。次に，SetProcedureメソッドで実行するストアドプロシジャ名を指定し，引数をSetParamメソッドで設定し，Executeメソッドで実行します。

戻り値のあるストアドプロシジャの実行結果は， GetParamメソッドの引数で受け取る方法と，ResultSetで受け取る方法があります。また，これらを併用することもできます。

ストアドプロシジャは，サーバ系の下記DBMSで利用可能でであり，ストアドプロシジャを利用するには，DBCallableStatementクラスを使います。

HiRDB

ORACLE

Sybase SQL Anywhere，Adaptive Server Anywhere

SQL Server

＜この項の構成＞

(1)　ストアドプロシジャの実行

(2)　ストアドプロシジャの戻り値の受け取り(引数)

(3)　ストアドプロシジャの戻り値の受け取り(ResultSet)

(1)　ストアドプロシジャの実行

ストアドプロシジャを利用するには，データベースの接続時に生成したDBConnectionオブジェクトのCreateCallableStatementメソッドを呼び出し，DBCallableStatementオブジェクトを生成します。次に，SetProcedureメソッドで実行するストアドプロシジャ名を指定し，引数をSetParamメソッドで設定し，Executeメソッドで実行します。

DBConnection*         pConnect;
 DBCallableStatement*  pCall;
 {
   // DBCallableStatementオブジェクトの生成
   pCall = pConnect->CreateCallableStatement("sample1");
   pCall->SetProcedure("Proc100");               // プロシジャ名設定
   pCall->Execute();                             // プロシジャ実行
 }

(a)　引数を持つストアドプロシジャの実行

ストアドプロシジャが引数を持つ場合，SetProcedureメソッドでは，プロシジャ名に続けて"?"を引数分指定します。?パラメタに設定する値は，DBCallableStatementオブジェクトのSetParamメソッドで指定します。SetParamメソッドでは，?パラメタの位置と設定するデータを指定します。

SetParamメソッドで指定する?パラメタの位置は，IN，INOUTパラメタの位置です。OUTは含みません。

 DBConnection*         pConnect;
 DBCallableStatement* pCall;
{
   // DBCallableStatementオブジェクト生成
   pCall = pConnect->CreateCallableStatement("sample1");
   pCall->SetProcedure("Proc_100(?，?)");
                                       // ストアドプロシジャ名設定
   pCall->SetParam(1， pszCity) ;      // パラメタ値の設定
   pCall->Execute();                   // ストアドプロシジャ実行
}

(b)　同期・非同期処理

ストアドプロシジャも通常のデータベースアクセスと同様，DBConnectionオブジェクトの設定により同期・非同期処理が行われます。

 DBConnection*         pConnect;
 DBCallableStatement* pCall;
 {
   // DBCallableStatementオブジェクトの生成
   pCall = pConnect->CreateCallableStatement("sample1");
   pCall->SetProcedure("Proc_100");         // プロシジャ名設定
   pCall->Execute();                        // プロシジャ実行
   pCall->WaitForDataSource(DBR_INFINITE);
                                      // プロシジャ実行完了待ち
}

また，ストアドプロシジャの実行完了確認には，DBCallableStatementオブジェクトのIsCompletedメソッドも使えます。

   if (!pCall->IsCompleted())             // プロシジャ実行の完了確認
   pResultSet = pCall ->GetResultSet();   // 検索結果の受け取り

(2)　ストアドプロシジャの戻り値の受け取り(引数)

この項では，戻り値のあるストアドプロシジャの実行結果を，引数で受け取る方法について説明します。

実行結果は DBCallableStatementオブジェクトのGetParamメソッドの引数で受け取ります。データはGetparamメソッドの引数で指定したデータ型で取得します。

void class1::func1(char* pszCity,INT32 dwCount)
{
 DBConnection*           pConnect;
 DBCallableStatement*   pCall;

           // DBCallableStatementオブジェクトの生成
   pCall = pConnect->CreateCallableStatement("sample1");
   pCall->SetProcedure("Proc_100(?，?)");
                                     // ストアドプロシジャ名設定
   pCall->SetParam(1， pszCity) ;    // パラメタ値の設定
   pCall->Execute();                 // ストアドプロシジャ実行
   pCall->WaitForDataSource(DBR_INFINITE);
                                     // プロシジャ実行完了待ち
   pCall->GetParam(1， &dwCount);    // 戻り値の受け取り
}

なお，INパラメタとOUTパラメタの位置はどちらも１になります。

(3)　ストアドプロシジャの戻り値の受け取り(ResultSet)

下記DBMSの場合だけ，ストアドプロシジャでのSELECT文の実行結果が複数のレコードでもアプリケーションで受け取ることができます。

SQL Anywhere

Adaptive Server Anywhere

この場合，ストアドプロシジャではRESULT句で戻り値の型を定義し，アプリケーションでは，DBResultSetクラスのResultSetとして受取り，GetFieldメソッドで参照します。

(a)　ストアドプロシジャの形式

ストアドプロシジャでは，SELECT文の結果を呼び出し元に渡すために，RESULT句で戻り値の型を定義します。

CREATE PROCEDURE sample ()
RESULT ("Value" INT,"Shop" CHAR(30))
BEGIN
 SELECT  CAST( sum( sales_order_items.quantity *
               product.unit_price)
               AS INTEGER ) AS value
               shop_name,
 FROM customer
          INNER JOIN sales_order
          INNER JOIN sales_order_items
          INNER JOIN product
 GROUP BY shop_name
 ORDER BY value desc;
END

この例では，value及びshop_nameの検索結果をResultSetとして扱うために，RESULT句でValue及びShopフィールドとそのデータ型を新しく定義しています。

また，SELECT文中に演算処理がある場合は，その結果を考慮してストアドプロシジャの作成時に，結果に合ったデータ型をRESULT句で用意しておきます。

なお，RESULT句に指定するデータ型は，元テーブルと同じデータ型，又は自動的に変換できるデータ型だけが指定できます。自動変換できるデータ型については,使用するDBMSのドキュメントを参照してください。

(b)　ResultSetの参照

ストアドプロシジャの検索結果をResultSetで受け取る場合，DBCallableStatementオブジェクトからGetResultSetメソッドを呼び出して，DBResultSetオブジェクトを生成し，検索結果をResultSetに得ます。ResultSetに読込まれたレコードを参照する方法については，「2.5.2検索レコードの参照」と同様です。

データの型

ストアドプロシジャ内のRESULT句で定義したデータ型とGetFieldメソッドの引数に指定したデータ型とが異なる場合は，引数のデータ型に合わせて変換されます。データ変換については，「7.1 クラスライブラリで扱うデータ型と変換規則」を，変換時の注意事項については「2.5.2 検索レコードの参照」を参照してください。

データ変換

ストアドプロシジャ内のSELECT文の場合も単純なSELECT文の場合も，検索結果をDBResultSetクラスのGetFieldメソッドで参照します。異なる点は，単純なSELECT文の場合データベースでのフィールドの型をGetFieldメソッドの引数に指定したデータ型に変換して参照しますが，ストアドプロシジャの場合RESULT句で定義したフィールドの型をGetFieldメソッドの引数に指定したデータ型に変換して参照します。

その他

ストアドプロシジャを利用した検索でのレコードのロック方法は，SetResultSetTypeメソッドの引数で設定します。

また，検索結果が複数レコードの場合，n件ずつ分割して取得することもできます。このとき一度に取得するレコードの最大数は，SetMaxRowsメソッドで指定します。

(c)　複数ResultSetの参照

ストアドプロシジャ中に，SELECT文が複数記述されているストアドプロシジャでは，SELECT文ごとにResultSetを扱います。

次に，複数のSELECT文を記述したストアドプロシジャの例を示します。

CREATE PROCEDURE ListPeople()
RESULT ( lname CHAR(36), fname CHAR(36) )
BEGIN
       SELECT emp_lname, emp_fname FROM employee;
       SELECT lname, fname FROM customer;
       SELECT last_name, first_name FROM contact;
END

SELECT文ごとにResultSetを返すストアドプロシジャも，RESULT句を指定します。ただし，複数のSELECT文があっても，プロシジャ中にRESULT句は一つだけしか指定できません。このため，指定するSELECT文には次のような制限があります。

SELECT文に指定するフィールド数と，RESULT句で指定するフィールド数は同じにする。

SELECT文に指定するフィールドの型は，RESULT句で指定する型と同じ,又は自動的に変換できるものにする。

アプリケーションでは，これらの制限によって，RESULT句だけを意識すればよくなります。つまり，GetFieldメソッドを使ってアプリケーションから参照する時は，RESULT句で定義したフィールドのデータ型だけを意識します。

プロシジャ内の次のSELECT文に対するResultSetを取得する概念図を図2-4に示します。

図2-4　プロシジャ内の次のSELECT文に対するResultSetを取得する概念図

検索結果の有無確認

複数のSELECT文がある場合，ひとつのResultSetの参照が終わっても，次のResultSetの処理が必要となります。このような場合，IsEOFメソッドとIsCompletedメソッドを利用して判断します。

下記例は，ResultSetの有無をIsCompletedメソッドで確認し，ResultSet中のレコードの確認をIsEOFメソッドで確認しています。

   pCall->Execute();                  // ストアドプロシジャ実行
   if (!pCall->IsCompleted())         // プロシジャ実行の完了確認
   {
       pResultSet = pCall ->GetResultSet(); // 検索結果の受け取り
       while(!pResultSet->IsEOF())
       {
           pResultSet->GetField(1, &nField);      // データの取得
           cout << "  Data=" << nField;
           pResultSet->GetField(2, &pField);
           cout << "  Data=" << pField;
           cout << endl;
           pResultSet->Next();          // 次のレコードの読み込み
       }
       pCall->Resume();                 // 処理の継続
   ｝

GetResultSetメソッドを実行すると，前に作成したDBResultSetオブジェクトは削除されることに注意してください。

カーソルの移動

複数のSELECT文がある場合，ひとつのResultSetに対する処理が終了した後で，Resumeメソッドを使って，カーソルを以降のResultSetの先頭に位置付ける必要があります。

2.7　繰り返し列へのアクセス

この節では，繰り返し列へのアクセス方法について説明します。繰り返し列へのアクセスは，簡易版クラスと詳細版クラスで共通です。

この節で使用している例は，HiRDBを使用した場合のものです。

検索条件としての要素の利用
繰り返し列の要素を，レコードを検索したり，削除したりするときの検索条件として利用できます。

ResultSetに検索した要素の参照
ResultSetに読み込んだ繰り返し列の要素を，DBRArrayDataオブジェクトに取込み，GetDataメソッドで参照する方法について説明します。

ResultSetを利用した要素の更新
要素を更新する手段としてResultSetに読み込んだ繰り返し列の要素を更新する方法と新たに要素を設定する（一括更新）について説明します。

パラメタを利用した要素の一括更新
SQL文の繰り返し列を?パラメタとし，繰り返し列の要素を設定する方法について説明します。

SQL文を利用した要素の更新
SQL文で直接要素を更新する方法について説明します。

＜この節の構成＞

2.7.1　検索条件としての要素の利用

2.7.2　繰り返し列の参照

2.7.3　ResultSetを利用した要素の更新

2.7.4　パラメタを利用した要素の一括更新

2.7.5　SQL文を利用した要素の更新

2.7.1　検索条件としての要素の利用

次に示すSQLのARRAY句を利用すれば，レコードを検索したり更新するときの検索条件に繰り返し列の要素が指定できます。検索条件の要素に?パラメタを利用することもできます。

ARRAY(繰り返し列名〔，繰り返し列名〕)…[ANY](検索条件)

検索条件とする場合，ARRAY句を用い繰り返し列であることを宣言します。

＜この項の構成＞

(1)　繰り返し列の要素を使った条件設定

(2)　繰り返し列の要素に?パラメタを使った条件設定

(1)　繰り返し列の要素を使った条件設定

検索条件として繰り返し列を利用する場合も，基本的な設定方法は通常のレコードを扱う場合と同じです。通常のレコードでの条件設定と異なるのは，SQL文の条件として繰り返し列を設定するときにARRAY句で指定する点です。基本的には，SQL文のWHERE句に要素の値を条件として設定し，レコードを特定します。

(例)繰り返し列F1の値として1を持ち，F2に100以上の値を持つレコードを検索する。

//////////////////////////////////////////////////////////////
/// SQLの実行(検索) - DBStatementクラスでSELECT文を指定

pStatement = pConnect->CreateStatement();
pStatement->SetResultSetType(TYPE_NONE);    // 排他オプションの設定
pStatement->Execute(                        // SELECT文の設定
         "SELECT * FROM TABLE1 WHERE ARRAY(F1,F2) [ANY]
                                                   (F1=1 AND F2>=100)");

(2)　繰り返し列の要素に?パラメタを使った条件設定

繰り返し列の要素に?パラメタを指定した場合，?パラメタの値はSetParamメソッドで設定します。

(例) 繰り返し列F1に１から100の値を持つレコードを削除する。

//////////////////////////////////////////////////////////////
/// SQLの実行(削除)
/// - DBPreparedStatementクラスで?パラメタのあるDELETE文を指定

  // DBPreparedStatementオブジェクトの生成
pStatement = pConnect->CreatePreparedStatement(
             "DELETE FROM TABLE1 WHERE ARRAY (F1)[ANY]
                                       (F1 > ? AND F1 < ? )");

pStatement->Execute();               // SQL文の解析
pStatement->SetParam(1,1);           // 1番目の?パラメタへ値を設定
pStatement->SetParam(2,100);         // 2番目の?パラメタへ値を設定
pStatement->ExecuteUpdate();         // 実行

2.7.2　繰り返し列の参照

ここでは， ResultSetに取得した繰り返し列の要素を参照する方法について説明します。

ResultSetに取得した繰り返し列の要素をアプリケーションから直接アクセスできません。そのため，GetFieldメソッドの引数にDBRArrayDataConstPtrオブジェクトへのポインタを指定しDBArrayDataオブジェクトにResultSetの要素を取込みます。

要素の値は，DBArrayDataオブジェクトのGetDataメソッドで参照します。すべての要素を参照するには，GetDataメソッドを要素数分繰り返し指定する必要があります。要素数は，DBRArrayDataオブジェクトのGetArrayCountメソッドで調べられます。

また，要素の値は，GetDataメソッドの引数で指定したデータ型に変換できます。

////////////////////////////////////////////////////////////////////////
// ResultSetを利用した要素の参照例
INT32 i32Loop;
LPTSTR lptData;
//データベースのデータの検索処理
                  :
// 検索結果をResultSetに取得
// 参照時はConst付きポインタを使用
DBRArrayDataConstPtr cpArray;                // DBRArrayDataConstPtrの宣言
pResultSet->GetField(1,&cpArray);            // データの取得

// 要素数分ループして参照
for(i32Loop = 1;i32Loop < cpArray->GetArrayCount()+1;i32Loop++)
{
if(cpArray->GetData(i32Loop, &lptData))
 cout << "ArrayData(" << i32Loop << ")=" << lptData << endl;
else
 cout << "ArrayData(" << i32Loop << ")=欠損値" << endl;
}
cout << endl;

2.7.3　ResultSetを利用した要素の更新

ResultSetを利用した繰り返し列の要素を更新する方法について説明します。

繰り返し列の要素の更新
ResultSetに読み込んだ繰り返し列のデータを更新する方法です。

繰り返し列の要素の一括更新
ResultSetから繰り返し列のデータを読み込まずに，繰り返し列のデータを設定する方法です。

＜この項の構成＞

(1)　繰り返し列の要素の更新

(2)　繰り返し列の要素の一括更新

(1)　繰り返し列の要素の更新

簡易版クラスを使用している場合，DBRDatabaseオブジェクトのGetArrayDataFactoryメソッドでDBRDatabaseオブジェクトごとにDBRArrayDataFactoryオブジェクトを生成します。詳細版クラスを使用している場合は，DBConnectionオブジェクトのGetArrayDataFactoryメソッドでDBConnectionオブジェクトごとに生成します。

レコードをResultSetに探索し，要素をGetFieldメソッドで参照用DBRArrayDataオブジェクトに取込みます。

参照用のDBRArrayDataオブジェクトからCreateArrayDataメソッドで更新用DBRArrayDataオブジェクトを生成します。

DBRArrayDataオブジェクトの要素をSetDataメソッドで更新します。要素にNULLを設定する場合は，SetNullメソッドを呼び出します。要素にNULLを設定しても，その要素はUPDATE文のDELETE句で要素を削除した場合のように削除されません。

繰り返し列は，SetFieldメソッドでResultSetに反映します。

（例）社員表テーブルの資格フィールドを検索して，要素の値がDatabaseであればDSPに変更する例です。

/////////////////////////////////////////////////////////////
/// SQLの実行(要素の更新)- 検索したレコードを更新
DBRDatabase *pDB1;
DBRResultSet *pResultSet;
DBRArrayDataFactory *pFactory = NULL;
DBRArrayDataPtr pArray2;
DBRArrayDataConstPtr pArray1;
int   nArray;
LPTSTR youso;
   :
   :
// DBRArrayDataFactoryオブジェクトの生成
 pFactory = pDB1->GetArrayDataFactory();  
 pResultSet = new DBRResultSet(pDB1);
                                     // ResultSetオブジェクトの生成
// レコードの検索
 pResultSet-> Execute("SELECT 資格 from 社員表",TYPE_EXCLUSIVE);
 pResultSet->Open();                      // ResultSetへの読込み
 if(pResultSet->GetArraySize(1) > 0)      // 繰り返し列かどうかの判定
 {
   while(!pResultSet->IsEOF())            // 検索結果の終わりの判定
   {
// 繰り返し列の要素を参照用DBRArrayDataオブジェクトに読み出す
     pResultSet->GetField(1,&pArray1);
// 参照用のDBRArrayDataオブジェクトをコピーして
// 更新用のDBRArrayDataオブジェクトを生成
     pArray2=pFactory->CreateArrayData(pArray1);
// 繰り返し列の要素数分処理
     for (nArray=1;nArray<=pArray1->GetArrayCount();nArray++)
     {
// 要素を読み出し，Nullかどうかを判定
       if(pArray1->GetData(nArray,&youso))
        {                                      // Nullでない場合の処理
         if(strcomp(youso,"Database")==0)      // 要素の値を確認
           pArray2->SetData(nArray,"DSP");     // 要素の値をDSPに更新
        }
     }    
     pResultSet->Edit();                       // レコードの更新準備
// 更新用DBRArrayオブジェクトの繰り返し列をResultSetに反映する
     pResultSet->SetField(1,pArray2);        
     pResultSet->Update();                     // データベースを更新
// Updateメソッド終了後更新用のDBRArrayDataオブジェクトを削除
     delete pArray2;
     pResultSet->Next();                     // カレントレコードを更新
   }
 }
 else                                        // 繰り返し列でなければ
  cout << "Not Array Field";                 // Not Array Fieldを表示
 pDB1->Commit();                      // データベースの更新をコミット
 :

(2)　繰り返し列の要素の一括更新

次の順序で繰り返し列に設定する要素の値を準備します。

DBRArrayDataFactoryオブジェクトのCreatArrayDataメソッドに繰り返し列の型を指定しDBRArrayDataオブジェクトを生成します。次にDBRArrayDataオブジェクトのCreateメソッドで要素数分の領域を確保します。 DBRArrayDataオブジェクトにはSetDataメソッドで要素の値を設定します。 DBRArrayDataオブジェクトの値はSetFieldメソッドでResultSetに反映します。

(例) 社員表テーブルの資格フィールドに要素1syu,Database,Networkを新規に追加する例

//////////////////////////////////////////////////////////////
DBRDatabase *pDB1;
DBRResultSet *pResultSet;
DBRArrayDataFactory *pFactory = NULL;
DBRArrayDataPtr pArray1;
   :
   :
// DBRArrayDataFactoryオブジェクトの生成
 pFactory = pDB1->GetArrayDataFactory();  
// DBRArrayDataオブジェクトの生成
 pArray1 = pFactory->CreateArrayData(COL_TYPE_CHAR,10);
 pArray1->Create(3);               // 3要素分の領域を確保
 pArray1->SetData(1,"1syu");       // 1番目の要素に1syuを設定
 pArray1->SetData(2,"Database");   // 2番目の要素にDatabaseを設定
 pArray1->SetData(3,"Network");    // 3番目の要素にNetworkを設定
      :
 pResultSet = new DBRResultSet(pDB1);
                                   // ResultSetオブジェクトの生成
// 氏名IDがZ004のレコードを検索
 pResultSet-> Execute("SELECT 資格 from 社員表
                              where 氏名ID='Z004'",TYPE_EXCLUSIVE);
 pResultSet->Open();               // レコードをResultSetに読込む
 pResultSet->Edit();               // レコードの更新準備
// DBRArrayオブジェクトの繰り返し列をResultSetに反映
 pResultSet->SetField(1,pArray1);
 pResultSet->Update();             // データベースを更新
 pDB1->Commit();                   // データベースの更新をコミット
 :

2.7.4　パラメタを利用した要素の一括更新

SQLのUPDATE文又はINSERT文に?パラメタを利用して要素を設定する方法です。更新の単位は，要素全体になります。この方法は，詳細版だけで利用できます。

SQL文は，DBPreparedStatementクラスを使います。繰り返し列を含まないレコードの更新と異なるのは， DBRArrayDataクラスを利用して要素の値を設定する点です。

DBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドに繰り返し列の型を指定しDBRArrayDataオブジェクトを生成します。

要素数分の領域をDBRArrayDataオブジェクトのCreateメソッドに繰り返し列の型を指定して確保し，SetDataメソッドで要素の値を設定します。

SetParamメソッドで?パラメタに繰り返し列のデータを設定します。

ExecuteUpdateメソッドでSQL文を実行します。

なお，繰り返し列全体を?パラメタとした場合，「2要素目だけ」という更新はできません。必ず全体を更新することになります。2要素目だけというような更新をする場合は，UPDATE文でARRAY句を利用してください。

(例)UPDATE文の繰り返し列に?パラメタを使用し更新する。

//////////////////////////////////////////////////////////////
/// SQLの実行(レコードの更新)-
/// DBPreparedStatementクラスで?パラメタのあるUPDATE文を指定

  // DBPreparedStatementオブジェクトの生成
pStatement = pConnect->CreatePreparedStatement(
                   "UPDATE TABLE1 SET F1=? WHERE ID='CPP'");
  // SQL文の解析
pStatement -> Execute();
  // Factoryオブジェクトの生成
DBRArrayDataFactory * pFactory = pConnect->
                                      GetArrayDataFactory();

DBRArrayDataPtr pArray =pFactory->
                          CreateArrayData(COL_TYPE_CHAR,10);
pArray->Create(2);
pArray->SetData(1,"NET");
pArray->SetData(2,"DB");
pStatement->SetParam(1,pArray);
pStatement->ExecuteUpdate();

2.7.5　SQL文を利用した要素の更新

SQLのUPDATE文を利用して，繰り返し列の全体又は特定の要素をDBRArrayDataクラスを使用しないで更新できます。更新には，繰り返し列に要素を追加する，既存の要素を更新する，既存の要素を削除するの三つがあります。更新するときは，操作対象の要素の位置と値をUPDATE文に直接指定します。

また，INSERT文では，繰り返し列を含むレコードを追加することもできます。

簡易版の場合DBRDatabaseクラス，詳細版の場合DBStatementクラス又はDBConnectionクラスを使ってSQL文を実行します。詳細版では，パラメタを使ったSQL文も指定できます。

＜この項の構成＞

(1)　要素の追加

(2)　要素の更新

(3)　要素の削除

(4)　INSERT文を使った繰り返し列を持つレコードの追加

(1)　要素の追加

UPDATE文では，要素の追加にADD句を使うことにより，要素の最後に要素を追加するこでがでます。

(例1)繰り返し列F1の要素の最後に100を追加(ADD句)する。要素位置の最後は，*(アスタリスク)で表します。

/////////////////////////////////////////////////////////////
/// SQLの実行(要素の追加) - DBStatementクラスでUPDATE文を指定

  // DBStatementオブジェクトの生成
pStatement = pConnect->CreateStatement();
  // SQL文の実行(繰り返し列の最後の要素位置に追加)
pStatement->Execute("UPDATE TABLE1 ADD F1[*]=ARRAY [100]
                                              WHERE F2=300");

(例2)?パラメタを使用し繰り返し列F1の要素の最後に要素を追加(ADD句)する。

//////////////////////////////////////////////////////////////
/// SQLの実行(要素の追加)
/// - DBPreparedStatementクラスで?パラメタのあるUPDATE文を指定

  // DBPreparedStatementオブジェクトの生成
pStatement = pConnect->CreatePreparedStatement(
              "UPDATE TABLE1 ADD F1[*] =ARRAY[?] WHERE F2=?");
  // SQL文の解析
pStatement -> Execute();
  // ?パラメタへの値の設定
pStatement->SetParam(1,100);
pStatement->SetParam(2,300);
  // 更新の実行
pStatement->ExecuteUpdate();

(2)　要素の更新

UPDATE文では，要素の更新にSET句を使い，列名の直後に[要素番号]を指定することにより，特定の要素を変更することができます。

(例) 繰り返し列F1の要素位置1の要素の値を500に更新(SET句)する。

//////////////////////////////////////////////////////////////
/// SQLの実行(要素の更新) - DBStatementクラスでUPDATE文を指定

  // DBStatementオブジェクトの生成
pStatement = pConnect->CreateStatement();
  // SQL文の実行(要素番号1の値を更新)
pStatement->Execute("UPDATE TABLE1 SET F1[1]=ARRAY [500]
                                               WHERE F2=300");

(例)?パラメタを使用し，繰り返し列F1の要素位置1の要素の値を更新(SET句)する。

//////////////////////////////////////////////////////////////
/// SQLの実行(要素の更新)
/// - DBPreparedStatementクラスで?パラメタのあるUPDATE文を指定

  // DBPreparedStatementオブジェクトの生成
pStatement = pConnect->CreatePreparedStatement(
              "UPDATE TABLE1 SET F1[1] =ARRAY[?] WHERE F2=?");
  // SQL文の解析
pStatement -> Execute();
  // ?パラメタへの値の設定
pStatement->SetParam(1,100);
pStatement->SetParam(2,300);
  // 更新の実行
pStatement->ExecuteUpdate();

(3)　要素の削除

UPDATE文では，要素の削除にDELETE句を使い，列名の直後に[要素番号]を指定することにより，特定の要素を削除することができます。

(例)繰り返し列F1の1番目の要素を削除(DELETE句)する。

削除後，要素位置2以降の要素がある場合は，一つずつ位置番号が繰り上がります。

//////////////////////////////////////////////////////////////
/// SQLの実行(要素の削除) - DBStatementクラスでUPDATE文を指定

  // DBStatementオブジェクトの生成
pStatement = pConnect->CreateStatement();
  // SQL文の実行(要素位置1の値を削除)
pStatement->Execute("UPDATE TABLE1 DELETE F1[1] WHERE F2=300");

(例)?パラメタを使用し，繰り返し列F1の要素位置1を削除(DELETE句)する。

削除後，要素位置2以降の要素がある場合は，一つずつ位置番号が繰り上がります。

//////////////////////////////////////////////////////////////
/// SQLの実行(要素の削除)
/// - DBPreparedStatementクラスで?パラメタのあるUPDATE文を指定

  // DBPreparedStatementオブジェクトの生成
pStatement = pConnect->CreatePreparedStatement(
                      "UPDATE TABLE1 DELETE F1[1] WHERE F2=?");
  // SQL文の解析
pStatement -> Execute();
  // ?パラメタへの値の設定
pStatement->SetParam(1,300);
  // 更新の実行
pStatement->ExecuteUpdate();

(4)　INSERT文を使った繰り返し列を持つレコードの追加

INSERT文では，繰り返し列のデータをARRAY句の後に要素データを指定します。

(例)最初の繰り返し列には100，200の要素を持ち，次の繰り返し列にはA1,A2の要素を持つレコードを追加する。

//////////////////////////////////////////////////////////////
/// SQLの実行(追加) - DBStatementクラスでINSERT文を指定

  // DBStatementオブジェクトの生成
pStatement = pConnect->CreateStatement();
  // SQL文の実行
pStatement->Execute("INSERT INTO TABLE1
                  VALUES (ARRAY[100,200],ARRAY['A1','A2'])");

2.8　XDM/SDへのアクセス

＜この節の構成＞

2.8.1　XDM/SD接続機能とは

2.8.2　排他制御

2.8.3　データベースアクセス時の制限

2.8.4　注意事項

2.8.1　XDM/SD接続機能とは

XDM/SD接続機能とは，DABroker for C++からACE3の機能を利用して構造型データベースXDM/SDのレコードへアクセスする機能です。

DABrokerを利用したデータベースアクセスは，リレーショナルデータベースへのアクセスであるため，構造型データベースであるXDM/SDのデータを直接アクセスできません。XDM/SD接続機能は，階層構造になっているXDM/SDのデータを，ACE3とDatabase Connection Serverを利用することで，リレーショナルデータベースであるかのようにアクセスできる機能です。

DABroker for C++のクラスライブラリを利用して，次のようなデータベースアクセスができます。

データの検索と更新・削除（?パラメタ使用可）

任意のSQLの実行（詳細版クラスの場合?パラメタ使用可）

トランザクション制御

テーブル,フィールド情報などの参照（詳細版クラスの場合）

XDM/SDでは，親子関係を持つレコード間の関連を，親子集合で表現し，親レコードは複数の子レコードを持つことができます。このため，ACE3では，親と子を結合したレコードとすることで，一つのテーブルとしてアクセスします。

XDM/SDのスキーマとACE3のテーブルの対応を，図2-5に示します。

図2-5　XDM/SDのスキーマとACE3のテーブルの対応

ACE3で定義したテーブルに対してDatabase Connection Serverの提供するRDML文のSELECT文を実行することで，WHERE句で指定した検索条件に合致したレコードのデータが取得できます。

RDML文については，マニュアル「Database Connection Server」を参照してください。

前述のテーブルTAB1に対して次のようなSELECT文を実行します。

SELECT 製造元番号，商品番号，在庫数量  FROM TAB1 WHERE 商品番号=210

この結果の取得データは次のようになります。

2.8.2　排他制御

XDM/SDの排他制御には，次の二つの方法があります。

C++クラスライブラリを利用する方法
基本的にはC++クラスライブラリを利用して排他制御を行ないます。
簡易版クラスではResultSetに結果を得るときDBRResultSetクラスのExecuteメソッドの引数で，詳細版クラスではResultSetに結果を得るときSetResultSetTypeメソッドの引数で排他の種類を設定します。排他の種類によって，次のオプションが設定されます。
TYPE_EXCLUSIVE：LOCK SU
TYPE_NONE：付加しません（SDEXCLUSIVE値が仮定されます）。
TYPE_WAIT：LOCK SR
TYPE_NOWAIT：LOCK NR
TYPE_SHARED：LOCK SR
各オプションの詳細については，マニュアル「Database Connection Server」を参照してください。

Database Connection ServerのRDML文で指定する方法
Database Connection ServerのRDML文のSELECT文にLOCK句を付加して排他制御を指定することもできます。
ただし，資源競合時に共用できない場合，エラーになります。
また，Database Connection Serverの起動制御文の一つであるコントロール空間起動制御文でも指定できます。コントロール空間起動制御文のSDPARAMセクションのオペランドSDEXCLUSIVE，SDLOCKRANGE，SDRELEASEで指定できます。
起動制御文については，マニュアル「Database Connection Server」を参照してください。

2.8.3　データベースアクセス時の制限

XDM/SDのデータベースにアクセスする場合，アクセスできるテーブルやレコードに幾つかの制限があります。ここでは，データ操作ごとの制限について説明します。

以降の説明で使うXDM/SDのレコードの内容，ACE3のテーブル定義を次に示します。

＜この項の構成＞

(1)　レコードの検索

(2)　レコードの追加

(3)　レコードの削除

(4)　レコードの更新

(1)　レコードの検索

次のテーブルのレコードを検索できます。

親レコード型だけで定義したテーブル

子レコード型だけで定義したテーブル

親レコード型と子レコード型を用いて定義したテーブル

他のレコードと親子関係を持たないレコード型だけで定義したテーブル

RDML文のSELECT文で，WHERE句を指定して検索した場合，WHERE句に指定した検索条件に該当するデータを取得できます。

WHERE句を指定しない場合，SELECT文で指定したフィールド名のすべてのデータが取得されます。

（例１）

WHERE句に指定した条件で検索します。

SELECT A1,B2,B3 FROM OWNER_MEMBER_TABLE WHERE A1=1 AND B2='A'

検索結果

(2)　レコードの追加

次のテーブルのレコードを追加できます。

親レコード型だけで定義したテーブル

親レコード型と子レコード型を用いて定義したテーブル

他のレコードと親子関係を持たないレコード型だけで定義したテーブル

親レコード型だけで定義したテーブルにレコードを挿入した場合，XDM/SD上には子レコードを持たない親レコードが追加されます。

（例１）

親レコード型だけで定義したテーブルにレコードを追加します。

INSERT INTO OWNER_TABLE VALUES(4,'え','ニ')

テーブル上の実行結果

親レコード型と子レコード型を用いて定義したテーブルにレコードを追加する場合は，テーブルに定義した親レコード型の構成要素が，テーブル定義時にプライマリカラムとしたテーブルであることが必要です。

親レコード型と子レコード型を用いて定義したテーブルにレコードを追加すると，INSERT文のVALUES句に指定された挿入値をデータとする親レコードと，親子関係を持つ子レコードが追加されます。

ただし，親レコードはプライマリカラムのため，親レコードに重複するレコードは追加できません。

（例２）

親レコード型と子レコード型両者で定義したテーブルにレコードを追加します。

INSERT INTO OWNER_MEMBER_TABLE(A1,B2,B3) VALUES(4,'D',109)

テーブル上の実行結果

他のレコードと親子関係を持たないレコード型で定義したテーブルにレコードを追加する場合，XDM/SD上ではINSERT文のVALUES句に指定された挿入値をデータとするレコードが追加されます。

レコードを追加したとき，データを入力しないフィールドには省略時の設定値が入ります。テーブルの定義にないXDM/SDのレコード型の項目にも省略時の設定値が適用されます。

例えば，親レコード型のA1，A2で定義したテーブルにINSERT文でレコードを追加した場合，追加した親レコードのA3に ’’(空白)が入ります。

省略時の設定値についてはマニュアル「XDM E2系 システム定義」を参照してください。

(3)　レコードの削除

次のテーブルのレコードを削除できます。

親レコード型だけで定義したテーブル

子レコード型だけで定義したテーブル

他のレコードと親子関係を持たないレコード型だけで定義したテーブル

親レコードだけで定義したテーブルのレコードを削除した場合，XDM/SD上では削除した親レコードと親子関係にあった子レコードの動作はスキーマ定義の保存モードの指定に従います。

保存モードについてはマニュアル「XDM E2系 解説」を参照してください。

（例１）

親レコード型だけで定義したテーブルのレコードを削除します。

DELETE FROM OWNER_TABLE WHERE A1=3

テーブル上の実行結果

子レコード型だけで定義したテーブルのレコードを削除した場合，一つの子レコードを削除するとその子レコードだけ削除され，親レコードは削除されません。

親レコードに属する子レコードをすべて削除しても，親レコードは削除されません。

（例２）

子レコード型だけで定義したテーブルのレコードを削除します。

DELETE FROM MEMBER_TABLE WHERE B2='A' OR B2='AA' OR B2='AAA'

テーブル上の実行結果

他のレコードと親子関係を持たないレコード型で定義したテーブルのレコードを削除した場合，XDM/SD上でも該当するレコードが削除されます。

(4)　レコードの更新

次のテーブルのレコードを更新できます。

親レコード型だけで定義したテーブル

子レコード型だけで定義したテーブル

親レコード型と子レコード型を用いて定義したテーブル

他のレコードと親子関係を持たないレコード型だけで定義したテーブル

親レコード型だけで定義したテーブルの値を更新した場合，XDM/SD上では該当する親レコードのデータが更新されます。

ただし，CALCキー，シーケンシャルインデックスや子レコードがある場合の接続キーなどの変更はできません。

（例１）

親レコード型だけで定義したテーブルの値を更新します。

UPDATE OWNER_TABLE SET A2='ア' WHERE A2='あ'

テーブル上の実行結果

子レコード型だけで定義したテーブルの値を更新した場合，XDM/SD上では該当する子レコードのデータが更新されます。

（例２）

子レコード型だけで定義したテーブルの値を更新します。

UPDATE MEMBER_TABLE SET B2='α' WHERE B2='A'

　テーブル上の実行結果

親レコード型と子レコード型を用いて定義したテーブルのレコードを更新する場合は，テーブルに定義した親レコード型の構成要素が，テーブル定義時にプライマリカラムとしたテーブルである必要があります。この場合，子レコードの値を更新できます。

プライマリカラムである構成要素は値を更新できないので，親レコードの値は更新できません。

（例３）

親レコード型と子レコード型を用いて定義したテーブルの値を更新します。

UPDATE OWNER_MEMBER_TABLE SET B2='α' WHERE A1=1 AND B3=100

　テーブル上の実行結果

他のレコードと親子関係を持たないレコード型で定義したテーブルの値を更新した場合，XDM/SD上では該当するデータが更新されます。

2.8.4　注意事項

同じトランザクション内で，違う表の検索はできません。違う表を検索する場合は，一度トランザクションを終了(Commit，又はRollback)してください。

トランザクション内で実行するRDML文の排他オプションは変更できません。異なる排他オプションのRDML文を実行した場合，Executeメソッド，及びGetResultSetメソッドでエラーになります。異なる排他オプションのRDML文を実行する場合は，一度トランザクションを終了(Commit，又はRollback)してください。

3.　アプリケーションの作成

この章では，データベースへアクセスするためのアプリケーションの作成時に必要な項目について説明します。

＜この章の構成＞

3.1　ヘッダーファイル

3.2　ビルド方法

3.3　アプリケーション作成上の留意点

3.1　ヘッダーファイル

各クラスライブラリを利用するためには，DABroker for C++で提供するヘッダーをコーディング時にインクルード(include)します。インクルードするときは，すべてのクラスを使用するためのヘッダーを一度にインクルードするか，必要なクラスだけのヘッダーをインクルードするかを選択します。表3-1にヘッダーファイル一覧を示します。「dbbroker.h」をインクルードすると，クラスを利用するかどうかに関係なくすべてインクルードされます。

表3-1　 ヘッダーファイル一覧

クラス名 | ヘッダーファイル名
全クラス | dbbroker.h
DBDriverManagerクラス | dbbhdrmg.h
DBDriverクラス | dbbhdriv.h
DBConnectionクラス | dbbhcnct.h
DBStatementクラス | dbbhstmt.h
DBResultSetクラス | dbbhrset.h
DBResultSetMetaDataクラス | dbbhrsmd.h
DBPreparedStatementクラス | dbbhprep.h
DBCallableStatementクラス | dbbhprcd.h
DBDatabaseMetaDataクラス | dbbhdbmd.h
DBTransactionクラス | dbbhtrns.h
DBRArrayDataFactoryクラス | dbbharfc.h
DBRArrayDataクラス | dbbharry.h
DBRArrayDataPtrクラス | dbbharry.h
DBRArrayDataConstPtrクラス | dbbharry.h
classListTablesクラス | dbbhclss.h
classListColumnsクラス | dbbhclss.h
classListProceduresクラス | dbbhclss.h
classListProcedureColumnsクラス | dbbhclss.h
classListPrimaryKeysクラス | dbbhclss.h
DBRDatabaseクラス | dbbhdbrd.h
DBRResultSetクラス | dbbhdbrr.h
DBSQLCAクラス | dbbhexcp.h

3.2　ビルド方法

＜この節の構成＞

3.2.1　HP-UXの場合のビルド方法

3.2.2　AIXの場合のビルド方法

3.2.3　Red Hat Linuxの場合のビルド方法

3.2.4　Windowsの場合のビルド方法（Visual C++ 5.0，Visual C++ 6.0の場合）

3.2.5　Windowsの場合のビルド方法（Visual C++ .NET 2003，Visual Studioの場合）

3.2.1　HP-UXの場合のビルド方法

以下の方法でビルドをしてください。

＜この項の構成＞

(1)　コンパイルオプション

(2)　リンクオプション

(1)　コンパイルオプション

DABroker for C++はマルチスレッド対応のライブラリなので，マルチスレッド動作用のコンパイルオプションやリンクする共有ライブラリを指定する必要があります。詳細については，OSに付属するオンラインマニュアル「aCC」，「pthread」を参照してください。

なお，64ビットモード用コンパイルオプションは使用しないでください。

コンパイル時の指定例を次に示します。少なくとも，以下の指定が必要です。"xxxx.cpp"には，ユーザプログラムのソースファイルを指定してください。

-Iオプションでは，DABroker運用ディレクトリの下のcpp/includeディレクトリを指定します。ここではDABroker運用ディレクトリが/opt/DABrokerの場合の例を示します。

(a)　HP-UX（PA-RISC）の場合

aCC -c +DAportable -D_HPUX_SOURCE -D_POSIX_SOURCE
    -D_POSIX_1003_1C -D_REENTRANT
    -D_POSIX_C_SOURCE=199506L -I/opt/aCC/include
    -I/opt/DABroker/cpp/include xxxx.cpp

コンパイラがac++ A.03.55以降の場合は-APオプションを指定してください。

aCC -c -AP +DAportable -D_HPUX_SOURCE -D_POSIX_SOURCE
    -D_POSIX_1003_1C -D_REENTRANT
    -D_POSIX_C_SOURCE=199506L -I/opt/aCC/include
    -I/opt/DABroker/cpp/include xxxx.cpp

TPBrokerのOTSインタフェースを使ってトランザクション制御をする場合は，上記のほかに，TPBrokerが指定するコンパイルオプションも指定してください。

OpenTP1連携を使ってトランザクション制御をする場合
コンパイルオプションには最低限次の指定が必要です。"xxxx.cpp"はユーザプログラムのソースファイルを指定してください。

aCC -c -AP +DAportable -D_HPUX_SOURCE -D_POSIX_SOURCE
    -D_POSIX_1003_1C -DDABCPP_SINGLE_THREAD -I/opt/aCC/include
    -I/opt/DABroker/cpp/include xxxx.cpp

注　この例では，-Iオプションで"/opt/DABroker/cpp/include"を指定していますが，実際のコンパイル時には，-Iオプションで"DABroker運用ディレクトリ/cpp/include"を絶対パスで指定してください。

64ビットモード用コンパイルオプションは使用しないでください。

(b)　HP-UX（IPF）の場合

aCC -c -D_HPUX_SOURCE -D_POSIX_SOURCE
    -D_POSIX_1003_1C -D_REENTRANT
    -D_POSIX_C_SOURCE=199506L -I/opt/aCC/include
    -I/opt/DABroker/cpp/include xxxx.cpp
    -AP +DD32

(2)　リンクオプション

リンケージ時の指定例を次に示します。少なくとも，以下の指定が必要です。"xxxx.out"は出力ファイル名を，"xxxx.o"はリンクするオブジェクトファイル名を指定してください。

-Lオプションでは，DABroker運用ディレクトリの下のlibディレクトリを指定します。ここではDABroker運用ディレクトリが/opt/DABrokerの場合の例を示します。

(a)　HP-UX（PA-RISC）の場合

aCC -Wl,+s -oxxxx.out xxxx.o -L/opt/DABroker/lib -lpthread
   -ldabcpp20

コンパイラがac++ A.03.55以降の場合は-APオプションを指定してください。

aCC -Wl,+s -AP -oxxxx.out xxxx.o -L/opt/DABroker/lib -lpthread
   -ldabcpp20

TPBrokerのOTSインタフェースを使ってトランザクション制御をする場合は，上記のほかに，TPBrokerが指定するリンクオプションも指定してください。

また，TPBrokerのOTSインタフェースを使ってトランザクション制御する場合でHiRDB使用時は，必ずlibzcltyk.slをリンクしてください。

OpenTP1連携を使ってトランザクション制御をする場合
リンクオプションには，最低限次の指定が必要です。"xxxx.out"は出力ファイル名を，"xxxx.o"はリンクするオブジェクトファイル名を指定してください。マルチスレッド用のライブラリとはライブラリ名が異なりますのでご注意ください。

aCC Wl,+s -AP -oxxxx.out xxxx.o -L/opt/DABroker/lib -ldabcpp20st

注　この例では-Lオプションでは"/opt/DABroker/lib"を指定していますが，実際のリンク時には-Lオプションでは絶対パスで"DABroker運用ディレクトリ/lib"を指定してください。

HiRDB使用時は，必ずlibzcltys.slをリンクしてください。

(b)　HP-UX（IPF）の場合

aCC -Wl,+s -oxxxx.out xxxx.o -L/opt/DABroker/lib -lpthread
   -ldabcpp32 -AP

TPBrokerのOTSインタフェースを使ってトランザクション制御する場合でHiRDB使用時は，必ずlibzcltyk.soをリンクしてください。

3.2.2　AIXの場合のビルド方法

以下の方法でビルドをしてください。

＜この項の構成＞

(1)　コンパイルオプション

(2)　リンクオプション

(1)　コンパイルオプション

DABroker for C++はマルチスレッド(UNIX98スレッド)対応のライブラリなので，マルチスレッド(UNIX98スレッド)動作用のコンパイルオプションやリンクする共有ライブラリを指定する必要があります。詳細については，VisualAge C++のマニュアルを参照してください。

なお，64ビットモード用コンパイルオプションは使用しないでください。

コンパイル時の指定例を次に示します。少なくとも，以下の指定が必要です。"xxxx.cpp"には，ユーザプログラムのソースファイルを指定してください。

-Iオプションでは，DABroker運用ディレクトリの下のcpp/includeディレクトリを指定します。ここではDABroker運用ディレクトリが/opt/DABrokerの場合の例を示します。

xlC_r -c  -DDAB_AIX -D_POSIX_1003_1C -I/opt/DABroker/cpp/include xxxx.cpp

ヘッダーファイルは，<pthread.h>を取り込みます。

OpenTP1連携を使ってトランザクション制御をする場合
OpenTP1連携を使ってトランザクション制御をする場合，コンパイルオプションの指定によってシングルスレッド対応のオブジェクトを作成することができます。シングルスレッド対応のオブジェクトを作成する場合の指定例を次に示します。

xlC -c  -DDAB_AIX -DDABCPP_SINGLE_THREAD -I/opt/DABroker/cpp/include xxxx.cpp

(2)　リンクオプション

リンケージ時の指定例を次に示します。少なくとも，次の指定が必要です。

"xxxx.out"は出力ファイル名を，"xxxx.o"はリンクするオブジェクトファイル名を指定してください。

xlC_r -oxxxx.out xxxx.o -L/opt/DABroker/lib -ldabcpp20 -lpthreads

TPBrokerのOTSインタフェースを使ってトランザクション制御する場合でHiRDB使用時は，必ずlibzcltyk.aをリンクしてください。

OpenTP1連携を使ってトランザクション制御をする場合
OpenTP1連携を使ってトランザクション制御をする場合の指定例を次に示します。

xlC -oxxxx.out xxxx.o -L/opt/DABroker/lib -ldabcpp20st

HiRDB使用時は，必ずlibzcltys.aをリンクしてください。

3.2.3　Red Hat Linuxの場合のビルド方法

以下の方法でビルドをしてください。

＜この項の構成＞

(1)　コンパイルオプション

(2)　リンクオプション

(1)　コンパイルオプション

DABroker for C++はマルチスレッド対応のライブラリなので，マルチスレッド動作用のコンパイルオプションやリンクする共有ライブラリを指定する必要があります。詳細については，GCCのマニュアルを参照してください。

なお，64ビットモード用コンパイルオプションは使用しないでください。

コンパイル時の指定例を次に示します。少なくとも，以下の指定が必要です。"xxxx.cpp"には，ユーザプログラムのソースファイルを指定してください。

-Iオプションでは，DABroker運用ディレクトリの下のcpp/includeディレクトリを指定します。ここではDABroker運用ディレクトリが/opt/DABrokerの場合の例を示します。

g++ -c -fPIC　-D_REENTRANT -D_POSIX_1003_1C
   -D_XOPEN_SOURCE=500
   -D_THREAD_SAFE -DDAB_PCLINUX
   -I/opt/DABroker/cpp/include xxxx.cpp

ヘッダーファイルは，<pthread.h>を取り込みます。

(2)　リンクオプション

リンケージ時の指定例を次に示します。少なくとも，次の指定が必要です。

"xxxx.out"は出力ファイル名を，"xxxx.o"はリンクするオブジェクトファイル名を指定してください。

g++ -oxxxx.out xxxx.o -L/opt/DABroker/lib
   -ldabcpp40 -lpthread

コマンド名称は，使用するRed Hat Enterprise Linuxのバージョンによって異なることがあります。

OpenTP1連携を使ってトランザクション制御をする場合
OpenTP1連携を使ってトランザクション制御をする場合の指定例を次に示します。

g++ -oxxxx.out xxxx.o -L/opt/DABroker/lib -ldabcpp40

HiRDB使用時は，必ずlibzcltk.soをリンクしてください。

3.2.4　Windowsの場合のビルド方法（Visual C++ 5.0，Visual C++ 6.0の場合）

Visual C++のIDEを使用して，メニュー「プロジェクト」－「設定...」を選択します。

＜この項の構成＞

(1)　プロジェクトの設定

(2)　インクルードファイルの設定

(3)　ライブラリの設定

(4)　プリプロセッサの定義（Database Access for ORB用のソースを移行する場合）

(1)　プロジェクトの設定

「C/C++」タブを選択します。

「コード生成」カテゴリを選択します。

「プロセッサ」設定欄に，Pentium(R)を設定します。

「使用するランタイムライブラリ」設定欄に，マルチスレッド(DLL)を設定します。デバッグ版の場合は，マルチスレッド(DLL，デバッグ)を設定します。

(2)　インクルードファイルの設定

「C/C++」タブを選択します。

「プリプロセッサ」カテゴリを選択します。

「インクルードファイルのパス」設定欄に，[インストールディレクトリ］¥cpp¥includeを設定します。

（例）C:¥Program Files¥Hitachi¥DABroker¥cpp¥include

(3)　ライブラリの設定

「リンク」タブを設定します。

「インプット」カテゴリを選択します。

「オブジェクト/ライブラリモジュール」設定欄に次のライブラリを追加します。括弧内はデバッグ版です。

dabcpp20.lib (dabcpp20d.lib）

これらのライブラリは，［インストールディレクトリ］¥cpp¥libにあります。

TPBrokerのOTSインタフェースを使ってトランザクション制御する場合でHiRDB使用時は，必ずpdcltxm5.libをリンクしてください。

(4)　プリプロセッサの定義（Database Access for ORB用のソースを移行する場合）

「C/C++」タブを選択します。

「プリプロセッサ」カテゴリを選択します。

「プリプロセッサの定義」設定欄に，"-DUSE_OLDNAMES"を設定します。

このとき，BOOL型はBOOLEAN型(Visual C++のboolean型)で定義されますが，Visual C++のBOOL型を使用したい場合には，同じ欄に"-DDAB_NOUSE_BOOL"を追加します。ただし，これを定義すると，DABrokerのソースでBOOL型の変数を引数にしてメソッドを使用している場合（例えば，GetFieldなど）はリンク時にエラーになります。このような場合は，BOOL型で宣言している変数をBOOLEAN型で宣言するようにソースを修正する必要があります。

3.2.5　Windowsの場合のビルド方法（Visual C++ .NET 2003，Visual Studioの場合）

Visual C++のIDEを使用して，メニュー「プロジェクト」－「プロパティ」を選択します。

＜この項の構成＞

(1)　プロジェクトの設定

(2)　インクルードファイルの設定

(3)　ライブラリの設定

(4)　プリプロセッサの定義（Database Access for ORB用のソースを移行する場合）

(1)　プロジェクトの設定

ツリーの「構成プロパティ」－「C/C++」を選択します。

「コード生成」カテゴリを選択します。

「ランタイムライブラリ」設定欄に，マルチスレッド（DLL）を設定します。デバッグ版の場合は，マルチスレッド（DLL，デバッグ）を設定します。

(2)　インクルードファイルの設定

ツリーの「構成プロパティ」－「C/C++」を選択します。

「全般」を選択します。

「追加のインクルードディレクトリ」に［インストールディレクトリ］¥cpp¥includeを設定します。
（例）C:¥Program Files¥Hitachi¥DABroker¥cpp¥include

(3)　ライブラリの設定

ツリーの「構成プロパティ」－「リンカ」を設定します。

「入力」を選択します。

「追加の依存ファイル」に次のライブラリを追加します。括弧内はデバッグ版です。

dabcpp20.lib (dabcpp20d.lib）

このライブラリは，［インストールディレクトリ］¥cpp¥libにあります。

TPBrokerのOTSインタフェースを使ってトランザクション制御する場合でHiRDB使用時は，必ずpdcltxm5.libをリンクしてください。

(4)　プリプロセッサの定義（Database Access for ORB用のソースを移行する場合）

ツリーの「構成プロパティ」－「C/C++」を選択します。

「プリプロセッサ」を選択します。

「プロセッサの定義」設定欄に，”-DUSE_OLDNAMES“を設定します。

このとき，BOOL型はBOOLEAN型（Visual C++のboolean型）で定義されますが，Visual C++のBOOL型を使用したい場合には，同じ欄に”-DDAB_NOUSE_BOOL”を追加します。ただし，これを定義すると，DABrokerのソースでBOOL型の変数を引数にしてメソッドを使用している場合（例えば，GetFieldなど）はリンク時にエラーになります。このような場合は，BOOL型で宣言している変数をBOOLEAN型で宣言するようにソースを修正する必要があります。

3.3　アプリケーション作成上の留意点

＜この節の構成＞

3.3.1　オブジェクトの生成と削除

3.3.2　データベースアクセスリソース数の制限

3.3.3　検索性能の向上策

3.3.4　BLOB型データの取得方法についての制限

3.3.5　検索中のCommit,Rollbackについて

3.3.6　signal使用時の注意

3.3.7　Visual C++ 6.0以降使用時の注意

3.3.8　暗黙のsetlocale関数の実行

3.3.9　?パラメタに文字列を指定する場合の注意

3.3.10　データベースへの接続処理の複数スレッド同時実行

3.3.1　オブジェクトの生成と削除

＜この項の構成＞

(1)　簡易クラス

(2)　詳細クラス

(3)　オブジェクト削除後の注意事項

(4)　オブジェクト名称の自動生成

(1)　簡易クラス

簡易クラスでは，Database，ResultSetオブジェクトを生成しデータベースアクセスを行います。このオブジェクトの生成には，DBRDatabase，DBRResultSetクラスのコンストラクタを利用しますので，オブジェクトを生成した関数が終了するとオブジェクトも削除されます。

(2)　詳細クラス

詳細クラスでは，new演算子やauto変数の宣言でオブジェクトを生成するのは，DBDriverManagerクラスのオブジェクトです。これ以外のクラスのオブジェクトについては，new演算子などを使った生成ではなく，その親のオブジェクトのメソッドでオブジェクトを生成してください。

new演算子で生成したDriverManagerオブジェクトは，delete演算子で削除します。これ以外のオブジェクトは，削除メソッドでオブジェクトを削除してください。

例えば，DBStatementクラスやDBResultSetクラスなどはその親のオブジェクトが生成するため，親のクラスで提供するRemoveStatementメソッドやRemoveResultSetメソッド，又は自分自身を削除するRemoveメソッドなどで削除してください。

classList～クラスやDBResultSetMetaDataクラスなどは，それらの領域を削除するメソッドはありませんが，これらのオブジェクトは親のオブジェクトを削除した時に一緒に削除されます。

(3)　オブジェクト削除後の注意事項

オブジェクトを削除した時は，そのオブジェクトのポインタは使用しないでください。特に，親オブジェクトを削除するケースでは，子のオブジェクトも削除されることに注意ください。

また，ResultSet中のフィールド値の参照で，DABrokerが用意した領域を参照する場合にも注意が必要です。

(4)　オブジェクト名称の自動生成

Transaction，CreateStatement，CreatePreparedStatement，CreateCallableStatementメソッドでは，オブジェクト名称を自動生成しますので，オブジェクト名称が重複しないよう注意が必要です。自動生成する名前は，次のようになっています。

DBTransactionオブジェクト名:T_%010d (T_0000000000～T_2147483647)
DBStatementオブジェクト名:S_%010d (S_0000000000～S_2147483647)
DBPreparedStatementオブジェクト名:P_%010d (P_0000000000～P_2147483647)
DBCallableStatementオブジェクト名:C_%010d(C_0000000000～C_2147483647)

ここで引数とする数値は，0～2147483647で0から始まり2147483647まで進むとまた0から始まります。この数値のカウンタは各オブジェクトごとに持っています。このとき，生成した名前を持つオブジェクトが既にあるかどうかのチェックはしません。同じ名前のオブジェクトを二つ以上生成すると異常終了することがあるので，同じ名前を付けることがないようにしてください。

3.3.2　データベースアクセスリソース数の制限

DABroker for C++ でSQLを実行する場合，カーソルというリソースを使用します。このカーソルは，処理内容によって必要な個数が異なります。

一つのカーソルに対する占有期間は，オブジェクトの生存期間に依存するケースとメソッド実行時にだけ必要とするケースの二つのケースに分けることができます。オブジェクトの生存期間に依存するケースは，オブジェクトが作成されてから削除されるまで占有します。メソッド実行時にだけ必要とするケースは，そのメソッドの実行が終了すると解放します。一つのコネクションで使用できるカーソル数は64個までです。64個を超えた場合は，DBSQLCA例外をスローしますので64個を超えないようにプログラムで制御する必要があります。

オブジェクトの生存期間に依存するケースで使用するカーソル数を表3-1，メソッド実行時にだけ必要とするケースで使用するカーソル数を表3-2に示します。

表3-2　オブジェクトの生存期間に依存するケース

クラス名 | DBMSの種類※1
A | B
DBConnection※2 | 1 | 1
DBStatement | 1 | 1
DBPreparedStatement | 1 | 1
DBCallableStatement※3 | 2 | 2
DBRDatabase※2※4 | 1 | 1
DBRResultSet※5 | 1 | 1

注※1　DBMSの種類は以下のとおりです。

A | HiRDB,VOS3 XDM/RD,VOS3 XDM/SD,VOSK SQL/K,Oracle
B | SQL Anywhere,Adaptive Server Anywhere,SQL Server

注※2　非同期処理の場合は，A,Bともに0となります。

注※3　厳密には，オブジェクト生成時は一つだけ使用し，SetProcedureメソッドを実行するともう一つ使用します。

注※4　厳密には，Connectメソッド実行後からCloseメソッド実行後まで占有します。

注※5　厳密には，オブジェクトを生成しただけでは使用しません。Executeメソッドを実行したときに使用します。

表3-3　メソッド実行だけ必要とするケース

クラス名 | メソッド名 | DBMSの種類※1
A | B
DBConnection | ExecuteDirect※2 | 0 | 1
DBDatabaseMetaData | GetTable | 1 | 1
GetColumns | 1 | 1
GetProcedures | 2 | 2
GetprocedureColumns | 1 | 1
GetPrimaryKeys | 1 | 1
DBStatement | Execute | 0 | 1
GetResult | 0 | 1
DBPreparedStatement | Execute | 0 | 1
GetResult | 0 | 1
DBCallableStatement | SetProcedure | 0 | 1
Execute | 0 | 1
Resume | － | 1
DBResultSet | Update | 1 | 2
Delete | 1 | 2
DBRDatabase | ExecuteDirect※2 | 0 | 1
DBRResultSet | Update | 1 | 2
Delete | 1 | 2

注※1　DBMSの種類は以下のとおりです。

A | HiRDB,VOS3 XDM/RD,VOS3 XDM/SD,VOSK SQL/K,Oracle
B | SQL Anywhere,Adaptive Server Anywhere,SQL Server

注※2　非同期処理の場合は，A：1 B：2となります。

（使用例）

HiRDB使用時に，DBStatementオブジェクトを二つ，DBCallableStatement オブジェクトを一つ作成し，DBResultSetオブジェクトでUpdateメソッドを実行した場合のカーソル使用数を次に示します。

クラス数 | オブジェクト数 | オブジェクト単位のカーソル使用数 | カーソル使用数
DBConnection | 1 | 1 | 1
DBStatement | 2 | 1 | 2
DBCallableStatement | 1 | 2 | 2
合計 |  |  | 5

さらに，メソッド実行時に一時的に一つ使用するため，合計6個のカーソルを使用することになります。

3.3.3　検索性能の向上策

詳細クラスでは，2バッファ方式を利用することで，レコードの検索性能を向上させることができます。この方式は，取得するResultSetがSetMaxRowsメソッドで指定したレコード数より多く，PageNextメソッドで次のResultSetを読み込んだりする必要のある場合に効果があります。取得するResultSetが，SetMaxRowsメソッドで指定したレコード数より少ないことが分かっている場合は，2バッファ方式を指定する意味はありません。

2バッファ方式は，DBStatementクラス，DBPreparedStatementクラス，DBCallableStatementクラスのSetResultSetTypeメソッドで設定します。

なお，ResultSetへ一度にレコードを取得できた場合は，2バッファ方式を指定した場合でも，バッファは一つしか作成されないため，2バッファ方式を指定することで処理が遅くなるようなことはありません。

＜この項の構成＞

(1)　バッファを一つ使う場合

(2)　バッファを二つ使う場合

(1)　バッファを一つ使う場合

DABrokerは検索結果を取得するように要求された後，データを取得します。次の検索要求に対する実行は，先に取得したデータの処理が終わった後です。

この方法では，並行して処理を実行できませんが，2バッファの場合と比べて使用するメモリの量が半分で済みます。

また，次の検索結果を取得するまでにユーザの行う処理が短いときには，この方式が有効な場合があります。２バッファ方式を指定して検索すると，DABrokerではスレッドの生成とイベントによる待ち合わせが行われるため，連続して検索結果を取得するような場合には余分な処理によって遅くなることがあります。

(2)　バッファを二つ使う場合

一つめのバッファの検索結果に対してユーザが処理を行っている間に，並行して別のスレッドでもう一つのバッファにデータベースのデータを読み込めます。

デメリットとしては，バッファを一つしか使わない場合と比べて，検索結果を保持しておくためのメモリ使用量が２倍になります。検索結果を保持しておくための領域は検索するフィールド数と一度に取得するレコード数に比例して多く必要になります。

次のような場合，2バッファ方式で検索結果を効率よく取得できます。

検索結果を取得した後，次の検索結果を取得するまでにある程度時間（次の検索結果を取得するために掛かる程度の時間）の掛かる処理を行う場合

検索結果のデータ量が多い場合

3.3.4　BLOB型データの取得方法についての制限

BLOB型データを取得する際に，複数レコードを一度にメモリ上に取得するよう指定した場合(nBLOBType:TYPE_BLOB_MEMORY)，１レコードにつき32KBまでのデータしか取得できません。32KBを超えるデータをすべて取得するためには，次のどちらかの方法で１レコードずつ取得する必要があります。

DBStatementクラス，DBPreparedStatementクラス，DBCallableStatementクラスのSetMaxRowsメソッドで１を指定

SetResultSetTypeメソッドで，TYPE_EXCLUSIVEを指定

3.3.5　検索中のCommit,Rollbackについて

データベースの検索は，SQL文を前処理してカーソルを準備（Executeメソッド）し，その後カーソルをオープン（GetResultSetメソッド）して行います。DBMSによってはCommit又はRollback実行時にカーソルをクローズしたり，前処理を無効にするものがあります。カーソルをクローズすると，その状態で検索を続けることはできません。再度カーソルをオープンする必要があります。前処理が無効になった場合は，検索できません。検索するには，再度SQL文を前処理してカーソルを準備し，そのカーソルをオープンする必要があります。

検索時のCommit,Rollbackには以下のタイミングがあります。

Execute (DBStatement, DBPreparedStatement)

↓ ① (Commit, Rollback)

GetResultSet (DBStatement, DBPreparedStatement)

↓ ② (Commit, Rollback)

PageNext,Next (DBResultSet)

↓ ③ (Commit, Rollback)

PageNext,Next (DBResultSet)

↓ ④ (Commit, Rollback)

Refresh (DBResultSet)

↓ ⑤ (Commit, Rollback)

PageNext,Next (DBResultSet)

：

ORACLEの場合

DBStatementクラス, DBPreparedStatementクラスのSetResultSetTypeメソッドでTYPE_EXCLUSIVEを指定して検索を実行した場合は，①のタイミングではまだカーソルをオープンしていません。④のタイミングではRefreshメソッドでカーソルを再オープンするためどちらも問題ありませんが，②，③，⑤のタイミングでCommit又はRollbackを実行した場合はカーソルを閉じてしまうため次の処理に進めません。この場合はRefreshメソッドで再検索を実行する必要があります。

SetResultSetTypeメソッドでTYPE_NONEを指定した場合は，①～⑤のどのタイミングで実行しても検索処理は継続できます。

HiRDB, XDM/RDの場合

SetResultSetTypeメソッドで指定した値にかかわらず，①～⑤のどのタイミングでCommit又はRollbackを実行してもカーソルが閉じられ，前処理が無効になってしまうため，検索処理は継続できません。再度Executeメソッドから実行し直す必要があります。

SQL Anywhere,Adaptive Server Anywhere,SQL Serverの場合

①～⑤のどのタイミングで実行しても検索を続行できます。特に制限はありません。

3.3.6　signal使用時の注意

ユーザプログラムでは，シグナルを明示的にハンドリングしないでください。ユーザプログラムでシグナルをハンドリングした場合の動作は保証できません。

SIGALRMとSIGPIPEはDABroker内部のシグナルハンドラで処理します。DBMSによっては，その他のシグナルも使用できない場合があるため，シグナルを使用したい場合は，使用するDBMSでそのシグナルが使用できるかどうか確認する必要があります。

3.3.7　Visual C++ 6.0以降使用時の注意

Visual C++ 6.0以降を使用してユーザプログラムを新しく作成する場合，型の別名を次のように定義してください。

また，既に作成したユーザプログラムをVisual C++ 6.0以降でコンパイルする場合，エラーになることがあります。この場合も，型の別名を次のように変更してください。

Visual C++ 5.0
(変更前)
Visual C++ 6.0以降
(変更後)
対応する標準C++の型

INT8
DBR_INT8
char

UINT8
DBR_UINT8
unsigned char

INT16
DBR_INT16
short int

UINT16
DBR_UINT16
unsigned short int

INT32
DBR_INT32
long int

UINT32
DBR_UINT32
unsigned long int

SINGLE
DBR_SINGLE
float

DOUBLE
DBR_DOUBLE
double

変更例

変更前

INT32 i32Data = 10;
pPrep->SetParam(1,i32Data); // Visual C++ 6.0ではエラー

変更後

DBR_INT32 i32Data = 10; // 型の名前をINT32からDBR_INT32に変更
pPrep->SetParam(1,i32Data);

Visual C++ 5.0を使用する場合は，型の別名を変更する必要はありません。従来どおりの名前を使用できます。

3.3.8　暗黙のsetlocale関数の実行

UNIXの場合，DABroker for C++のライブラリロード時に初期化されるグローバルオブジェクトのコンストラクタ内で，以下のsetlocale関数を暗黙に実行します。setlocale関数は，メソッドの引数にテーブル名やフィールド名などのデータベースの定義情報を指定する場合，2バイト文字を正しく判定するために使用します。

setlocale(LC_ALL,"")

このロケールには，DABrokerの環境変数LANGの指定値が適用されますので，DABrokerの環境変数LANGを正しく設定してください。

Windowsの場合，setlocale関数を暗黙に指定することはしません。テーブル名やフィールド名などで2バイト文字を使用する場合は，ユーザプログラム中でsetlocale関数を実行してください。

3.3.9　?パラメタに文字列を指定する場合の注意

ORACLEの場合，DBPreparedStatementやDBCallableStatementで使用している?パラメタに，文字列，又はDBR_BINARYの値を指定するときは，次の点に注意してください。

SQLを実行※する場合，前回の実行後にSetParamメソッドで値を変更して再度実行していると，カーソルの再解析が必要になることがあります。この場合は，再度Executeメソッドを実行してSetParamメソッドで値を設定し直してからSQLを実行してください。

カーソルの再解析が必要になるのは次の場合です。

変更前と変更後のデータの長さが次に示す範囲をわたる場合

0～255バイト

256～2000バイト

2001バイト以上

例えば，SetParamメソッドで200バイトの文字列を設定してExecuteUpdateメソッドを実行した後，300バイトの文字列をSetParamメソッドで設定して再度ExecuteUpdateメソッドを実行すると，ORACLEのエラーになります。このような場合は，Executeメソッドを実行してから，SetParamメソッドで300バイトの文字列を設定してExecuteUpdateメソッドを実行してください。

注※　ここではExecuteUpdateメソッド，又はGetResultSetメソッドの実行を指します。

3.3.10　データベースへの接続処理の複数スレッド同時実行

HiRDB以外のデータベースへの接続処理，及び切断処理については，スレッド間で排他制御を行っているため，複数のスレッドから同時に実行した場合でも，並行に処理されることはありません。また，接続，切断処理は比較的重い処理であるため，同時に幾つものスレッドで接続処理，切断処理が頻繁に行われるようなプログラムでは，これらの処理が性能低下の原因になることがあります。このような場合，あらかじめデータベースへの接続を幾つか作成しておき，要求があるたびに空いている接続を割り当て，処理が終わった後も切断しないで，次の要求で再利用できるようにします。このような手法は，一般にコネクションプーリングと呼ばれています。

4.　簡易版関数詳細

DABrokerでは，C++による開発向けのプログラミングインタフェースとして，C++クラスを提供します。ここでは，簡易版のクラスごとに，プロパティやメソッドの詳細について説明します。

＜この章の構成＞

4.1　文法の説明順序

4.2　簡易版クラスの概要

4.3　DBRDatabaseクラスの詳細

4.4　DBRResultSetクラスの詳細

4.1　文法の説明順序

この章では,メソッドごとに，次のような順序で説明しています。

＜この節の構成＞

メソッド名

メソッド名

機能

各メソッドの機能概要について記述しています。

形式

実際に指定する形式について記述しています。

引数は，特に断りのないかぎり，形式に示してある順序で記述してください。

void  Connect (LPCTSTR lpctUID，
                LPCTSTR lpctPWD,
                LPCTSTR lpctDBN,
                LPCTSTR lpctOPT = NULL,  
                LPCTSTR lpctAbstractName,
                UINT16 swWait = LOCK_OPT_NOWAIT,
                UINT16 swTimeout = 0,
                UINT16 swSync = STMT_SYNC)       throw DBSQLCA

引数のうち=のない引数（lpctUIDなど）は，省略できないことを示します。

=のある引数（swWait = LOCK_OPT_NOWAITなど）は，指定を省略できることがあります。途中の引数を一つ又は複数省略することはできません。例えば上記の例では，引数swWait, swTimeout, swSyncのすべてを省略することはできますが，swTimeoutだけを省略することはできません。

=の右辺の値は，デフォルト値であることを示しています。この例では，引数swWait指定を省略するとLOCK_OPT_NOWAITが仮定されることを示しています。

引数

形式で説明されている引数とその意味について記述しています。

戻り値

戻り値には，メソッドの戻り値の型（データ型として記述）や説明が記述してあります。

また，主に戻り値の説明中にある（又は機能詳細などにある場合もあります），TRUE及びFALSEの表記は，それぞれ非0及び0を意味しています。ヘッダではTRUEを１と定義していますが，これは便宜上のものであり，TRUEの場合でもBOOLEAN型の戻り値として１以外の値が返ることがあります。

したがって，BOOLEAN型の戻り値でTRUEかどうかを判定する場合は，例１のような方法ではなく，例２に示す方法で判定してください。

（例１）

BOOLEAN bFlag;
       ：
if(bFlag == TRUE)
{
// TRUE
}

（例２）

BOOLEAN bFlag;
      ：
if(bFlag)
{
  // TRUE
}

機能詳細

各メソッドの解説が記述してあります。

発生する例外

メソッドでスローする可能性のある代表的なエラーが記述してあります。ここに書かれていないエラーをスローすることもあります。また，項目の先頭に記述されているDBSQLCA(RetCode)は，DBSQLCAクラスのRetCodeプロパティにエラーがスローされることを示しています。

DB_ERROR_NOT_ENOUGH_MEMORY

エラーコードを示します。

アプリケーション作成時には，RetCodeプロパティに返るエラーコードを直接，比較，判定に利用できます。なお，アプリケーションで利用するためには，include文でヘッダーファイルdbbroker.hファイルをインクルードしておきます。

DBSQLCA* pError = NULL;
  try
  {
    :
    pError = custom.GetErrorStatus();
                            // SQL実行時のエラー情報を取得
    if(pError->RetCode != 0)
                            // DBSQLCAオブジェクトのRetCodeで確認
      throw *pError;
    :
  }
  catch(DBSQLCA e)
  {
  }

  try
  {
    :
    pCon->Connect("uid","pass",NULL,"RDB");
                                       // データベースとの接続
    :
  }
  catch(DBSQLCA e)
  {
  if(e.RetCode==DB_ERROR_NOT_ENOUGH_MEMORY)
                                      //エラーコードを判定に使う
    :
  }

4.2　簡易版クラスの概要

DatabaseオブジェクトをポイントしてResultSetオブジェクトを生成します。

HiRDBの繰り返し列を利用する場合は，DBRArrayDataFactoryクラスを利用し，DBRArrayDataオブジェクトを生成します。オブジェクトのデータ（繰り返し列の要素の値）はDBRArrayDataPtrクラス，又はDBRArrayDataConstPtrクラスを利用して取得します。

なお，繰り返し列用のクラスライブラリは，詳細版でも利用できるため，詳細については，「6.　共通関数詳細」を参照してください。

簡易版クラスライブラリのクラスの一覧を表4-1に示します。

表4-1　簡易版クラスライブラリのクラスの一覧

クラス名 | 概 要
DBRDatabaseクラス | 接続するデータベースについて管理します。
DBRResultSetクラス | 検索したResultSetについて管理します。
DBRArrayDataFactoryクラス | 繰り返し列を扱うDBRArrayDataクラスを管理します。
DBRArrayDataクラス | 繰り返し列のデータを管理します。
DBRArrayDataPtrクラス | 要素の値を変更したり，参照します。
DBRArrayDataConstPtrクラス | 要素の値を参照します。

4.3　DBRDatabaseクラスの詳細

DBRDatabaseクラスが提供しているコンストラクタとメソッドの詳細について説明します。

コンストラクタとメソッドの機能の概要を次に示します。

機 能 | コンストラクタ名
Databaseオブジェクトを生成します。 | DBRDatabase

機 能 | メソッド名
データベースとの接続を切り離します。 | Close
トランザクションをコミットします。 | Commit
データベースに接続します。 | Connect
検索結果を必要としないSQL文を実行します。 | ExecuteDirect
繰り返し列を扱うために，DBRArrayDataFactoryオブジェクトを生成し，ポインタを取得します。 | GetArrayDataFactory
SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。 | GetErrorStatus
Databaseオブジェクトで実行待ち，又は実行中のステートメントがあるかどうかを確認します。 | InWaitForDataSource
データベースが切断されているかどうかを確認します。 | IsClosed
トランザクションをロールバックします。 | Rollback
Databaseオブジェクトで要求した実行待ち，及び実行中の非同期処理がすべて終了するまで待ちます。 | WaitForDataSource

＜この節の構成＞

DBRDatabaseコンストラクタ

Closeメソッド

Commitメソッド

Connectメソッド

ExecuteDirectメソッド

GetArrayDataFactoryメソッド

GetErrorStatusメソッド

InWaitForDataSourceメソッド

IsClosedメソッド

Rollbackメソッド

WaitForDataSourceメソッド

DBRDatabaseコンストラクタ

機能

DBRDatabaseクラスのコンストラクタであり,Databaseオブジェクトを生成します。

形式

DBRDatabase (LPCTSTR lpctAbstractName,
            LPCTSTR lpctOptions = NULL,
            UINT16 ui16Timeout = 0);

TPBrokerのOTSインタフェース，又はOpenTP1連携を使ったトランザクション制御の場合

DBRDatabase (UNIT16 ui16DriverType,
            LPCTSTR lpctOptions = NULL,
            UINT16 ui16Timeout = 0);

引数

lpctAbstractName

データベース種別名を指定します。

lpctOptions

DBMSにアクセスするときに，C++クラスライブラリを使ったトランザクション制御にするのか，TPBrokerのOTSインタフェース，又はOpenTP1連携を使ったトランザクション制御にするのかを指定します。次のどちらかの値で設定します。

NULLポインタ：C++クラスライブラリを使ったトランザクション制御。NULLポインタ又はNULL終端の文字列へのポインタを設定します。

"XA"：TPBrokerのOTSインタフェース，又はOpenTP1連携を使ったトランザクション制御。OpenTP1連携時，この値以外を指定した場合は，グローバルトランザクションの制御対象とすることができません。

ui16Timeout

現在のバージョンでは値を指定しても意味を持ちません。指定を省略するか，0を指定します。

ui16DriverType

次の列挙型の値を指定します。

DRV_TYPE_ORACLE7：RMとしてORACLEを使用します。

DRV_TYPE_HIRDB：RMとしてHiRDBを使用します。OpenTP1連携時，この値以外を指定した場合，動作は保証しません。

ここに示した以外の値を指定した場合，動作は保証しません。

戻り値

なし

機能詳細

DBRDatabaseクラスのコンストラクタでDatabaseオブジェクトを生成します。

接続するDBMSの種類に対応したオブジェクトを生成するために,コンストラクタの引数に接続先データベース定義ファイルに記述されているデータベース種別名を指定してください。コンストラクタでは引数のチェックをしますが, エラーは，Commit, Rollback, 又はConnectメソッドを呼び出したときに，それぞれのメソッドでDB_ERROR_OCCURRED_IN_CONSTRUCTORのエラーがスローされます。

データベースにアクセスする際にトランザクション制御を，C++クラスライブラリ，又はTPBrokerのOTSインタフェースのどちらで行うかも指定します。

実際にデータベースに接続するためには，Databaseオブジェクトを生成した後，Connectメソッドを呼び出してください。その際，Connectメソッドの引数でデータベース名を指定します。接続先データベース定義ファイルの詳細については，「2.1　データベースへの接続と切断」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しました。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

指定した引数が誤っています。

DB_ERROR_NOT_SUPPORTED

サポートしていないDBMSを指定しました。

DB_ERROR_CANNOT_BE_NULL

lpctAbstractNameにNULLが指定されています。

DB_ERROR_DBDEFINITIONNAME_LENGTH_IS_ZERO

lpctAbstractNameに空文字列が指定されています。

DB_ERROR_CANNOT_USE_XADRIVER

指定した非XAインターフェース用のデータベース種別名は，既にXAインターフェース用として使われています。

DB_ERROR_CANNOT_USE_NONXADRIVER

指定したXAインターフェース用のデータベース種別名は，既に非XAインターフェース用として使われています。

DB_ERROR_DBDEFINITIONNAME_IS_UNAVAILABLE_IN_XA

lpctAbstractNameにデータベース種別名が指定されていますが，lpctOptionsに"XA"が指定されています。

Closeメソッド

機能

データベースとの接続を切り離します。

形式

void Close(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

データベースを切断します。トランザクションが完了していないコネクションの場合には，ロールバック後，データベースとの接続を切り離します。接続していないときは何もしません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。「8.2　C++クラスライブラリのエラー情報」を参照してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。「8.2　C++クラスライブラリのエラー情報」を参照してください。

Commitメソッド

機能

トランザクションをコミットします。

形式

void Commit(void) throw DBSQLCA

引数

なし

機能詳細

トランザクションをコミットします。

コミットするDatabaseオブジェクトに非同期実行時，実行中，又は実行待ちのステートメントがある場合はコミットできません。コミットする前に，InWaitForDataSourceメソッドを呼び出して，非同期実行中の処理がないことを確認してください。

コミットが成功すると，その時点から次のトランザクションが開始されます。

戻り値

なし

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_IN_TRANSACTION

トランザクションが開始されていません。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中ステートメントがあります。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_NOT_CONNECTED

データベースに接続されていません。

DB_ERROR_OCCURRED_IN_CONSTRUCTOR

コンストラクタでエラーが発生しました。エラーの内容は，GetErrorStatusメソッドでDBSQLCAオブジェクトを取得して参照してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

Connectメソッド

機能

接続先のデータベース名やユーザID，パスワードなどを指定して，データベースに接続します。

また，接続に成功すると，トランザクションを開始します。

形式

void Connect (LPCTSTR lpctUID，
             LPCTSTR lpctPWD，
             LPCTSTR lpctDBN，
             LPCTSTR lpctOPT = NULL，
             LPCTSTR lpctAbstractName，
             UINT16 swWait = LOCK_OPT_NOWAIT，
             UINT16 swTimeout = 0，
             UINT16 swSync = STMT_SYNC)

引数

lpctUID

接続先データベースのユーザIDを指定します。

NULLを指定した場合，接続先データベース定義ファイルに指定されたユーザIDを利用します。

SQL/K，又はXDM/SDの場合，Database Connection Serverの認証属性の設定によっては，不正な値を設定してもデータベースに接続できるので注意してください。認証属性の詳細については，マニュアル「Database Connection Server」を参照してください。

TPBrokerのOTSインタフェース，又はOpenTP1連携を使ったトランザクション制御の場合は省略できません。

lpctPWD

接続先データベースのパスワードを指定します。

NULLを指定した場合，接続先データベース定義ファイルに指定されたパスワードを利用します。SQL Anywhere，Adaptive Server Anywhereの場合は，ODBCのデータソース中でパスワードを指定している場合は，そのパスワードを利用できます。

SQL/K，又はXDM/SDの場合，Database Connection Serverの認証属性の設定によっては，不正な値を設定してもデータベースに接続できるので注意してください。認証属性の詳細については，マニュアル「Database Connection Server」を参照してください。

TPBrokerのOTSインタフェース，又はOpenTP1連携を使ったトランザクション制御の場合は省略できません。

lpctDBN

C++クラスライブラリを使ったトランザクション制御の場合
通常はNULLを指定します。
データベースによっては，lpctDBNに接続先情報を指定できます。詳しい内容については，このメソッドの機能詳細を参照してください。

TPBrokerのOTSインタフェースを使ったトランザクション制御の場合
ORACLE使用時は，xa_open文字列のDBフィールドで指定するデータベース名を指定します。
HiRDB使用時は，NULLを指定します。

OpenTP1連携を使ったトランザクション制御の場合
NULLを指定します。

lpctOPT

C++クラスライブラリを使ったトランザクション制御の場合
通常はNULLを指定します。データベースによっては，lpctDBNに接続先情報を指定できます。詳しい内容については，このメソッドの機能詳細を参照してください。

TPBrokerのOTSインタフェースを使ったトランザクション制御の場合
ORACLE使用時は，NULLを指定します。
HiRDB使用時は，"DABENVGRP=xxxx"という形式で，TMにHiRDBを登録する際に指定した環境変数グループ識別子を指定します。このとき，PDHOST，PDNAMEPORTは指定しないでください。

OpenTP1連携を使ったトランザクション制御の場合
OpenTP1連携の場合，OpenTP1に一つのHiRDBしか登録されていない場合は，この引数は省略できます。OpenTP1に複数のHiRDBが登録されている場合は，環境変数グループ識別子を指定しないとエラーになります。環境変数グループ識別子の詳細についてはHiRDBのマニュアルを参照してください。

XDM/SDの場合
lpctAbstractNameにNULLを指定して，lpctOPTで次に示す形式で接続先を指定します。

SDNODE=xxxxx;DBHOST=xxxxx;SNDBUFSZ=xxxxx;RCVBUFSZ=xxxxx

lpctAbstractName

C++クラスライブラリを使ったトランザクション制御の場合
接続先データベース定義ファイル中の接続するデータベース名を指定します。

TPBrokerのOTSインタフェース，又はOpenTP1連携を使ったトランザクション制御の場合
NULLを指定します。

swWait

検索対象のレコードがほかのトランザクションによってロックされている場合の動作を指定します。ここでの指定が，開始するトランザクションでのデフォルト値になります。DBRResultSetクラスのExecuteメソッドの実行時にも指定できます。

SQL/Kの場合は，どの値を指定しても，ロックが解除されるまで待ち状態になります。

XDM/SDの場合は，どの値を指定しても，ロックが解除されるまで待たないで，すぐにエラーを返します。

LOCK_OPT_NOWAIT，又は LOCK_OPT_WITH_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。HiRDB又はXDM/RDの場合は同時にロールバックを実行します。それ以外のDBMSの場合は，ロールバックは実行しません。

LOCK_OPT_WITHOUT_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。ロールバックは実行しません。
ただし，現在のバージョンでは，XDM/RDではロールバックを実行します。また，HiRDBのDELETE,INSERT,UPDATE文では，このオプションは無効で，LOCK_OPT_WAITと同じ動作になります。

LOCK_OPT_WAIT
ロックが解除されるまで待ちます。

swTimeout

現在のバージョンでは値を指定しても意味を持ちません。指定を省略する又は0を指定します。

swSync

コネクションごとに，データベースアクセス（SQL文）を同期処理，又は非同期処理のどちらで実行するかを指定します。

STMT_SYNC：SQL文を同期処理で実行します。

STMT_ASYNC：SQL文を非同期処理で実行します。

STMT_ASYNCを指定した場合，実行されるSQL文は，子スレッドで処理されます。

TPBrokerのOTSインタフェースでトランザクションを制御する場合
非同期処理のSTMT_ASYNCは指定できません。

OpenTP1連携を使ったトランザクション制御の場合
省略するか，必ずSTMT_SYNCを指定します。ただし，グローバルトランザクションの制御対象とする場合，非同期処理はできません。

戻り値

なし

機能詳細

接続するデータベースは，Databaseオブジェクトの生成時に指定したデータベース種別名と，このメソッドで指定するデータベース名によって決まります。

このメソッドは，非同期実行可能メソッドです。

接続先データベース定義ファイルの定義内容を使用しないで接続する場合の補足事項

データベースとの接続には，接続先データベース定義ファイルの使用をお勧めしますが，もし接続先データベース定義ファイル中の定義内容を使用しない場合には，引数lpctAbstractName で NULL を指定し，使用するDBMSごとに次の引数の指定が必要です。

ただし，Database Connection Server 経由で接続するデータベース，SQL Server， 及び Adaptive Server Anywhereを使用する場合は，lpctAbstractNameにNULLを指定できません。lpctAbstractNameにNULLを指定しなくても，次の引数に値を指定すれば，接続先データベース定義ファイルの定義内容ではなく，引数に指定した内容で接続します。

ORACLEの場合
引数lpctDBNに，SQL*NET経由で接続するORACLEのリスナー名称を指定します。リモートアクセスをしない場合はNULLを指定します。

HiRDBの場合
引数lpctOPTに，" PDHOST = XXXX ; PDNAMEPORT = XXXX "という形式で接続先を指定します。環境変数にPDHOST，PDNAMEPORTが設定されていれば省略できます。

SQL Anywhere，Adaptive Server Anywhere，SQL Server の場合
引数lpctDBNにODBCのデータソース名を指定します。引数lpctOPTでデータソース名が定義されている場合は，この引数は省略できます。
引数lpctOPTにSQL Anywhere,Adaptive Server Anywhere,SQL Serverのデータベース接続パラメタ（ConnectionName以外）を指定できます。データベース接続パラメタでユーザIDやパスワードを指定した場合，Connectメソッドの引数に指定したユーザIDやパスワードよりも優先されます。

RDA Link for Gateway経由のXDM/RDの場合
引数lpctOPTに，RDノード名を指定します。

Database Connection Server経由のXDM/RDの場合
引数lpctOPTに，"RDNODE=xxxxx;DBHOST=xxxxx;SNDBUFSZ=xxxxx;RCVBUFSZ= xxxx" という形式で接続先を指定します。

Database Connection Server経由のXDM/SDの場合
lpctOPTで次に示す形式で接続先を指定します。
"SDNODE=xxxxx;DBHOST=xxxxx;SNDBUFSZ=xxxxx;RCVBUFSZ=xxxxx"

Database Connection Server経由のSQL/Kの場合
lpctOPTで次に示す形式で接続先を指定します。
"DBID=xxx1;DBHOST=xxx2;SNDBUFSZ=xxx3;RCVBUFSZ=xxx4"
xxx1：分散定義名を指定します。
xxx2：コネクションマルチ名を指定します。
xxx3：通信バッファサイズを指定します。この指定は省略できます。
xxx4：受信バッファサイズを調整します。この指定は省略できます。
各項目の詳細については，マニュアル「DABroker」を参照してください。

TPBrokerのOTSインタフェースを使ったトランザクション制御の場合
引数lpctAbstractNameにだけNULLを指定します。

HiRDBクライアント環境定義の環境変数指定

HiRDBの場合，HiRDBクライアント環境定義の環境変数をlpctOPTに指定できます。詳細は，「5.4　DBDriver クラスの詳細」のConnectメソッドを参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_CONNECTSTRING_INVALID

接続文字列の形式が間違っています。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_OCCURRED_IN_CONSTRUCTOR

コンストラクタでエラーが発生しました。エラーの内容はGetErrorStatusメソッドでDBSQLCAオブジェクトを取得して参照してください。

DB_ERROR_CANNOT_USE_ABSTRACTNAME

DBRDatabaseオブジェクトにデータベース種別名が指定されていないので，データベース名を指定できません。

DB_ERROR_NOT_FOUND_DBDEFINITION

データベース種別名，又はデータベース名が見つかりません。

DB_ERROR_CONNECTDBDEFINITIONNAME_LENGTH_IS_ZERO

データベース名の長さが0です。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

DB_ERROR_NOT_EXECUTE_ASYNC

XAインターフェース使用時に非同期処理は指定できません。

ExecuteDirectメソッド

機能

検索結果を必要としない，SQL文を実行します。

形式

void ExecuteDirect(LPCTSTR lpctStatement) throw DBSQLCA

引数

lpctStatement

実行するSQL文を指定します。

機能詳細

引数lpctStatementで指定されたSQL文を実行します。

このメソッドでは，?パラメタを使ったSQL文を指定できません。また，SELECT文を実行しても，検索結果は取得できません。

SQLの実行方法については「2.5 簡易版クラスのデータベースアクセス」を参照してください。

非同期に６４個までのSQL文が実行できます。

このメソッドは，非同期実行可能なメソッドです。

戻り値

なし

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_NOT_CONNECTED

データベースに接続していません。

DB_ERROR_CANNOT_BE_NULL

引数にNULLを指定しました。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。「8.2　C++クラスライブラリのエラー情報」を参照してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。「8.2　C++クラスライブラリのエラー情報」を参照してください。

DB_ERROR_TIMEOUT

タイムアウトが発生しました。

GetArrayDataFactoryメソッド

機能

繰り返し列を扱うために，DBRArrayDataFactoryオブジェクトを生成し，ポインタを取得します。

形式

DBRArrayDataFactory * GetArrayDataFactory(void) throw DBSQLCA

引数

なし

戻り値

データ型：DBRArrayDataFactory *

DBRArrayDataFactoryオブジェクトのポインタ。

機能詳細

GetArrayDataFactoryメソッドは，DBRArrayDataオブジェクトを管理するためのDBRArrayDataFactoryオブジェクトを生成し，ポインタを取得するメソッドです。

このDBRArrayDataFactoryオブジェクトの生成後，CreateArrayDataメソッドでDBRArrayDataオブジェクトを生成します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_DRIVER_NOT_LOADED

データベースとの接続時に非同期処理を設定していますが，接続に失敗し，また，接続するDBMS種別も不明です。

GetErrorStatusメソッド

機能

SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。

形式

DBSQLCA *GetErrorStatus(void)

引数

なし

機能詳細

DBSQLCAオブジェクトへのポインタを取得します。

非同期処理のときは，エラーが発生しても直にエラーを取得できません。このため，ユーザは任意の時点でエラーを確認する必要があります。

非同期実行時にエラーが発生した場合，DBSQLCAオブジェクトにエラー情報が設定されます。

DBSQLCAオブジェクトでは，非同期実行中に発生したエラー情報を最大100回分保存できます。エラー情報は，新しいエラー情報から100回分保存されるため，エラー情報を確認したあとはDBSQLCAクラスのDeleteメソッドを呼び出して，不要なエラー情報をクリアしておいてください。

同期実行時もDBSQLCAオブジェクトへのポインタを取得しますが，コンストラクタでエラーが発生しなかった場合，取得したオブジェクトにエラーは設定されません。

戻り値

データ型：DBSQLCA*

DBSQLCAオブジェクトへのポインタ。

発生する例外

なし

InWaitForDataSourceメソッド

機能

Databaseオブジェクトで実行待ち，又は実行中のステートメントがあるかどうかを確認します。同じDatabaseオブジェクトで実行しているすべてのステートメントが対象になります。

形式

BOOLEAN  InWaitForDataSource(void)

引数

なし

戻り値

データ型：BOOLEAN

TRUE：非同期処理の継続中です。

FALSE：非同期処理は終了しています。

機能詳細

子スレッドで実行待ち又は実行中のSQL文があればTRUEを，実行待ち又は実行中のSQL文がなければFALSEを返します。

厳密には，SQLを実行する子スレッドがあればTRUEを，なければFALSEを返します。同期実行接続時には常にFALSEを返します。

なお，DBRResultSetクラスのInExecuteメソッドと，InWaitForDataSourceメソッドの違いは，前者がInExecuteメソッドを実行したオブジェクトの非同期処理が実行中かどうかを確認するのに対して，後者はDatabaseオブジェクトで生成したすべてのオブジェクトの非同期処理が実行中かどうかを確認できます（対象となるコネクション内のすべての非同期処理が終わるのを確認できます）。

発生する例外

なし

IsClosedメソッド

機能

データベースが切断されているかどうかを確認します。

形式

BOOLEAN  IsClosed(void)

引数

なし

戻り値

データ型：BOOLEAN

TRUE：データベースと接続されていません。

FALSE：データベースと接続しています。

機能詳細

なし

発生する例外

なし

Rollbackメソッド

機能

トランザクションをロールバックします。

形式

void Rollback(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

トランザクションをロールバックします。

対象とするコネクションで非同期処理を実行している場合，実行中又は実行待ちの処理があるとロールバックできません。ロールバックする前に，InWaitForDataSourceメソッドを呼び出して，非同期実行中の処理がないことを確認してください。

ロールバックが成功すると，その時点から次のトランザクションが開始されます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中ステートメントがあります。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_NOT_CONNECTED

データベースに接続していません。

DB_ERROR_OCCURRED_IN_CONSTRUCTOR

コンストラクタでエラーが発生しました。エラーの内容は，GetErrorStatusメソッドでDBSQLCAオブジェクトを取得して参照してください。

DB_ERROR_TIMEOUT

タイムアウトが発生しました。

WaitForDataSourceメソッド

機能

Databeseオブジェクトで要求した実行待ち，及び実行中の非同期処理がすべて終了するまで待ちます。非同期処理中の同期を取りたい場合に利用できます。

形式

BOOLEAN WaitForDataSource(UINT32 swWaitTime = DBR_INFINITE)

引数

dwWaitTime

非同期処理の終了を待つ最大時間（単位はミリ秒），又はDBR_INFINITEを指定します。

指定した時間内に非同期処理が終了した場合，又は非同期実行中のSQLがない場合は，TRUEが返ります。指定した値を経過しても非同期処理が終了しない場合，FALSEが返ります。

DBR_INFINITEを指定した場合はタイムアウト時間を設定しません。非同期処理がすべて終了するまで待ち続けます。

戻り値

データ型：BOOLEAN

TRUE：すべての非同期処理が終了しました。

FALSE：タイムアウト時間が経過しました。

機能詳細

非同期処理の実行待ち及び実行中のSQLが，終了するのを待ちます。

なお，DBRResultSetクラスのWaitForDataSourceメソッドと，このクラスのWaitForDataSourceメソッドの違いは，前者がWaitForDataSourceメソッドを実行したオブジェクトの非同期処理の終了を待つのに対して，後者はDatabaseオブジェクトで生成したすべてのオブジェクトの非同期処理の終了を待ちます（対象となるコネクション内のすべての非同期処理が終わるのを待ちます）。

同期実行時はすぐにTRUEを返します。

発生する例外

なし

4.4　DBRResultSetクラスの詳細

DBRResultSetクラスが提供しているコンストラクタ,メソッドと仮想関数の詳細について説明します。それらの機能の概要を次に示します。メソッドは,次の六つの機能に分類します。

レコードの検索

Resultsetの操作

カーソルの操作

検索したレコードの参照

検索したレコードの更新と削除

非同期メソッドの終了確認

コンストラクタ

機 能 | コンストラクタ名
DatabaseオブジェクトからResultSetオブジェクトを生成します。 | DBRResultSet

レコードの検索に関するメソッド

機 能 | メソッド名
データベースにSQL実行の情報を通知します。 | Execute
SetParamメソッドで指定したパラメタの値を取得します。 | GetParam
パラメタの数を取得します。 | GetParamCount
パラメタの値がNULLかどうか確認します。 | IsParamNull
検索結果をResultSetに読込みます。 | Open
先頭のレコードから再読み込みをします。 | Refresh
?パラメタに値を設定します。 | SetParam
パラメタにNULLを設定します。 | SetParamNull
?パラメタの属性を設定します。 | SetParamType

ResultSetの操作に関するメソッド

機 能 | メソッド名
ResultSetオブジェクトを削除します。 | Close
SetMaxRowsメソッドで指定したレコード数を取得します。 | GetMaxRows
ResultSetに読込まれたレコード数を取得します。 | GetRowCount
ResultSetに読込むレコード数の最大値を指定します。 | SetMaxRows

カーソルの操作に関するメソッド

機 能 | メソッド名
カーソルをResultSetの先頭からn番目のレコードに移動します。 | Absolute
カーソルをResultSetの最後のレコードへ移動します。 | Bottom
検索したすべてのレコードの先頭から数えた，カレントレコードの位置を取得します。 | GetCurrent
ResultSetの先頭レコードから数えた，カレントレコードの位置を取得します。 | GetCurrentOfResultSet
カーソルの位置が，ResultSetのレコードの最後を超えたかどうかを確認します。 | IsEOF
カーソルを次のレコードへ移動します。 | Next
カーソルを次のResultSetの先頭へ移動します。 | PageNext
カーソルを前のレコードへ移動します。 | Previous
カーソルを現在のレコードの位置からn個分移動します。 | Relative
カーソルをResultSetの先頭のレコードへ移動します。 | Top

検索したレコードの参照に関するメソッド

機 能 | メソッド名
繰り返し列の場合に要素の数を取得します。 | GetArraySize
カレントレコードのフィールド値を取得します。 | GetField
検索結果のフィールドの数を取得します。 | GetFieldCount
フィールドのデータ型をC++のタイプで取得します。 | GetFieldCType
フィールドのデータ型をDBMSのタイプで取得します。 | GetFieldDBType
フィールド名称を取得します。 | GetFieldName
フィールドの精度（桁数）を取得します。 | GetFieldPrecision
フィールドの小数点以下の桁数を取得します。 | GetFieldScale
フィールドのデータ型を取得します。 | GetFieldType
フィールドの値がNULLかどうかを確認します。 | IsFieldNull

検索したレコードの更新と削除に関するメソッド

機 能 | メソッド名
カレントレコードを削除します。 | Delete
カレントレコードを更新・削除するための準備をします。 | Edit
指定されたフィールドにデータを設定します。 | SetField
指定されたフィールドにNULLを設定します。 | SetFieldNull
フィールドの更新結果をデータベースへ通知します。 | Update

非同期実行に関するメソッド

機 能 | メソッド名
SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトのポインタを取得します。 | GetErrorStatus
DBRResultSetオブジェクトに非同期実行中（又は実行待ち）のステートメントがあるかどうかを確認します。 | InExecute
DBRResultSetオブジェクトで要求した実行待ち，及び実行中の非同期処理のメソッドが終了するまで待ちます。 | WaitForDataSource

仮想関数

機 能 | 仮想関数名
Openメソッドを呼び出した場合はレコードが最初に読み込まれる前に，Refreshメソッドを呼び出した場合はレコードが読み込まれる前に呼び出される仮想関数です。 | OnBeforeRefresh
カーソルがResultSetの最後のレコードを超えたときに呼び出される仮想関数です。 | OnEndRecord
カーソルが移動したときに呼び出される仮想関数です。 | OnMoveRecord

＜この節の構成＞

DBRResultSetコンストラクタ

Absoluteメソッド

Bottomメソッド

Closeメソッド

Deleteメソッド

Editメソッド

Executeメソッド

GetArraySizeメソッド

GetCurrentメソッド

GetCurrentOfResultSetメソッド

GetErrorStatusメソッド

GetFieldメソッド

GetFieldCountメソッド

GetFieldCTypeメソッド

GetFieldDBTypeメソッド

GetFieldNameメソッド

GetFieldPrecisionメソッド

GetFieldScaleメソッド

GetFieldTypeメソッド

GetMaxRowsメソッド

GetParamメソッド

GetParamCountメソッド

GetRowCountメソッド

InExecuteメソッド

IsEOFメソッド

IsFieldNullメソッド

IsParamNullメソッド

Nextメソッド

OnBeforeRefreshメソッド

OnEndRecordメソッド

OnMoveRecordメソッド

Openメソッド

PageNextメソッド

Previousメソッド

Refreshメソッド

Relativeメソッド

SetFieldメソッド

SetFieldNullメソッド

SetMaxRowsメソッド

SetParamメソッド

SetParamNullメソッド

SetParamTypeメソッド

Topメソッド

Updateメソッド

WaitForDataSourceメソッド

DBRResultSetコンストラクタ

機能

DBRResultSetクラスのコンストラクタであり, DatabaseオブジェクトからResultSetオブジェクトを生成します。

形式

DBRResultSet(DBRDatabase *pDatabase)

引数

pdatabase

Databaseオブジェクトのポインタを指定します。

戻り値

なし

機能詳細

DBRResultSetクラスのコンストラクタでResultSetオブジェクトを生成します。

ResultSetオブジェクトを生成後，Executeメソッドでレコードの検索条件を指定し,Openメソッドで検索レコードをResultSetに読込んでください。

一つのDatabaseオブジェクトに対してResultSetオブジェクトは64まで指定できます。既に64個のResultSetオブジェクトで使用されている場合,Executeメソッド実行時に，DB_ERROR_ NOT_RELATIONSHIP_TO_DATABASEのエラーがスローされます。

発生する例外

なし

Absoluteメソッド

機能

カーソルをResultSetの先頭からn番目のレコードに移動します。

形式

void Absolute(UINT32 dwCount) throw DBSQLCA

引数

dwCount

カーソルを検索した総レコードの何番目に位置付けるかを指定します。

ResultSetの範囲を超えるような番号は指定できません。

戻り値

なし

機能詳細

カーソルをResultSetの先頭から引数dwCountで指定した番号のレコードに移動します。

カーソルが検索したレコードの最後を超えている場合（IsEOFメソッドでTRUEが返る場合），このメソッドは呼び出せません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_OUT_OF_RESULTSET

ResultSetの範囲を超えるような呼び出しです。

Bottomメソッド

機能

カーソルをResultSetの最後のレコードへ移動します。

形式

void Bottom(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

カーソルをResultSetの最後のレコードへ移します。

カーソルが検索したレコードの最後を超えている場合（IsEOFメソッドでTRUEが返る場合），このメソッドは呼び出せません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_OUT_OF_RESULTSET

ResultSetの範囲を超えるような呼び出しです。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

Closeメソッド

機能

ResultSetを削除します。

形式

void Close(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

なし

発生する例外

DBSQLCA(RetCode)

DB_ERROR_BEFORE_EXECUTE

EXECUTEメソッドが実行されていません。

Deleteメソッド

機能

カレントレコードを削除します。

形式

void Delete(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

カレントレコードを削除します。削除する前にEditメソッドを呼出して削除の準備をしてください。削除した後でCommitメソッドを呼び出してデータベースの更新を確定する必要があります。

このメソッドは，非同期実行可能なメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_NOT_IN_EDIT

Editメソッドが実行されていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行中です。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

Editメソッド

機能

カレントレコードを更新・削除するための準備をします。

形式

void Edit(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

カレントレコードを更新又は削除する準備をします。

実際にカレントレコードを更新するためには，Editメソッドを呼び出した後，SetFieldメソッドを呼び出してフィールドの値を更新します。必要なデータを更新した後にUpdateメソッドを呼び出すと，カレントレコードの更新情報はデータベースへ送信されます。カレントレコードを削除するためには, Deleteメソッドを呼び出します。

なお，レコードを更新又は削除した後でCommitメソッドを発行してデータベースの更新を確定する必要があります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_CURRENT_RECORD_DELETED

カレントレコードが削除されています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_CANNOT_EDIT_LAST_RECORD

カレントレコードがありません(検索結果の最後がカレントレコードの場合)。

DB_ERROR_CANT_UPDATE

ResultSetが読み込み専用です。

Executeメソッド

機能

引数で指定したSELECT文とResultSet生成のための情報をデータベースに通知し，検索結果をResultSetに取得する準備をします。

形式

void Execute (LPCTSTR lpctStatement,
             UINT16 swWait = LOCK_OPT_DEFAULT,
             UINT16 swType = TYPE_EXCLUSIVE|BUFFER_TYPE_SINGLE,
             DBR_BLOB_TYPE nBLOBType = TYPE_BLOB_MEMORY,
             LPCTSTR lpctBLOBFileName = NULL)    throw DBSQLCA

引数

lpctStatement

SQL文を指定します。SELECT文だけが指定できます。?パラメタを使用したSELECT文も指定できます。

SELECT文以外のSQLを実行する場合は，DBRDatabaseオブジェクトのExecuteDirectメソッドを使用してください。

swWait

実行するSQL単位に，検索対象のレコードがほかのトランザクションによってロックされていた場合の動作を指定します。

SQL/Kの場合は，どの値を指定しても，ロックが解除されるまで待ち状態になります。

XDM/SDの場合は，どの値を指定しても，ロックが解除されるまで待たないで，すぐにエラーを返します。

次の値のうち，どれか一つを指定します。

LOCK_OPT_DEFAULT
親オブジェクトのDBRDatabaseオブジェクトの設定を引き継ぎます。

LOCK_OPT_NOWAIT，又は LOCK_OPT_WITH_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。HiRDB又はXDM/RDの場合は同時にロールバックを実行します。それ以外のDBMSの場合は，ロールバックは実行しません。

LOCK_OPT_WITHOUT_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。ロールバックは実行しません。
ただし，現在のバージョンでは，XDM/RDではロールバックを実行します。また，HiRDBのDELETE,INSERT,UPDATE文では，このオプションは無効で，LOCK_OPY_WAITと同じ動作になります。

LOCK_OPT_WAIT
ロックが解除されるまで待ちます。

swType

次の三つの値を指定します。

検索したレコードに対するロック方法

検索時に使用するバッファ数

VARCHARデータをDBR_BINARY型で取得した場合のLengthメンバ，RealLengthメンバの意味

指定する値は，上記三つの値の論理和になります。

このメソッドを実行しなかった場合の動作は，TYPE_EXCLUSIVE | BUFFER_TYPE_SINGLE | VARCHAR_LENGTH_DEFを指定した場合と同じになります。

検索したレコードに対するロック方法

次に示すTYPE_EXCLUSIVE，TYPE_NONE，TYPE_WAIT，TYPE_NOWAIT，TYPE_SHAREDのどれかの値で，検索したレコードに対するロック方法を指定します。

TYPE_EXCLUSIVE
検索したレコードをDBRResultSetオブジェクトのUpdate，Deleteメソッドで，更新，削除をする場合は，このオプションを指定します。検索したレコードに排他ロックが掛かり，他のトランザクションからの参照・更新を制限できます。実際に排他ロックが掛かるのは，Openメソッドを実行した時点からです。
このオプションを指定した場合，ResultSetに検索できるレコードは１レコードだけで，SetMaxRowsで指定したレコード数は無視されます。また，検索条件に一致する次のレコードをアクセスするには，Nextメソッドを使用します。TYPE_EXCLUSIVEで取得するレコードの場合，カーソル制御のメソッドとしてはNextメソッドだけが指定できます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

ORACLE：FOR UPDATE

SQL Anywhere,Adaptive Server Anywhere：オプション文字列は付加しません。

HiRDB：FOR UPDATE（"WITH EXCLUSIVE LOCK"が仮定されます）

XDM/RD：FOR UPDATE（"WITH EXCLUSIVE LOCK"が仮定されます）

SQL Server：(テーブル名の後に)UPDLOCK

SQL/K：FOR UPDATE
詳細については，マニュアル「SQL/K」を参照してください。

XDM/SD：LOCK SU

TYPE_NONE
参照専用でResultSetに検索結果を読み込みます。
DBMS種別によって, 検索するレコードに対して参照ロックが掛かかります。このオプションを指定した場合，一度に複数レコードをResultSetに読み込めます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

ORACLE：付加しません。

SQL Anywhere,Adaptive Server Anywhere：付加しません。

HiRDB：付加しません。

XDM/RD：付加しません。

SQL Server：付加しません。

SQL/K：付加しません。

XDM/SD：付加しません(SDEXCLUSIVE値が仮定されます)。
SDEXCLUSIVE値の詳細については，マニュアル「Database Connection Server」のコントロール空間起動制御文を参照してください。

TYPE_WAIT(HiRDB，XDM/RD，SQL Server，SQL/K，XDM/SDの場合だけ有効です)
参照専用でResultSetに検索結果を読み込みます。
検索したレコードに対して参照ロックを掛けますが，見終わった行から排他制御を解除します。このため，DABroker for C++では，ResultSetにレコードを読み込んだ時点，つまり，Openメソッド，又はPageNextメソッドが完了した時点で，ロックが解除されています。
このオプションを指定した場合，一度に複数レコードをResultSetに読み込めます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

HiRDB：WITHOUT LOCK WAIT

XDM/RD：WITHOUT LOCK WAIT

SQL Server：(テーブル名の後に)HOLDLOCK

SQL/K：付加しません。

XDM/SD：LOCK SR

TYPE_NOWAIT(HiRDB，XDM/RD，SQL Server，SQL/K，XDM/SDの場合だけ有効です)
参照専用でResultSetに検索結果を求めます。
該当するレコードがほかのトランザクションで更新中だったり，TYPE_EXCLUSIVEで検索している場合でも読み込めます。排他制御を全くしません。
このオプションを指定した場合，一度に複数レコードをResultSetに読み込めます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

HiRDB：WITHOUT LOCK NOWAIT

XDM/RD：WITHOUT LOCK NOWAIT

SQL Server：(テーブル名の後に)NOLOCK

SQL/K：付加しません。

XDM/SD：LOCK NR

TYPE_SHARED(HiRDB，XDM/RD，SQL/K，XDM/SDの場合だけ有効です)
検索するレコードに共有ロックを掛けます。共有ロックの掛かったレコードは，ほかのトランザクションから参照できますが，更新はできません。

HiRDB：WITH SHARE LOCK

XDM/RD：WITH SHARE LOCK

SQL/K：付加しません。

XDM/SD：LOCK SR

検索時に使用するバッファ数

次に示すBUFFER_TYPE_SINGLE，又はBUFFER_TYPE_DOUBLEのどちらかの値で，検索時に使用するバッファ数を指定します。指定を省略した場合は，BUFFER_TYPE_SINGLEが仮定されます。なお，バッファの利用方法については，「3.3.3 検索性能の向上策」を参照してください。

BUFFER_TYPE_SINGLE
検索結果を保持するバッファを一つだけ使います。

BUFFER_TYPE_DOUBLE
検索結果を保持するバッファを二つ使います。

VARCHARデータをDBR_BINARY型で取得したときのLengthメンバ，RealLengthメンバの意味

次に示す値のどれか一つを指定します。

VARCHAR_LENGTH_DEF

GetFieldメソッドの形式２を使用した場合，又は形式３を使用してもデータの切り捨てが発生しなかった場合
Length：カラムの定義長
RealLength：0

GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合
Length：切り捨てたデータ長
RealLength：カラムの定義長

VARCHAR_LENGTH_REAL

GetFieldメソッドの形式2を使用した場合，又は形式3を使用してもデータの切り捨てが発生しなかった場合
Length：実際のデータ長
RealLength：0

GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合
Length：切り捨てたデータ長
RealLength：実際のデータ長

nBLOBType

BLOB型データの取得方法として，次のどちらかを指定します。

TYPE_BLOB_MEMORY
メモリ上に一括して取得します。
ResultSetのレコード数が1の場合，BLOB型データをすべて取得します。
ResultSetのレコード数が複数の場合，先頭から32Kバイトまでを取得します。

TYPE_BLOB_FILE
ファイルを経由して取得します。
引数lpctBLOBFileNameに指定された名称が，BLOB型データを格納するファイル名称のプレフィックスとして使用されます。
なお，引数swTypeでBUFFER_TYPE_DOUBLEを指定している場合，検索の途中で終了しても先読みしているResultSet分のファイルは作成されます。

lpctBLOBFileName

BLOB型データを格納するファイル名称のプレフィックスを指定します。

引数nBLOBTypeでTYPE_BLOB_FILEを指定した場合，BLOB型データを格納するファイルのプレフィックスには，この引数で指定した名称が使われます。TYPE_BLOB_FILE以外の値を指定した場合は，この引数での指定は無視されます。

BLOB型データを格納したファイル名称は，「プレフィックス+レコード番号+フィールド番号」で表されます。NULLが指定された場合，DABrokerが自動的に名称を生成します。

戻り値

なし

機能詳細

検索のためのSELECT文と，検索レコードに対するロック方法，検索時にバッファを幾つ使うか，及びBLOB型データの取得方法についてデータベースに通知し，検索結果をResultSetに取得する準備をします。

ファイル上でBLOB型データを扱う場合の制限事項

データの格納されているファイルは，DABrokerが終了しても削除されません。アプリケーション自身で削除してください。

作成されたファイルのアクセス権限は，アプリケーションの実行ユーザ及びデフォルトの権限に依存します。例えば，HP-UX上で"user1"が実行しているアプリケーションで，デフォルトumaskが0666の場合，取得したBLOB型データが格納されるファイルも，"user1"の所有する0666のアクセス権限が付与されたファイルとして生成されます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_NOT_CONNECTED

データベースに接続されていません。

DB_ERROR_NOT_SELECT_STATEMENT

指定されたSQL文はSELECT文ではありません。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_DRV_ERROR_PHOLDER_AND_QP

プレースホルダと？パラメタが混在するSQL文の指定はできません。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

DB_ERROR_NOT_RELATIONSHIP_TO_DBRDATABASE

DBRResultSetコンストラクタで指定されたDBRDatabaseオブジェクトと関連付けることができませんでした。一つのDBRDatabaseオブジェクトに対して関連付けられるオブジェクトは64個までです。

DB_DRV_ERROR_INVALID_SQL_EXCLUSIVE

WITH句で始まるSQL文の指定時には，DBResultSetオブジェクトの生成オプションをTYPE_EXCLUSIVE以外に設定してください。

DB_DRV_ERROR_STAT_COUNT

ステートメントの個数が上限値を超えました。

GetArraySizeメソッド

機能

繰り返し列の定義された要素の数を取得します。

形式

フィールド番号で指定する場合

UINT32 GetArraySize(UINT32 ui32Index) throw DBSQLCA

フィールド名で指定する場合

UINT32 GetArraySize(LPCTSTR lpctFieldName) throw DBSQLCA

引数

ui32Index

フィールドの列番号を，１～フィールド数の範囲の値で指定します。

lpctFieldName

フィールドのフィールド名を指定します。

戻り値

データ型：UINT32

繰り返し列の定義された要素数を返します。

機能詳細

フィールド番号，又はフィールド名によって特定した繰り返し列の，要素数を取得します。

指定したフィールドが繰り返し列でない場合は，0が返ります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

DB_ERROR_NOT_FOUND

インデックス指定の場合は，指定したフィールド番号が１未満の値，又はフィールド数より大きい値を指定しています。フィールド名指定の場合は，指定したフィールド名が間違っています(NULLを除く)。

GetCurrentメソッド

機能

検索したすべてのレコードの先頭から数えた，カレントレコードの位置を取得します。

形式

UINT32 GetCurrent(void) throw DBSQLCA

引数

なし

戻り値

データ型：UINT32

カレントレコードの先頭レコードからの位置を取得します。

機能詳細

検索したすべてのレコードの先頭を1として数えた，カレントレコードの位置を取得します。

レコードの終端（EOF）でGetCurrentメソッドを呼び出すと，検索レコード数+1の値を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

GetCurrentOfResultSetメソッド

機能

ResultSetの先頭レコードから数えた，カレントレコードの位置を取得します。

形式

UINT32 GetCurrentOfResultSet(void) throw DBSQLCA

引数

なし

戻り値

データ型：UINT32

カレントレコードのResultSetの先頭レコードからの位置を取得します。

機能詳細

ResultSetのレコードの先頭を1として数えた，カレントレコードの位置を取得します。

ResultSetが0レコードの場合も1を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

GetErrorStatusメソッド

機能

SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。

形式

DBSQLCA *GetErrorStatus(void)

引数

なし

戻り値

データ型：DBSQLCA*

DBSQLCAオブジェクトへのポインタ。

機能詳細

DBSQLCAオブジェクトへのポインタを取得します。

非同期処理のときは，エラーが発生しても直にエラーを取得できません。このため，ユーザは任意の時点でエラーを確認する必要があります。

非同期実行時にエラーが発生した場合，DBSQLCAオブジェクトにエラー情報が設定されます。

DBSQLCAオブジェクトでは，非同期実行中に発生したエラー情報を最大100回分保存できます。エラー情報は，新しいエラー情報から100回分保存されるため，エラー情報を確認したあとはDBSQLCAクラスのDeleteメソッドを呼び出して，不要なエラー情報をクリアしておいてください。

発生する例外

DB_ERROR_BEFORE_EXECUTE

EXECUTEメソッドが実行されていません。

GetFieldメソッド

機能

カレントレコードのフィールドの値を取得します。

形式１：ユーザ確保領域へコピーする場合

インデクス番号指定

void GetField(UINT32 dwIndex，INT16 * psData)  throw DBSQLCA
void GetField(UINT32 dwIndex，INT32 * plData)  throw DBSQLCA
void GetField(UINT32 dwIndex，UINT16* pswData) throw DBSQLCA
void GetField(UINT32 dwIndex，UINT32* pdwData) throw DBSQLCA
void GetField(UINT32 dwIndex，SINGLE* psfData) throw DBSQLCA
void GetField(UINT32 dwIndex，DOUBLE* pdfData) throw DBSQLCA
void GetField(UINT32 dwIndex，DBR_DATETIME* pdtData)
                                              throw DBSQLCA
void GetField(UINT32 ui32Index，DBRArrayDataConstPtr*
                                    cparData) throw DBSQLCA

フィールド名指定

void GetField(LPCTSTR lpctFieldName，INT16 * psData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，INT32 * plData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，UINT16* pswData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，UINT32* pdwData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，SINGLE* psfData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，DOUBLE* pdfData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，DBR_DATETIME* pdtData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，DBRArrayDataConstPtr*
                                    cparData) throw DBSQLCA

形式２：DABrokerが用意した領域を参照する場合

インデクス番号指定

void GetField(UINT32 dwIndex，LPTSTR* lptData) throw DBSQLCA
void GetField(UINT32 dwIndex，DBR_BINARY* pblobData)
                                              throw DBSQLCA

フィールド名指定

void GetField(LPCTSTR lpctFieldName，LPTSTR* lptData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，DBR_BINARY* pblobData)
                                              throw DBSQLCA

形式３：ユーザ確保領域へコピーする場合

インデクス番号指定

UINT32 GetField(UINT32 dwIndex，LPTSTR lptData，
                               UINT32 dwSize) throw DBSQLCA
UINT32 GetField(UINT32 dwIndex，DBR_BINARY* pblobData，
                               UINT32 dwSize) throw DBSQLCA

フィールド名指定

UINT32 GetField(LPCTSTR lpctFieldName，LPTSTR lptData，
                               UINT32 dwSize) throw DBSQLCA
UINT32 GetField(LPCTSTR lpctFieldName，DBR_BINARY* pblobData，
                               UINT32 dwSize) throw DBSQLCA

引数

dwIndex, ui32Index

1から始まるフィールドの番号を指定します。指定するフィールドの番号は，SQL文中での出現順に割り当てられます。

lpctFieldName

フィールド名を指定します。

なお，SELECT文でフィールド演算や，COUNTなどの関数を使用した場合，フィールド名はデータベースによって決められます。このような場合にフィールド名を調べるためには，GetFieldNameメソッドを呼び出します。取得するフィールド名は，重複することもあります。このため，SELECT文でJOINを指定したときなどに，フィールド名が重複している可能性がある場合や，SELECT文でのフィールド演算などでフィールド名が不定の場合は，フィールドの番号を使用してください。

*xxData（形式１，３の第2引数）

データをコピーする領域のポインタを指定します。

*xxData（形式２の第2引数）

ポインタ変数を指定します。

dwSize

コピー先の領域サイズをバイト数で指定します。

戻り値

データ型：UINT32

コピーした文字列の長さが返ります。フィールドの値を指定された型にキャストして取得します（形式３の場合）。

機能詳細

形式１の処理

フィールド値を，引数に指定されたポインタが指す領域にコピーします。

形式２の処理

DABrokerが確保した領域にフィールド値をコピーし，その先頭アドレスをポインタ変数に設定します。このため，LPTSTR又はDBR_BINARYの変数の確保だけで，フィールド値をコピーする領域を確保する必要はありません。

フィールド値の有効期間
フィールド値は，OpenメソッドやNextメソッドなどで次のResultSet取得時まで，又はResultSetを削除するまで有効です。前のResultSetのフィールド値を残したい場合には，ユーザが確保した領域にデータを取得してください。

形式３の処理

LPTSTR型
引数lptDataの指す領域は，引数dwSizeバイト分確保されている必要があります。

引数dwSizeがデータベースから取得したデータの長さ以下の場合
データベースのデータ型が可変長文字列型の場合，引数dwSize-1分のデータ（最後にはNULL終端文字が入る）がコピーされ，残りのデータは切り捨てられます。
データベースのデータ型が固定長文字列の場合，引数dwSize分のデータ（最後にNULL終端文字が入らない）がコピーされ，残りのデータは切り捨てられます。

引数dwSizeがデータベースから取得したデータの長さよりも大きい場合
文字列はすべてコピーします。固定長文字列の場合，残りの領域にはNULL終端文字が埋められます。

DBR_BINARY型
フィールド値をコピーする領域（LPTSTR型）を確保し，DBR_BINARY型変数（構造体）のDataメンバに設定し，この変数をGetFieldメソッドの引数に指定します。引数dwSizeはこの領域のサイズを指定します。
引数dwSizeがデータベースから取得したデータの長さ以下の場合，引数dwSize分のデータ（最後にNULL終端文字が入らない）がコピーされ，残りのデータは切り捨てられます。引数dwSizeがデータベースから取得したデータの長さより大きい場合，データはすべてコピーされ，残りの領域にはNULL終端文字が埋められます。

データ変換について

データベースのデータ型とGetFieldの引数に指定したデータ型とが異なる場合は，値の変換できるものについては引数で指定したデータ型に変換して返します。

文字列から数値データ型への変換に失敗した場合は0を返します。データ型の変換規則については，「7.1 クラスライブラリで扱うデータ型と変換規則」のGetField，GetParamメソッドでのデータ型変換規則を参照してください。

NULL値の扱い

NULLであるフィールドに対してGetFieldメソッドを呼び出すと，戻される値は意味のない値(0，空文字列，要素がすべて0，空文字列からなる構造体，又は不定値)となります。

このため，NULLが格納されている可能性のあるフィールドでは，IsFieldNullメソッドを呼び出して，NULL値かどうかを確認してください。

DBR_BINARY型で値を取得した場合

各メンバの値は次のようになります。

SetMaxFieldSizeメソッドで指定した長さよりも実データ長が長い場合
Length：取得したデータ長
RealLength：実データ長
Data：Lengthの長さ分のデータ（データの切り捨てあり）

SetMaxFieldSizeメソッドで指定した長さよりも実データ長が短い，又は等しい場合
Length：取得したデータ長
RealLength：0
Data：Lengthの長さ分のデータ（データの切り捨てなし）

TYPE_BLOB_FILEについて

SetResultSetTypeメソッドで，TYPE_BLOB_FILEを指定した場合，BLOB型のフィールドに対するGetFieldメソッドの引数にはファイル名称が返ります。この場合，GetFieldメソッドの引数の型には，文字列と同じLPTSTRを使います。

繰り返し列の扱い

引数cparDataに繰り返し列のコピー先であるDBArrayDataオブジェクトへのポインタを指定します。DBRArrayDataオブジェクトは参照専用で生成されるため，更新する場合は更に更新用のオブジェクトを生成する必要があります。

SQL/Kの場合

データが設定されていない列を検索しても，GetFieldメソッドを実行すると，VOS K/FSのファイル定義で定義されたデータを返します。ファイル定義の詳細は，マニュアル「ファイル運用」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_NOT_FOUND

引数dwIndexの範囲が不正です。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldName，又は引数xxDataにNULLを指定しています。

DB_ERROR_DATA_TRUNCATED

取得した値を指定した型に変換できません。

DB_DRV_ERROR_INVALID_ARGUMENT

引数に指定したフィールド名は不正です。

DB_ERROR_CONVERT_ARRAY_TO_SCALAR

引数cparDataで繰り返し列以外のフィールド値を取得しました，又は引数cparData以外の引数で繰り返し列の値を取得しようとしました。

GetFieldCountメソッド

機能

ResultSetのフィールド数を取得します。

形式

UINT32 GetFieldCount(void) throw DBSQLCA

引数

なし

戻り値

データ型：UINT32

ResultSet中のフィールド数。

機能詳細

Executeメソッドで指定されたSELECT文の，検索結果中に含まれるフィールドの個数を取得します。

GetFieldCountメソッドを呼び出す前に，Executeメソッドを呼び出しておく必要があります。

発生する例外

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

GetFieldCTypeメソッド

機能

指定したフィールドのデータ型をC++の型で取得します。

形式

インデクス番号で指定する場合

DBR_CTYPE GetFieldCType(UINT32  dwIndex) throw DBSQLCA

フィールド名で指定する場合

DBR_CTYPE GetFieldCType(LPCTSTR  lpctFielsName) throw DBSQLCA

引数

dwIndex

１から始まるフィールドの番号を指定します。

lpctFieldName

フィールドの名称を指定します。

戻り値

データ型：DBR_CTYPE

指定されたフィールドのC++データ型を取得します。

COL_CTYPE_INT16：INT16

COL_CTYPE_INT32：INT32

COL_CTYPE_UINT16：UINT16

COL_CTYPE_UINT32：UINT32

COL_CTYPE_DOUBLE：DOUBLE

COL_CTYPE_SINGLE：SINGLE

COL_CTYPE_CHAR：TCHAR, LPTSTR, LPCTSTR

COL_CTYPE_OFFSET：OFFSET

COL_CTYPE_DATETIME：DBR_DATETIME

COL_CTYPE_BINARY：DBR_BINARY

COL_CTYPE_BOOLEAN：BOOLEAN

機能詳細

指定したフィールドのデータ型をC++のデータ型で取得します。

それぞれのデータ型は，ResultSet中に読み込まれたときに，デフォルトのC++データ型に変換されます。

変換されたデフォルトのデータ型がどのような型になるかは，使用するDBMSによって異なります。型変換の詳細については，「7.1 クラスライブラリで扱うデータ型と変換規則」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

指定したフィールドがありません。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定できません。

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

GetFieldDBTypeメソッド

機能

指定したフィールドのデータ型をDBMSの型で取得します。

形式

インデクス番号で指定した場合

UINT16 GetFieldDBType(UINT32   dwIndex) throw DBSQLCA

フィールド名で指定する場合

UINT16 GetFieldDBType(LPCTSTR lpctFieldName) throw DBSQLCA;

引数

dwIndex

１から始まるフィールドの番号を指定します。

lpctFieldName

フィールドの名称を指定します。

戻り値

データ型：UINT16

指定したフィールドのデータ型をDBMSのデータ型で取得します。

機能詳細

指定したフィールドの属性をDBMSのデータ型で取得します。

それぞれのデータ型は，DBMSによって異なります。データ型の詳細については，使用するDBMSの仕様をご確認ください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

指定したフィールドがありません。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定できません。

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

GetFieldNameメソッド

機能

フィールド名称を取得します。

形式

LPCTSTR GetFieldName(UINT32   dwIndex) throw DBSQLCA

引数

dwIndex

1から始まるフィールドの番号を指定します。指定するフィールド番号は，SQL文中での出現順に割り当てられます。

戻り値

データ型：LPCTSTR

指定されたフィールドの名称を取得します。

機能詳細

指定されたフィールドのフィールド名を取得します。

SELECT文でフィールド演算や，COUNTなどの関数を使用した場合，フィールド名はデータベースによって決められます。このような場合にこのメソッドを使用します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

指定したフィールドがありません。

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

GetFieldPrecisionメソッド

機能

フィールドの精度（桁数）を取得します。

形式

インデクス番号で指定する場合

UINT32  GetFieldPrecision(UINT32  dwIndex) throw DBSQLCA

フィールド名で指定する場合

UINT32  GetFieldPrecision(LPCTSTR lpctFieldName) throw DBSQLCA

引数

dwIndex

１から始まるフィールドの番号を指定します。

lpctFieldName

フィールドの名称を指定します。

戻り値

データ型：UINT32

フィールドの精度（桁数）を取得します。COL_TYPE_NUMERICの場合，小数点以下を含めた数値の有効桁数を取得します。

機能詳細

指定されたフィールドのデータの精度（桁数）を取得します。

指定されたフィールドのデータ型によって，戻り値の持つ意味が異なるものがあります。各データ型で返す値（Precision,Scale）を，表4-2から4-9に示します。

表4-2　Precision,Scaleで返す値（ORACLE)

データ型 | Precision | Scale
NUMBER(固定小数点数) | 定義長 | 小数点以下の桁数
NUMBER（浮動小数点数） | 45 | 0
VARCHAR2 | 定義長 | 0
RAW | 定義長 | 0
LONG | 0 | 0
LONG RAW | 0 | 0
DATE | 32※ | 0
ROWID | 18 | 0

注※ この値は，sizeof(DBR_DATETIME)で取得した値です。

表4-3　Precision,Scaleで返す値（SQL Anywhere）

データ型
Precision
Scale

CHAR
CHARACTER
VARCHAR
CHARACTER VARYING
定義長
0

SYSNAME
30
0

LONG VARCHAR
TEXT
0
0

SMALLINT
BIT
TINYINT
6
0

INT
INTEGER
11
0

DECIMAL
NUMERIC
定義長
定義長

MONEY
19
4

SMALLMONEY
10
4

REAL
9
0

DOUBLE
17
0

DATE
32※
0

TIME
32※
0

TIMESTAMP
DATETIME
SMALLDATETIME
32※
0

BINARY
定義長
0

LONG BINARY
IMAGE
0
0

注※ この値は，sizeof(DBR_DATETIME)で取得した値です。

表4-4　Precision,Scaleで返す値(Adaptive Server Anywhere)

データ型
Precision
Scale

CHAR
CHARACTER
VARCHAR
CHARACTER VARYING
定義長
0

SYSNAME
30
0

LONG VARCHAR
TEXT
0
0

SMALLINT
BIT
TINYINT
OLDBIT
6
0

INT
INTEGER
11
0

DECIMAL
NUMERIC
定義長
定義長

MONEY
19
4

SMALLMONEY
10
4

REAL
9
0

DOUBLE
17
0

DATE
32※
0

TIME
32※
0

TIMESTAMP
DATETIME
SMALLDATETIME
32※
0

BINARY
VARBINARY
定義長
0

LONG BINARY
IMAGE
java serialization
java.lang.Object
0
0

BIGINT
20
0

注※ この値は，sizeof(DBR_DATETIME)で取得した値です

表4-5　Precision,Scaleで返す値(SQL Server)

データ型
Precision
Scale

CHAR
VARCHAR
定義長
0

TEXT
0
0

SMALLINT
TINYINT
BIT
6
0

INT
11
0

DECIMAL
NUMERIC
定義長
定義長

MONEY
19
4

SMALLMONEY
10
4

REAL
9
0

DOUBLE
17
0

DATETIME
SMALLDATETIME
32※
0

TIMESTAMP
8
0

BINARY
VARBINARY
定義長
0

IMAGE
0
0

注※ この値は，sizeof(DBR_DATETIME)で取得した値です

表4-6　Precision,Scaleで返す値（HiRDB）

データ型 | Precision | Scale
SMALLINT | 6 | 0
INT | 11 | 0
SMALLFLT | 9 | 0
FLOAT | 17 | 0
DECIMAL | 定義長 | 小数点以下の桁数
CHAR | 定義長 | 0
VARCHAR | 定義長 | 0
MCHAR | 定義長 | 0
MVARCHAR | 定義長 | 0
NCHAR | 定義長×2 | 0
NVARCHAR | 定義長×2 | 0
DATE | 32※ | 0
TIME | 32※ | 0
INTERVAL YEAR TO DAY | 32※ | 0
INTERVAL HOUR TO SECOND | 32※ | 0
BLOB | 定義長 | 0
BINARY | 定義長 | 0

注※ この値は，sizeof(DBR_DATETIME)で取得した値です。

表4-7　Precision,Scaleで返す値(XDM/RD)

データ型 | Precision | Scale
DECIMAL | 定義長 | 小数点以下の桁数
LARGE DECIMAL | 定義長 | 小数点以下の桁数
INT | 11 | 0
SMALLINT | 6 | 0
FLOAT | 17 | 0
SMALLFLT | 9 | 0
CHAR | 定義長 | 0
VARCHAR | 定義長 | 0
LONG VARCHAR | 定義長 | 0
MCHAR | 定義長 | 0
MVARCHAR | 定義長 | 0
LONG MVARCHAR | 定義長 | 0
NCHAR | 定義長×2 | 0
NVARCHAR | 定義長×2 | 0
LONG NVARCHAR | 定義長×2 | 0
DATE | 32※ | 0

注※ この値は，sizeof(DBR_DATETIME)で取得した値です。

表4-8　Precision,Scaleで返す値（SQL/K）

データ型 | Precision | Scale
SMALLINT | 2 | 0
INTEGER | 4 | 0
DECIMAL | 定義長 | 定義長
NUMERIC TRAILING | 定義長 | 定義長
NUMERIC UNSIGNED | 定義長 | 定義長
CHAR | 定義長 | 0
NCHAR | 定義長×2 | 0
MCHAR | 定義長 | 0
XCHAR | 定義長 | 0

表4-9　Precision,Scaleで返す値（XDM/SD）

データ型 | Precision | Scale
BIT | 定義長 | 0
$DBK(データベースキー) | 定義長 | 0
NUMERIC TRAILING | 定義長 | 定義長
DECIMAL | 定義長 | 定義長
INTEGER | 4 | 0
SMALLFLT | 2 | 0
NCHAR | 定義長×2 | 0
CHAR | 定義長 | 0

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

指定したフィールドがありません。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

GetFieldScaleメソッド

機能

フィールドの小数点以下の桁数を取得します。

形式

インデクス番号で指定する場合

INT32 GetFieldScale(UINT32 dwIndex) throw DBSQLCA

フィールド名で指定する場合

INT32 GetFieldScale(LPCTSTR lpctFieldName) throw DBSQLCA

引数

dwIndex

１から始まるフィールドの番号を指定します。

lpctFieldName

フィールドの名称を指定します。

戻り値

データ型：INT32

COL_TYPE_NUMERICの場合，小数点の以下の桁数を取得します。

0の場合は整数となります。また，マイナスの場合は桁上がりとなります。

機能詳細

指定されたフィールドが数値データの場合，データの小数点以下の桁数を取得します。そのほかのデータの場合，返される値は意味を持ちません。

負の値が戻された場合，戻された値分の桁が上がります。

また，GetFieldPrecisionメソッドで取得した値よりも大きな正の値が戻された場合，戻された値分の桁が下がります。

指定されたフィールドのデータ型によって，戻り値の持つ意味が異なるものがあります。各データ型で返す値（Scale）については，GetFieldPrecisionメソッドの表4-2から4-7を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

指定したフィールドがありません。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

GetFieldTypeメソッド

機能

フィールドのデータ型を取得します。

形式

インデクス番号で指定する場合

UINT16 GetFieldType(UINT32 dwIndex) throw DBSQLCA

フィールド名で指定する場合

UINT16 GetFieldType(LPCTSTR lpctFieldName) throw DBSQLCA

引数

dwIndex

１から始まるフィールドの番号を指定します。

lpctFieldName

フィールドの名称を指定します。

戻り値

データ型：UINT16

指定したフィールドのデータ型を取得します。

COL_TYPE_INT16：2バイト長符号付き2進整数

COL_TYPE_INT32：4バイト長符号付き2進整数

COL_TYPE_UINT16：2バイト長符号なし2進整数

COL_TYPE_UINT32：4バイト長符号なし2進整数

COL_TYPE_NUMERIC：符号付き10進数

COL_TYPE_SINGLE：4バイト長浮動小数点数

COL_TYPE_DOUBLE：8バイト長浮動小数点数

COL_TYPE_CHAR：固定長文字列

COL_TYPE_VARCHAR：可変長文字列（最大長指定あり）

COL_TYPE_LONGVARCHAR：可変長文字列（最大長指定なし）

COL_TYPE_DATE：日付型

COL_TYPE_TIME：時間型

COL_TYPE_TIMESTAMP：日付・時間型

COL_TYPE_INTERVAL：時間間隔型

COL_TYPE_BOOLEAN：ブーリアン型

COL_TYPE_BINARY：固定長バイナリ型

COL_TYPE_VARBINARY：可変長バイナリ型（最大長指定あり）

COL_TYPE_LONGVARBINARY：可変長バイナリ型（最大長指定なし）

COL_TYPE_MONEY：金額型

COL_TYPE_SERIAL：自動インクリメント型

COL_TYPE_ROWID：ROWID

機能詳細

指定されたフィールドのデータベース中でのデータ型を取得します。

それぞれのデータ型は，ResultSet中に読み込まれたときに，デフォルトのC++データ型に変換されます。

変換されたデフォルトのデータ型がどのような型になるかは，使用するDBMSによって異なります。

型変換の詳細については，「7.1 クラスライブラリで扱うデータ型と変換規則」を参照してください。

繰り返し列かどうかの判断は，GetArraySizeメソッドで確認してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

指定したフィールドがありません。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

GetMaxRowsメソッド

機能

SetMaxRowsメソッドで指定したレコード数を取得します。

形式

UINT32 GetMaxRows(void)

引数

なし

戻り値

データ型：UINT32

SetMaxRowsメソッドで設定した，レコード数の最大値を取得します。

機能詳細

SetMaxRowsメソッドで設定した，ResultSetに読込まれるレコード数の最大値を取得します。SetMaxRowsメソッドを一度も呼び出していない場合はデフォルト値の100を返します。

発生する例外

なし

GetParamメソッド

機能

SetParamメソッドで指定したパラメタの値を取得します。

形式１：ユーザ確保領域へコピーする場合

void GetParam(UINT32 dwIndex，INT16 * sParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，INT32 * lParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，UINT16 * swParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，UINT32 * dwParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，SINGLE * sfParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，DOUBLE * dfParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，DBR_DATETIME * dtParam)
                                               throw DBSQLCA
void GetParam(UINT32 ui32Index，DBRArrayDataPtr* parParam)
                                               throw DBSQLCA

形式２：DABrokerが用意した領域を参照する場合

void GetParam(UINT32 dwIndex，LPTSTR * lptParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，DBR_BINARY * blobParam)
                                                throw DBSQLCA

形式３：ユーザ確保領域へコピーする場合

UINT32 GetParam(UINT32 dwIndex，LPTSTR lptParam，UINT32 dwSize)
                                                 throw DBSQLCA
UINT32 GetParam(UINT32 dwIndex，DBR_BINARY* blobParam，
                                  UINT32 dwSize) throw DBSQLCA

引数

dwIndex，ui32Index

1から始まるパラメタの番号を指定します。指定するパラメタの番号は，SQL文中での出現順に割り当てられます。

*xxParam（形式１，３の第2引数）

データをコピーする領域のポインタを指定します。

*xxParam（形式２の第2引数）

ポインタ変数を指定します。

dwSize

コピー先の領域サイズをバイト数で指定します。

戻り値

データ型：UINT32

コピーした文字列の長さが返ります。パラメタの値を指定された型にキャストして取得します。

機能詳細

SetParamで設定した値を取得します。このメソッドは，Executeを呼び出し，SetParamメソッドでパラメタを渡した後に実行してください。SetParamを実行する前にGetParamを実行した場合，NULL文字，又は0が返ります。

形式１の処理

パラメタ値を，引数に指定されたポインタが指す領域にコピーします。

形式２の処理

DABrokerが確保した領域にパラメタ値をコピーし，その先頭アドレスをポインタ変数に設定します。このため，LPTSTR又はDBR_BINARYの変数の確保だけで，パラメタ値をコピーする領域を確保する必要はありません。

パラメタ値の有効期間
パラメタ値は，ExecuteメソッドやSetParamメソッドを実行するまで有効です。

形式３の処理

LPTSTR型
引数lptParamの指す領域は，引数dwSizeバイト分確保されている必要があります。引数dwSizeがデータベースから取得したデータの長さ以下の場合，引数dwSize-1分のデータ（最後にはNULL終端文字が入る）がコピーされ，残りのデータは切り捨てられます。
引数dwSizeがデータベースから取得したデータの長さよりも大きい場合，文字列はすべてコピーします。

DBR_BINARY型
パラメタ値をコピーする領域（LPTSTR型）を確保し，DBR_BINARY型変数（構造体）のDataメンバに設定し，この変数をGetFieldメソッドの引数に指定します。引数dwSizeはこの領域のサイズを指定します。
引数dwSizeがデータベースから取得したデータの長さ以下の場合，引数dwSize分のデータがコピーされ，残りのデータは切り捨てられます。この場合，NULL終端文字は入りません。引数dwSizeがデータベースから取得したデータの長さより大きい場合，データはすべてコピーされ，残りの領域にはNULL終端文字が埋められます。

データ変換について

データベースのデータ型とGetParamの引数に指定したデータ型とが異なる場合は，値の変換できるものについては引数で指定したデータ型に変換して返します。

文字列から数値データ型への変換に失敗した場合は0を返します。データ型の変換規則については，「7.1 クラスライブラリで扱うデータ型と変換規則」のGetField，GetParamメソッドでのデータ型変換規則を参照してください。

NULL値の扱い

NULLであるパラメタに対してGetParamメソッドを呼び出すと，戻される値は意味のない値(0，空文字列，要素がすべて0，空文字列からなる構造体，又は不定値)となります。

このため，パラメタの値がNULLである可能性がある場合は，IsNullメソッドを呼び出して，NULL値かどうかを確認してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwRow又はdwIndexの範囲が不正です。(Execute実行前に実行した場合含む)

DB_ERROR_DATA_TRUNCATED

パラメタの値を指定した型に変換できません。

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

GetParamCountメソッド

機能

パラメタの数を取得します。

形式

UINT32 GetParamCount(void) throw DBSQLCA

引数

なし

戻り値

データ型：UINT32

パラメタの個数。

機能詳細

SELECT文中に含まれる？パラメタの個数を取得します。

GetParamCountメソッドを呼び出す前に，Executeメソッドを呼び出しておく必要があります。

発生する例外

DB_ERROR_BEFORE_EXECUTE

EXECUTEメソッドが実行されていません。

GetRowCountメソッド

機能

ResultSetに読込まれたレコード数を取得します。

形式

UINT32 GetRowCount(void) throw DBSQLCA

引数

なし

戻り値

データ型：UINT32

ResultSetに読込まれたレコード数が戻されます。

機能詳細

ResultSetに読み込まれたレコード数を取得します。

GetRowCountメソッドの返す値がGetMaxRowsメソッドの返す値よりも少ない場合，データベース中のすべての検索結果が読み込まれたことを示します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

InExecuteメソッド

機能

DBRResultSetオブジェクトに非同期実行中（又は実行待ち）のステートメントがあるかどうかを確認します。

形式

BOOLEAN  InExecute(void) throw DBSQLCA

引数

なし

戻り値

データ型：BOOLEAN

TRUE：ステートメントが非同期実行中(又は実行待ち)です。

FALSE：非同期実行中(又は実行待ち)ではありません。

機能詳細

InExecuteメソッドを実行したオブジェクト内のステートメントが非同期実行中(又は実行待ち）かどうかを確認します。

非同期実行中(又は実行待ち）の場合はTRUEを，非同期実行中(又は実行待ち）でない場合はFALSEを返します。

同期実行接続時はFALSEを返します。

コネクション内のすべてのステートメントを対象に非同期実行中かどうかを確認するには，InWaitForDataSourceメソッドを呼び出します(DBRDatabaseクラス)。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

IsEOFメソッド

機能

カーソルの位置が，ResultSetのレコードの最後を超えたかどうかを確認します。

形式

BOOLEAN  IsEOF(void) throw DBSQLCA

引数

なし

戻り値

データ型：BOOLEAN

TRUE：カーソルの位置が，ResultSetのレコードの最後を超えました。

FALSE：カーソルの位置は，まだResultSetの途中のレコードにあります。

機能詳細

Nextメソッドで次のレコードへカーソルを移動した後，まだレコードがあるかどうかを判断するときに使います。TRUEが戻された場合，Next,Previous,Top,Bottom,Absolute,Relativeメソッド又はPageNextメソッドを呼ぶとエラーになります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

IsFieldNullメソッド

機能

フィールドの値がNULLかどうかを確認します。

形式

インデクス番号で指定する場合

BOOLEAN  IsFieldNull(UINT32   dwIndex) throw DBSQLCA

フィールド名称で指定する場合

BOOLEAN  IsFieldNull(LPCTSTR lpctName) throw DBSQLCA

引数

dwIndex

1から始まるフィールドの番号を指定します。

lpctName

フィールド名を指定します。

戻り値

データ型：BOOLEAN

TRUE：フィールドの値がNULLです。

FALSE：フィールドの値はNULLではありません。

SQL/Kの場合，データが設定されていない列を検索しても，戻り値は常にFALSEになります。

機能詳細

指定されたフィールドの値がNULL値かどうかを確認します。

NULLはC言語で使用するNULLポインタの意味ではなく，データベースシステムでは「値がない」ことを意味します。

NULLであるフィールドに対してGetFieldメソッドを呼び出すと，戻される値は意味のない値（0，NULL文字列，要素がすべて0，NULL文字列からなる構造体，又は不定値）となるため注意してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_NOT_FOUND

引数dwIndexの範囲が不正です。

DB_ERROR_CANNOT_BE_NULL

引数lpctNameにNULLを指定しています。

DB_DRV_ERROR_INVALID_ARGUMENT

引数に指定したフィールド名は不正です。

IsParamNullメソッド

機能

パラメタの値がNULLかどうかを確認します。

形式

インデクス番号で指定する場合

BOOLEAN  IsParamNull(UINT32  dwIndex) throw DBSQLCA

引数

dwIndex

1から始まるフィールドの番号を指定します。

戻り値

データ型：BOOLEAN

TRUE：フィールドの値がNULLです。

FALSE：フィールドの値はNULLではありません。

機能詳細

指定されたパラメタの値がNULL値かどうかを確認します。

NULLはC言語で使用するNULLポインタの意味ではなく，データベースシステムでは「値がない」ことを意味します。

NULLであるパラメタに対してGetFieldメソッドを呼び出すと，戻される値は意味のない値（0，NULL文字列，要素がすべて0，NULL文字列からなる構造体，又は不定値）となるため注意してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_NOT_FOUND

引数dwIndexの範囲が不正です。

DB_ERROR_CANNOT_BE_NULL

引数lpctNameにNULLを指定しています。

DB_ERROR_BEFORE__EXECUTE

Executeメソッドが実行されていません。

Nextメソッド

機能

カーソルを次のレコードへ移動します。

形式

void Next(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

次のレコードへカーソルを移します。

更新可能なResultSetの場合，検索条件に一致する次のレコードをResultSetに読み込みます。参照専用のResultSetの場合，カーソルを次のレコードへ移します。ResultSetの最後のレコードにカーソルがある場合，Nextメソッドを呼び出すとSetMaxRowsメソッドで指定した数分の次のレコードを読み込みます。

次のレコードをResultSetに読み込む場合は，非同期実行可能です。単にカーソルを次のレコードに移す場合は，非同期に実行しません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_OUT_OF_RANGE

レコード終端を超えてメソッドが呼び出されました。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

OnBeforeRefreshメソッド

機能

Openメソッドを呼び出した場合はレコードが最初に読み込まれる前に，Refreshメソッドを呼び出した場合はレコードが読み込まれる前に呼び出される仮想関数です。

形式

virtual void OnBeforeRefresh(BOOLEAN bRefresh)

引数

bRefresh

呼び出し元がRefreshメソッドの場合は引数bRefreshにTRUEが指定されて呼び出されます。呼び出し元がOpenメソッドの場合は引数bRefreshにFALSEが指定されて呼び出されます。

戻り値

なし

機能詳細

Openメソッドを呼び出した場合はレコードが最初に読み込まれる前に，Refreshメソッドを呼び出した場合はレコードが読み込まれる前に呼び出されます。そのため，アプリケーションから直接このメソッドは呼び出せません。提供されているOnBeforeRefreshメソッドには，呼ばれたときの処理が定義されていないので，実際に呼ばれる事象が発生しても何もしません。呼ばれたときにユーザ固有の処理を実行させる場合，DBRResultSetクラスの派生クラスを生成し，そこにOnBeforeRefresh仮想関数のソースコードを定義します。

発生する例外

なし

OnEndRecordメソッド

機能

カーソルがResultSetの最後のレコードを超えたときに呼び出される仮想関数です。

形式

virtual void OnEndRecord(BOOLEAN bEndRecord)

引数

bEndRecord

カレントレコードを移動してIsEOFがTRUEになったとき，先頭と最後のうち，最後のレコードを超えた場合に，引数bEndRecordにTRUEが指定されて呼び出されます。

戻り値

なし

機能詳細

検索したレコードをすべて読み込んだ後，Nextメソッドを呼び出したときに呼び出される仮想関数です。そのため，アプリケーションからはこのメソッドを直接呼び出せません。提供されているOnEndRecord仮想関数には呼ばれたときの処理が定義されていませんので，実際に呼ばれる事象が発生しても何もしません。呼ばれる事象が発生したときにユーザ固有の処理を実行させる場合，DBRResultSetの派生クラスを生成し，そこにOnEndRecord仮想関数のソースコードを定義します。

発生する例外

なし

OnMoveRecordメソッド

機能

カーソルを移動したときに呼び出される仮想関数です。

形式

virtual void OnMoveRecord(BOOLEAN bSaveAndValidate)

引数

bSaveAndValidate

Openメソッドを呼び出して検索結果をResultSetに初めて読み込む場合，Nextメソッドなどのカーソル移動系のメソッドを呼び出した場合は，引数bSaveAndValidateにFALSEが指定されて呼び出されます。また，Updateメソッドを呼び出してデータを更新する場合は，引数bSaveAndValidateにTRUEが指定されて呼び出されます。

戻り値

なし

機能詳細

レコードを読み込んだり，更新したりする場合に呼び出されます。そのため，アプリケーションから直接この仮想関数を呼び出せません。提供されているOnMoveRecord仮想関数には呼ばれたときの処理が定義されていませんので，実際に呼ばれる事象が発生しても何もしません。呼ばれる事象が発生したきにユーザ固有の処理を実行させる場合，DBRResultSetの派生クラスを生成しそこにOnMoveRecord関数のソースコードを定義します。

TRUE,FALSEの指定により，仮想関数実行時は, アプリケーションが検索レコードを参照するのか更新するのかを判断できます。

発生する例外

なし

Openメソッド

機能

検索結果をResultSetに読み込みます。

形式

void Open(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

Executeメソッドで指定したSELECT文に対する検索結果を，ResultSetに読み込みます。

ResultSetに読み込める最大レコードの数は，SetMaxRowsメソッドで指定した数です。次のResultSetを読み込むためには，PageNextメソッドを呼び出してください。ResultSetは，次のExecuteメソッドを呼出したとき，Closeメソッドを呼び出したとき，親のDatabaseオブジェクトが削除されたときまで有効です。

このメソッドは非同期実行接続時に非同期に実行するメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

DB_ERROR_DRIVER_ERROR

DBMSでエラー発生が発生しました。

DB_ERROR_SELECT_NOT_EXECUTED

SELECT文が実行されていません。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_DRV_ERROR_RDA_PARAM_TYPE

パラメタの型が未設定か又は設定された型が不正です。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

PageNextメソッド

機能

カーソルを次のResultSetの先頭へ移動します。

形式

void Previous(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

次のレコード群（SetMaxRowsメソッドで設定したレコード数）をResultSetに読込みます。カーソルは次のレコード群の先頭レコードに位置付けられます。

すべてのレコードが読み込まれている（IsEOFメソッドでTRUEが返る場合)ときにこのメソッドは呼び出せません。

このメソッドは非同期実行接続時に非同期に実行するメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_OUT_OF_RANGE

ResultSetの範囲を超えるような呼び出しです。

DB_ERROR_DRIVER_ERROR

DBMSでエラー発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_ILLEGAL_VALUE

指定した引数が不正です。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

Previousメソッド

機能

カーソルを一つ前のレコードへ移動します。

形式

void Previous(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

カーソルを一つ前のレコードへ移します。

ResultSetの先頭でPreviousメソッドは呼び出せません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_OUT_OF_RESULTSET

ResultSetの範囲を超えるような呼び出しです。

Refreshメソッド

機能

先頭のレコードから再読み込みをします。

形式

void Refresh(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

データベースからレコードを再検索して，先頭レコードから再読み込みをします。

実行するSELECT文が？パラメタを持つ場合，Refreshメソッドを呼び出す前にSetParamメソッドを呼び出して？パラメタの値を変更できます。この場合，Refreshメソッドによって再検索された結果は，新しく設定されたパラメタの値を反映したものになります。

例えば「商品番号」を？パラメタとして使用している場合，Refreshメソッドを呼び出す前にSetParamメソッドで新しい商品番号を設定すると，Refreshメソッドを呼び出して再検索されたレコードは，新しい商品番号が反映された検索結果となります。

このメソッドは非同期実行可能なメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

Relativeメソッド

機能

カーソルを現在のレコードの位置からn個分移動します。

形式

void Relative(INT32  lCount) throw DBSQLCA

引数

lCount

指定した数分現在のレコードの位置からカーソルを移動します。

戻り値

なし

機能詳細

現在の位置から数えて，引数lCount番目のレコードにカーソルを移します。

正の値を指定した場合現在の位置より指定した値分後ろのレコードへ，負の値を指定した場合は指定した値分前のレコードへカーソルを移動します。

すべてのレコードが読み込まれている（IsEOFメソッドでTRUEが返る）ときにこのメソッドは呼び出せません。

また，引数lCountに検索結果の範囲を超えるような値は指定できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_OUT_OF_RESULTSET

ResultSetの範囲を超えるような呼び出しです。

SetFieldメソッド

機能

指定されたフィールドにデータを設定します。

形式

インデクスで指定する場合

void SetField(UINT32 dwIndex，INT16 sData) throw DBSQLCA
void SetField(UINT32 dwIndex，INT32 lData) throw DBSQLCA
void SetField(UINT32 dwIndex，UINT16 swData) throw DBSQLCA
void SetField(UINT32 dwIndex，UINT32 dwData) throw DBSQLCA
void SetField(UINT32 dwIndex，SINGLE sfData) throw DBSQLCA
void SetField(UINT32 dwIndex，DOUBLE dfData) throw DBSQLCA
void SetField(UINT32 dwIndex，LPCTSTR lpctData) throw DBSQLCA
void SetField(UINT32 dwIndex，const DBR_DATETIME& dtData)
                                               throw DBSQLCA
void SetField(UINT32 dwIndex，const DBR_BINARY& blobData)
                                               throw DBSQLCA
void SetField(UINT32 ui32Index，const DBRArrayDataConstPtr&
                                     cparData) throw DBSQLCA

フィールド名で指定する場合

void SetField(LPCTSTR lpctFieldName，INT16 sData) throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，INT32 lData) throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，UINT16 swData)
                                                 throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，UINT32 dwData)
                                                 throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，SINGLE sfData)
                                                 throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，DOUBLE dfData)
                                                 throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，LPCTSTR lpctData)
                                                 throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，const DBR_DATETIME& dtData)
                                                 throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，const DBR_BINARY& blobData)
                                                 throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，const DBRArrayDataConstPtr&
                                       cparData) throw DBSQLCA

引数

dwIndex, ui32Index

1から始まるフィールドの番号を指定します。指定するフィールドの番号は，SQL文中での出現順に割り当てられます。

lpctFieldName

フィールド名を指定します。

xxData（形式の第2引数）

設定する値を指定します。

戻り値

なし

機能詳細

カレントレコードのフィールドに値を設定します。

更新可能なResultSetに対して指定できます。Editメソッドを呼び出した後に実行してください。

値はデータベースのデータ型に合わせて変換されます。データ型の変換規則については，「7.1 クラスライブラリで扱うデータ型と変換規則」のSetFieldメソッドでのデータ型変換規則を参照してください。

BLOB型データをファイル経由で設定する場合

ExecuteメソッドでTYPE_BLOB_FILEを指定した場合，BLOB型のフィールドに対するSetFieldメソッドの引数にはファイル名称を指定します。この場合，SetFieldメソッドの引数の型には，文字列と同じLPCTSTRを使います。

DBR_BINARY型を指定する場合

DBR_BINARY型の各メンバには次の値を設定します。

Length：設定するデータの長さ（単位はバイト）

RealLength：設定不要

Data：実際のデータの領域を指すポインタ

繰り返し列を扱う場合

引数cparDataにDBArrayDataオブジェクトを指定します。DBRArrayDataオブジェクトはDBRArrayDataFactoryクラスを利用して事前に生成しておく必要があります。なお，これ以外の引数には，繰り返し列は指定できません。

また，引数cparDataに指定されたオブジェクトが，DBRArrayDataクラスのインスタンスを持っていない場合は，エラーになります。

SetFieldメソッドで値を設定した後，DBRArrayDataオブジェクトのSetDataメソッドを実行すると，SetFieldメソッド実行時点のデータは失われて，SetDataメソッドで設定したデータに置き換わるため注意が必要です。

XDM/RDで更新できる型の制限

LONG VARCHAR型，LONG NVARCHAR型，LONG MVARCHAR型のフィールドについては更新できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_NOT_FOUND

引数dwIndexの範囲，又は引数lpctFieldNameが不正です。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

DB_ERROR_NOT_IN_EDIT

Editメソッドが実行されていません。

DB_ERROR_DATA_TRUNCATED

取得した値を指定した型に変換できません。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_DRV_ERROR_INVALID_ARGUMENT

引数に指定したフィールド名は不正です。

DB_ERROR_NO_INSTANCE

引数cparDataに指定されたオブジェクトが，DBRArrayDataクラスのインスタンスを持っていません。

DB_ERROR_CONVERT_ARRAY_TO_SCALAR

引数cparDataに繰り返し列以外のフィールド値を設定しようとしました，又は引数cparData以外の引数に繰り返し列の値を設定しようとしました。

DB_ERROR_CANNOT_ACCESS_WHILE_EXECUTED

Updateメソッドを実行中に，DBRArrayDataオブジェクトのSetDataメソッドを呼び出しました。

SetFieldNullメソッド

機能

指定されたフィールドにNULLを設定します。

形式

インデクス番号で指定する場合

void SetNull(UINT32 dwIndex) throw DBSQLCA

フィールド名で指定する場合

void SetNull(LPCTSTR lpctFieldName) throw DBSQLCA

引数

dwIndex

１から始まるフィールドの番号を指定します。

lpctFieldName

フィールド名を指定します。

戻り値

なし

機能詳細

指定されたフィールドにNULLを設定します。

NULLはC言語で使用するNULLポインタの意味ではなく，データベースシステムでは「値がない」ことを意味します。

SetFieldメソッドと同様にEditメソッドを呼び出した後に実行してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

引数dwIndexの範囲が不正です。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

DB_ERROR_NOT_IN_EDIT

Editメソッドが実行されていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_DRV_ERROR_INVALID_ARGUMENT

引数に指定したフィールド名が不正です。

SetMaxRowsメソッド

機能

ResultSetに読込むレコード数の最大値を指定します。

形式

void SetMaxRows(UINT32 dwMaxSize=MAX_ROWS_DEFAULT) throw DBSQLCA

引数

dwMaxSize

ResultSetに読込むレコード数の最大値を指定します。必ず１以上を指定してください。

システムデフォルト値は，MAX_ROWS_DEFAULTです(=100が仮定されます)。

SQL/K，又はXDM/SDの場合，指定できる範囲は4096レコード以下です。

戻り値

なし

機能詳細

一度の読み込み（Executeメソッド，又はPageNextメソッドの呼び出し）で，ResultSetに読込むレコード数の最大値を設定します。

指定できるレコード数の範囲

指定できるレコード数の最大値は使用しているDBMSによって異なります。各DBMSごとに，指定できるレコード数の最大値を次に示します。

ORACLEを使用している場合：32767レコード以下

ORACLE以外のDBMSを使用している場合：4096レコード以下

1レコードのフィールド数は，GetFieldCountメソッドを呼び出して取得できます。

更新可能なResultSetでの扱い

更新可能なResultSetでは(Executeメソッドの引数swTypeでTYPE_EXCLUSIVEを指定した場合)，SetMaxRowsメソッドによる指定は無視され，常に１が仮定されます。更新可能なResultSetは常に1レコードだけを読み込みます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwMaxSizeが１より小さい値です。

SetParamメソッド

機能

?パラメタに値を設定します。

形式

void SetParam(UINT32 dwIndex，LPCTSTR lpctParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，INT16 sParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，INT32 lParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，UINT16 swParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，UINT32 dwParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，SINGLE sfParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，DOUBLE dfParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，const DBR_DATETIME& dtParam)
                                             throw DBSQLCA
void SetParam(UINT32 dwIndex，const DBR_BINARY& blobParam)
                                             throw DBSQLCA
void SetParam(UINT32 ui32Index，const DBRArrayDataConstPtr&
                                    cpArray) throw DBSQLCA

引数

指定されたパラメタを，データベースの型にキャストして設定します。

dwIndex，ui32Index

１から始まるパラメタの番号を指定します。指定するパラメタの番号は，SQL文中での出現順に割り当てられます。

xxParam（データ型：第2引数を参照してください）

パラメタに設定する値を指定します。

cpArray

インスタンスを保持しているDBRArrayDataConstPtrオブジェクトを指定します。

戻り値

なし

機能詳細

指定されたパラメタの値を設定します。

値は指定するデータ型からデータベース固有の型に変換されます。データ型変換規則については，「7.1 クラスライブラリで扱うデータ型と変換規則」の SetParamメソッドでのデータ型変換規則を参照してください。

SetParamメソッドは，Executeメソッドを実行した後，Openメソッドまでの間に実行してください。

パラメタにNULLを設定したい場合は，SetNullメソッドを使用してください。

引数lpctParamがNULL（LPCTSTR型の変数にNULLを代入して引数に渡した場合，又はNULLをLPCTSTR型にキャストした場合）の時もNULLが設定されます。キャストしないで引数にNULLだけ指定した場合はNULLとはみなしません。

BLOB型データをファイル経由で設定する場合

ExecuteメソッドでTYPE_BLOB_FILEを指定した場合，BLOB型のフィールドに対するSetParamメソッドの引数にはファイル名称を指定します。SetParamTypeメソッドはSetParamメソッドの前に実行してください。

DBR_BINARY型を指定する場合

DBR_BINARY型の各メンバには次の値を設定します。

Length：設定するデータの長さ（単位はバイト）

RealLength：設定不要

Data：実際のデータの領域を指すポインタ

繰り返し列を扱う場合の注意

引数cpArrayで指定するDBRArrayDataConstPtrオブジェクトがインスタンスを保持していない場合は，エラーになります。インスタンスを保持するDBRArrayDataPtrオブジェクトは，次の手順で生成し，引数へ設定します。

DBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドで，DBRArrayDataオブジェクトを生成します。

新しく繰り返し列を作成する場合だけ，DBRArrayDataオブジェクトのCreateメソッドで要素の格納領域を確保します。

DBRArrayDataオブジェクトのSetDataメソッドで要素の値を設定します。

引数pArrayにDBRArrayDataPtrオブジェクトを設定し，SetParamメソッドを呼び出します。

ExecuteUpdateメソッドで実行します。

なお，SetParamメソッドで値を設定した後に，DBRArrayDataオブジェクトのSetDataメソッドを実行すると，SetParamメソッド実行時点のデータは失われ，SetDataメソッドに指定した値が設定されるため注意してください。

また，Updateメソッドを実行中に，DBRArrayDataオブジェクトのSetDataメソッドは呼び出せません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwIndexの範囲が不正です（Execute実行前に実行した場合を含みます）。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

DB_ERROR_NO_INSTANCE

引数cparArrayに指定されたオブジェクトが，DBRArrayDataPtrクラスのインスタンスを持っていません。

DB_ERROR_CANNOT_ACCESS_WHILE_EXECUTED

Updateメソッドを実行中に，DBRArrayDataオブジェクトのSetDataメソッドを呼び出しました。

SetParamNullメソッド

機能

指定したパラメタにNULLを設定します。

形式

void SetParamNull(UNIT32 uiIndex) throw DBSQLCA

引数

uiIndex

1から始まるパラメタの番号を指定します。

戻り値

なし

機能詳細

指定されたパラメタにNULLを設定します。

NULLはC言語で使用するNULLポインタの意味ではなく，データベースシステムでは「値がない」ことを意味します。

SetParamメソッドと同様に，Executeメソッドを実行した後に実行してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

引数dwIndexの範囲が不正です。

DB_ERROR_NOT_IN_EDIT

Editメソッドが実行されていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

SetParamTypeメソッド

機能

パラメタの属性を指定します。

形式

void SetParamType (UINT32 dwIndex，
                  UINT16 ui16Type = TYPE_BLOB_MEMORY) throw DBSQLCA

引数

dwIndex

1から始まるパラメタの番号を指定します。

ui16Type

パラメタの属性を指定します。 指定できる値を次に示します。

TYPE_BLOB_MEMORY：メモリ上のデータを長大データとして読み込みます。

TYPE_BLOB_FILE_TEXT：テキストファイルを長大データとして読み込みます。

TYPE_BLOB_FILE_BINARY：バイナリファイルを長大データとして読み込みます。

RDA Link for Gatewayを使用している場合にだけ指定できる値を次に示します。

RDA_DT_ROWID

RDA_DT_XCHAR

RDA_DT_NUM_TRAILING

RDA_DT_NUM_UNSIGNED

RDA_DT_FLOAT

RDA_DT_SMALLFLT

RDA_DT_DECIMAL

RDA_DT_LARGE_DECIMAL

RDA_DT_INTEGER

RDA_DT_SMALLINT

RDA_DT_MVARCHAR

RDA_DT_MCHAR

RDA_DT_LONG_MVARCHAR

RDA_DT_NVARCHAR

RDA_DT_NCHAR

RDA_DT_LONG_NVARCHAR

RDA_DT_VARCHAR

RDA_DT_CHAR

RDA_DT_LONG_VARCHAR

RDA_DT_DATE

～LONG_(M,N)VARCHARはメモリ上のデータを長大データとして読み込みます。

戻り値

なし

機能詳細

パラメタの属性を指定します。

BLOB型のフィールドに対してファイル経由でのパラメタ設定をしたい場合だけ，SetParamTypeメソッドをTYPE_BLOB_FILE_TEXT，又はTYPE_BLOB_FILE_BINARYオプションを指定して呼び出します。この場合，SetParamでは「値」として「ファイル名」を指定する必要があります。詳細については，SetParamメソッドを参照してください。

SetParamTypeメソッドはSetParamメソッドを呼び出す前に実行してください。SetParamメソッドで値を設定した後にSetParamTypeメソッドを実行した場合，そのパラメタの値はクリアされます。

HiRDBのBinary型の場合

TYPE_BLOB_FILE_TEXTおよびTYPE_BLOB_FILE_BINARYは指定できません。メモリ経由でのパラメタ設定だけ実行できます。

XDM/RDの場合

Openメソッドを呼び出す前に，すべてのパラメタについてこのメソッドを呼び出してパラメタのデータ型を指定してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwIndexの範囲が不正です（Executeメソッド実行前に実行した場合を含みます )。

DB_DRV_ERROR_SQL_NOT_FOUND

SQL文が設定されていません。

Topメソッド

機能

カーソルをResultSetの先頭のレコードへ移動します。

形式

void Top(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

カーソルをResultSetの先頭のレコードへ移動します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_OUT_OF_RESULTSET

ResultSetの範囲を超えるような呼び出しです。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

Updateメソッド

機能

フィールドの更新結果をデータベースへ通知します。

形式

void Update(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

検索したレコードを更新する場合，Editメソッドの後，SetFieldメソッドでフィールドの値を更新し，Updateメソッドを呼び出すと，更新結果がデータベースへ通知されます。

通知されたデータはコミットされるまでデータベースに反映されません。

SetFieldメソッドで更新したあと，Updateメソッドを呼び出さないでNext，又はPageNextメソッドを呼び出した場合，更新したフィールドの内容は無効になります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_NOT_IN_EDIT

Editメソッドが実行されていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行中です。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

WaitForDataSourceメソッド

機能

DBRResultSetオブジェクトで要求した実行待ち，及び実行中の非同期処理が終了するまで待ちます。非同期処理中に同期を取りたい場合に利用できます。

形式

BOOLEAN WaitForDataSource(UINT32 swWaitTime = DBR_INFINITE)

引数

swWaitTime

非同期処理の終了を待つための最大時間（単位：ミリ秒），又はDBR_INFINITEを指定します。

指定した時間内に非同期処理が終了した場合，TRUEが返ります。指定した時間を経過しても非同期処理が終了しない場合，FALSEが返ります。非同期実行中のSQLがない場合は，TRUEが返ります。

DBR_INFINITEを指定した場合はタイムアウト時間を設定しません。非同期処理が終了するまで待ち続けます。

同期実行時はすぐにTRUEを返します。

戻り値

データ型：BOOLEAN

TRUE：すべての非同期処理が終了しました。

FALSE：タイムアウト時間が経過しました。

機能詳細

DBRResultSetオブジェクトで要求した実行待ち，及び実行中の非同期処理(SQL)が，終了するのを待ちます。

DBRDatabaseクラスのWaitForDataSourceメソッドとの違い

ResultSetオブジェクトのWaitForDataSourceメソッドでは，WaitForDataSourceメソッドを実行したResultSetオブジェクトの非同期実行処理が終了するまで待ちます。ほかのオブジェクトの非同期実行処理については待ちません。そのため，ほかのオブジェクトの非同期実行処理が実行中でも，WaitForDataSourceメソッドを呼び出したオブジェクトの非同期実行処理が終了すれば，WaitForDataSourceメソッドはTRUEを返します。

同じDatabaseオブジェクトで実行しているすべての非同期実行処理が終了するのを待ちたい場合は，DatabaseのWaitForDataSourceメソッドを実行してください。

発生する例外

なし

5.　詳細版関数詳細

DABrokerでは，C++による開発向けのプログラミングインタフェースとして，C++クラスライブラリを提供します。ここでは，詳細版のクラスライブラリごとに，プロパティやメソッドの詳細について説明します。

＜この章の構成＞

5.1　文法の説明順序

5.2　詳細版で利用できるクラスの概要

5.3　DBDriverManagerクラスの詳細

5.4　DBDriverクラスの詳細

5.5　DBConnectionクラスの詳細

5.6　DBStatementクラスの詳細

5.7　DBResultSetクラスの詳細

5.8　DBResultSetMetaDataクラスの詳細

5.9　DBPreparedStatementクラスの詳細

5.10　DBCallableStatementクラスの詳細

5.11　DBDatabaseMetaDataクラスの詳細

5.12　DBTransactionクラスの詳細

5.13　classListTablesクラスの詳細

5.14　classListColumnsクラスの詳細

5.15　classListProceduresクラスの詳細

5.16　classListProcedureColumnsクラスの詳細

5.17　classListPrimaryKeysクラスの詳細

5.1　文法の説明順序

この章では,プロパティ,メソッドごとに，次のような順序で説明しています。

＜この節の構成＞

プロパティ名，又はメソッド名

プロパティ名，又はメソッド名

機能

各プロパティ，又はメソッドの機能概要について記述しています。

形式

実際に指定する形式について記述しています。

引数は，特に断りのないかぎり，形式に示してある順序で記述してください。

DBDriver *Driver (LPCTSTR lpctAbstractName，
                 LPCTSTR lpctOptions = NULL，
                 UINT16 swTimeout = 0)          throw DBSQLCA

引数のうち=のない引数（lpctAbstractName）は，省略できないことを示します。

=のある引数（lpctOptions=NULL，swTimeout=0）は，指定を省略できることがあります。途中の引数を一つ又は複数省略することはできません。上記の例では，引数lpctAbstractNameだけを指定することはできますが，lpctOptions だけを省略して，lpctAbstract及びNameswTimeoutを指定することはできません。 また，=の右辺の値は，デフォルト値であることを示しています。この例では，引数lpctOptionsの指定を省略するとNULLが，引数swTimeoutの指定を省略すると0が仮定されることを示しています。

引数

形式で説明されている引数とその意味について記述しています。

戻り値

戻り値には，メソッドの戻り値の型（データ型として記述）や説明が記述してあります。

また，主に戻り値の説明中にある（又は機能詳細などにある場合もあります），TRUE及びFALSEの表記は，それぞれ非0及び0を意味しています。ヘッダではTRUEを１と定義していますが，これは便宜上のものであり，TRUEの場合でもBOOLEAN型の戻り値として１以外の値が返ることがあります。

したがって，BOOLEAN型の戻り値でTRUEかどうかを判定する場合は，例１のような方法ではなく，例２に示す方法で判定してください。

（例１）

BOOLEAN bFlag;
       ：
if(bFlag == TRUE)
{
  // TRUE
}

（例２）

BOOLEAN bFlag;
      ：
if(bFlag)
{
  // TRUE
}

機能詳細

各プロパティやメソッドの解説が記述してあります。

発生する例外

メソッドでスローする可能性のある代表的なエラーが記述してあります。ここに書かれていないエラーをスローすることもあります。また，項目の先頭に記述されているDBSQLCA(RetCode)は，DBSQLCAクラスのRetCodeプロパティにエラーがスローされることを示しています。

DB_ERROR_NOT_ENOUGH_MEMORY

エラーコードを示します。

アプリケーション作成時には，RetCodeプロパティに返るエラーコードを直接，比較，判定に利用できます。なお，アプリケーションで利用するためには，include文でヘッダーファイルdbbroker.hファイルをインクルードしておきます。

DBSQLCA* pError = NULL;
  try
  {
    :
    pError = pPrep->GetErrorStatus();  
                            // SQL実行時のエラー情報を取得
    if(pError->RetCode != 0)
                            // DBSQLCAオブジェクトのRetCodeで確認
      throw *pError;
    :
  }
  catch(DBSQLCA e)
  {
  }

  try
  {
    :
    pDriver = DriverManager.Driver(StrDBMSName);
                                       // 使用するDBMSの定義
    :
  }
  catch(DBSQLCA e)
  {
  if(e.RetCode==DB_ERROR_NOT_ENOUGH_MEMORY)
                                       //エラーコードを判定に使う
    :
  }

5.2　詳細版で利用できるクラスの概要

C++クラスライブラリのオブジェクト階層を図5-1に示します。

上位のクラスは，下位のクラスのオブジェクトを生成することを意味します。

なお，HiRDBの繰り返し列用のクラスライブラリは，簡易版でも利用できるため，詳細については，「6．共通関数詳細」を参照してください。

図5-1　C++クラスライブラリのオブジェクト階層

C++クラスライブラリのクラスの一覧を表5-1に示します。

表5-1　C++クラスライブラリのクラスの一覧

クラス名 | 概 要
DBDriverManagerクラス | DABrokerのトップオブジェクトです。
DBDriverクラス | 接続するデータベースについて管理します。
DBConnectionクラス | データベースへの接続を管理します。
DBStatementクラス | SQL文の実行を管理します。
DBResultSetクラス | ResultSetを管理します。
DBResultSetMetaDataクラス | ResultSetの情報を管理します。
DBPreparedStatementクラス | 実行時に動的に決まる?パラメタ（又はプレースフォルダ）を利用するSQL文を管理します。
DBCallableStatementクラス | ストアドプロシジャの実行を管理します。
DBDatabaseMetaDataクラス | データベースの情報を管理します。
DBTransactionクラス | トランザクションを管理します。
DBRArrayDataFactoryクラス | 繰り返し列を扱う DBRArrayDataを管理します。
DBRArrayDataクラス | 繰り返し列を管理します。
DBRArrayDataPtrクラス | 要素の値を変更したり，参照します。
DBRArrayDataConstPtrクラス | 要素の値を参照します。
classListTablesクラス | テーブル一覧情報を管理します。
classListColumnsクラス | フィールド一覧情報を管理します。
classListProceduresクラス | プロシジャ一覧情報を管理します。
classListProcedureColumnsクラス | プロシジャのパラメタ一覧情報を管理します。
classListPrimaryKeysクラス | テーブル中のプライマリキーを構成するフィールドの一覧情報を管理します。

5.3　DBDriverManagerクラスの詳細

Ｃ++クラスライブラリでのトップオブジェクトです。

ドライバオブジェクト(DBDriver），及びトランザクションオブジェクト（DBTransaction）の生成や削除などのメソッドを提供するクラスです。

機 能 | メソッド名
DBDriverオブジェクトを生成します。 | Driver
例外が発生したときにメッセージテキストを取得できるように初期化します。 | InitializeMessage
DBDriverオブジェクトを削除します。 | RemoveDriver
DBTransactionオブジェクトを削除します。 | RemoveTransaction
DBTransactionオブジェクトを生成します。 | Transaction

＜この節の構成＞

Driverメソッド

InitializeMessageメソッド

RemoveDriverメソッド

RemoveTransactionメソッド

Transactionメソッド

Driverメソッド

機能

DBDriverオブジェクトを生成します。

DBDriverオブジェクトは，DBMSに接続するため情報を設定するオブジェクトで，接続するDBMSごとに生成します。

形式

DBDriver *Driver (LPCTSTR lpctAbstractName，
                 LPCTSTR lpctOptions = NULL，
                 UINT16 swTimeout = 0)          throw DBSQLCA

TPBrokerのOTSインタフェース，又はOpenTP1連携を使ったトランザクション制御の場合

DBDriver *Driver (UNIT16 ui16Driver,
                 LPCTSTR lpctOptions = NULL,
                 UINT16 ui16Timeout = 0);       throw DBSQLCA

引数

lpctAbstractName

接続先データベース定義ファイルに記述のあるデータベース種別名を指定します。

指定した名称と同じ名前を持つDBDriverオブジェクトが既にある場合，そのオブジェクトのポインタを返します。

lpctOptions

DBMSにアクセスするときに，C++クラスライブラリを使ったトランザクション制御にするのか，TPBokerのOTSインタフェース，又はOpenTP1連携を使ったトランザクション制御にするのかを指定します。次のどちらかの値で設定します。

NULLポインタ：C++クラスライブラリを使ったトランザクション制御。NULLポインタ又はNULL終端の文字列へのポインタを設定します。

"XA"：TPBrokerのOTSインタフェース，又はOpenTP1連携を使ったトランザクション制御。OpenTP1連携で"XA"以外を指定した場合は，グローバルトランザクションの制御対象とすることができません。

swTimeout

現在のバージョンでは値を指定しても意味を持ちません。指定を省略するか，0を指定します。

ui16Driver

次の列挙型の値を指定します。

DRV_TYPE_ORACLE7：RMとしてORACLEを使用します。

DRV_TYPE_HIRDB：RMとしてHiRDBを使用します。OpenTP1連携時，この値以外を指定した場合の動作は保証しません。

ここに示した以外の値を指定した場合，動作は保証しません。

戻り値

データ型：DBDriver*

DBDriverオブジェクトへのポインタ。

機能詳細

データベースにアクセスするには，そのデータベースに接続することが必要です。通常，接続には接続先データベース定義ファイルで定義されている情報を使います。このメソッドでは，その情報のうち，データベース種別について引数lpctAbstractNameで指定します。

データベースにアクセスする際にトランザクション制御を，C++クラスライブラリ，又はTPBrokerのOTSインタフェースのどちらで行うかも指定します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

指定した引数が誤っています。

DB_ERROR_NOT_SUPPORTED

サポートされていないDBMSを指定しました。

DB_ERROR_CANNOT_BE_NULL

引数lpctAbstractNameにNULLを指定しました。

DB_ERROR_DBDEFINITIONNAME_LENGTH_IS_ZERO

引数lpctAbstractNameに空文字列を指定しました。

DB_ERROR_INITIALIZE_ERROR

メモリ不足もしくは環境設定の不正によって，処理を続行できません。

DB_ERROR_CANNOT_USE_XADRIVER

指定した非XAインターフェース用のデータベース種別名は，既にXAインターフェース用として使われています。

DB_ERROR_CANNOT_USE_NONXADRIVER

指定したXAインターフェース用のデータベース種別名は，既に非XAインターフェース用として使われています。

DB_ERROR_DBDEFINITIONNAME_IS_UNAVAILABLE_IN_XA

lpctAbstractNameにデータベース種別名が指定されていますが，lpctOptionsに"XA"が指定されています。

InitializeMessageメソッド

機能

例外が発生したときにメッセージテキストを取得できるように初期化します。

形式

void InitializeMessage(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

DABroker for C++クラスライブラリ（以下クラスライブラリと呼びます）のメッセージテキストを初期化します。メッセージテキストとは，次のものを指します。

DB_ERROR_NOT_ENOUGH_MEMORY ＜－エラーコード

メモリ容量が不足しています。 ＜－メッセージテキスト

メッセージテキストは，DABroker for C++が提供するメッセージテキストファイル（dabcppmj.txt又はdabcppme.txt）に格納されています。

取得するメッセージテキストが日本語（SJISモードの場合）になるか，英語（EUCモードまたはASCIIモードの場合）になるかは，DABrokerのDAB_LANG（LANG環境変数)に依存します。

クラスライブラリのメッセージテキストを取得したい場合は，このメソッドを呼び出してメッセージテキストを初期化しておきます。通常，トップオブジェクトを生成した後，すぐにこのメソッドを呼び出して初期化してください。

メッセージテキストは，ErrorMessageプロパティで取得します。

なお，クラスライブラリのエラーコードだけの取得でもよい場合は，このメソッドを呼び出す必要はありません。また，このメソッドを呼び出さなくても，データベースのエラーメッセージは取得できます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_FILE_NOT_FOUND

メッセージテキストファイルが見つかりません。

DB_ERROR_INITIALIZE_ERROR

メモリ不足もしくは環境設定の不正によって，処理を続行できません。

RemoveDriverメソッド

機能

DBDriverオブジェクトを削除します。

形式

void RemoveDriver (LPCTSTR lpctAbstractName)

引数

lpctAbstractName

DBDriverオブジェクト作成時に指定したデータベース種別名，又はNULLを指定します。

データベース種別名を指定した場合，その名称を持つDBDriverオブジェクトを削除します。

NULLを指定した場合は，データベース種別名を指定して作成されたすべてのDBDriverオブジェクトを削除します。

戻り値

なし

機能詳細

引数に指定した名称のDBDriverオブジェクトを削除します。このメソッドを実行すると，対象とするDBDriverオブジェクトで生成したDBConnectionオブジェクトをすべて削除します。このとき，トランザクションが終了していない場合は，ロールバックします。

非同期実行時に，実行待ち，又は実行中のステートメントがある場合は終了するのを待って，DBDriverオブジェクトを削除します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_CANNOT_FIND_OBJECT

指定した名前を持つDBDriverオブジェクトはありません。

RemoveTransactionメソッド

機能

DBTransactionオブジェクトを削除します。

形式

void RemoveTransaction (LPCTSTR lpctName) throw DBSQLCA

引数

lpctName

削除するDBTransactionオブジェクトの名前，又はNULLを指定します。

名前を指定した場合，その名前を持つDBTransactionオブジェクトを削除します。

NULLを指定した場合，すべてのDBTransactionオブジェクトを削除します。

戻り値

なし

機能詳細

引数に指定した名称のDBTransactionオブジェクトを削除します。対象となるDBTransactionオブジェクトのトランザクション実行中にこのメソッドを呼び出すと，登録されているDBConnectionオブジェクトをロールバックし，トランザクションを破棄しDBTransactionオブジェクトを削除します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_CANNOT_FIND_OBJECT

引数に指定した名前を持つDBTransactionオブジェクトがありません。

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

Transactionメソッド

機能

DBTransactionオブジェクトを生成します。

DBTransactionオブジェクトは，トランザクション管理のためのオブジェクトで，１コネクションにつき，一つのDBTransactionオブジェクトとしてください。

なお，複数のコネクションを一つのトランザクションで管理したい場合は，TPBrokerのOTS機能を利用してください。Driverメソッドで，TPBrokerを使用する設定ができます。

形式

DBTransaction *Transaction (LPCTSTR lpctName=NULL) throw DBSQLCA

引数

lpctName

DBTransactionオブジェクトの名前，又はNULLを指定します。

名称を指定すると，その名前を持つDBTransactionオブジェクトを生成し，オブジェクトへのポインタを返します。

NULLを指定する，又は指定を省略すると，DABrokerが名前を自動生成して，DBTransactionオブジェクトを生成し，オブジェクトへのポインタを返します。

戻り値

データ型：DBTransaction*

DBTransactionオブジェクトへのポインタ。

機能詳細

引数に指定した名称でDBTransactionオブジェクトを生成します。データベースを更新するアプリケーションの作成では，必ずトランザクションを設定してください。設定しないと，SQL文単位にコミットされます。

オブジェクト名の自動生成については，「3.3.1　オブジェクトの生成と削除」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_INITIALIZE_ERROR

メモリ不足もしくは環境設定の不正によって，処理を続行できません。

5.4　DBDriverクラスの詳細

接続するデータベース種別，及びデータベースに関する情報を管理します。

DBConnectionオブジェクトの生成，削除などのメソッドを提供するクラスです。

機 能 | メソッド名
DBConnectionオブジェクトを生成します。 | Connect
データベース種別を取得します。 | GetDriverType
SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。 | GetErrorStatus
対象となるオブジェクトを生成したDBDriverManagerオブジェクトのポインタを取得します。 | Parent
DBDriver(自分自身)を削除します。 | Remove
DBConnectionオブジェクトを削除します。 | RemoveConnection

＜この節の構成＞

Connectメソッド

GetDriverTypeメソッド

GetErrorStatusメソッド

Parentメソッド

Removeメソッド

RemoveConnectionメソッド

Connectメソッド

機能

DBConnectionオブジェクトを生成します。

接続先のデータベース名やユーザID，パスワードなどを指定して，データベースに接続します。

形式

DBConnection *Connect(LPCTSTR lpctName，
                     LPCTSTR lpctUID，
                     LPCTSTR lpctPWD，
                     LPCTSTR lpctDBN，
                     LPCTSTR lpctOPT = NULL，
                     LPCTSTR lpctAbstractName = NULL，
                     UINT16 swWait = LOCK_OPT_NOWAIT，
                     UINT16 swTimeout = 0，
                     UINT16 swSync = STMT_SYNC)  throw DBSQLCA

引数

lpctName

生成するDBConnectionオブジェクトの名前を指定します。このとき，同じDBMSを使用するDBDriverオブジェクト内でユニークな名前を指定してください。

ここで指定した名前は，DABrokerのデータベースアクセストレースのPAPNAMEおよび拡張データベースアクセストレースのClient Nameに出力されます。また，HiRDBを使用している場合は，HiRDBクライアント環境定義のPDCLTAPNAMEに設定されます。

lpctUID

接続先データベースのユーザIDを指定します。

データベースにアクセスするためのユーザID，又はNULLを指定します。

NULLを指定した場合，接続先データベース定義ファイルに指定されたユーザIDを利用します。

SQL/K，又はXDM/SDの場合，Database Connection Serverの認証属性の設定によっては，不正な値を設定してもデータベースに接続できるので注意してください。認証属性の詳細については，マニュアル「Database Connection Server」を参照してください。

TPBrokerのOTSインタフェース，又はOpenTP1連携を使ったトランザクション制御の場合は省略できません。

lpctPWD

接続先データベースのパスワードを指定します。

ユーザIDに対応したパスワード，又はNULLを指定します。

NULLを指定した場合，接続先データベース定義ファイルに指定されたパスワードを利用します。SQL Anywhere，Adaptive Server Anywhereの場合は，ODBCのデータソース中でパスワードを指定している場合は，そのパスワードを利用することができます。

SQL/K，又はXDM/SDの場合，Database Connection Serverの認証属性の設定によっては，不正な値を設定してもデータベースに接続できるので注意してください。認証属性の詳細については，マニュアル「Database Connection Server」を参照してください。

TPBrokerのOTSインタフェース，又はOpenTP1連携を使ったトランザクション制御の場合は省略できません。

lpctDBN

C++クラスライブラリを使ったトランザクション制御の場合
通常はNULLを指定します。
データベースによっては，lpctDBNに接続先情報を指定できます。詳しい内容については，このメソッドの機能詳細を参照してください。

TPBrokerのOTSインタフェースを使ったトランザクション制御の場合
ORACLE使用時は，xa_open文字列のDBフィールドで指定するデータベース名を指定します。
HiRDB使用時は，NULLを指定します。

OpenTP1連携を使ったトランザクション制御の場合
NULLを指定します。

lpctOPT

C++クラスライブラリを使ったトランザクション制御の場合
通常はNULLを指定します。
以降の引数をすべて省略する場合はこの引数の指定も省略できます。
HiRDBの場合，HiRDBクライアント環境定義の環境変数を指定できます。
データベースによっては，lpctDBNに接続先情報を指定できます。
また，HiRDBの場合，HiRDBクライアント環境定義の環境変数を指定できます。
詳しい内容については，このメソッドの機能詳細を参照してください。

TPBrokerのOTSインタフェースを使ったトランザクション制御の場合
ORACLE使用時は，NULLを指定します。
HiRDB使用時は，"DABENVGRP=xxxx"という形式で，TMにHiRDBを登録する際に指定した環境変数グループ識別子を指定します。このとき，PDHOST，PDNAMEPORTは指定しないでください。

OpenTP1連携を使ったトランザクション制御の場合
OpenTP1連携の場合，OpenTP1に一つのHiRDBしか登録されていない場合は，この引数は省略できます。OpenTP1に複数のHiRDBが登録されている場合は，環境変数グループ識別子を指定しないとエラーになります。環境変数グループ識別子の詳細についてはHiRDBのマニュアルを参照してください。

lpctAbstractName

C++クラスライブラリを使ったトランザクション制御の場合
接続先データベース定義ファイル中の接続するデータベース名を指定します。

TPBrokerのOTSインタフェース，又はOpenTP1連携を使ったトランザクション制御の場合
NULLを指定します。

swWait

検索対象のレコードがほかのトランザクションによってロックされている場合の動作を指定します。ここでの処理が，DBConnection内でのデフォルト値になります。DBStatementクラスのExecute，DBPreparedStatementクラスのExecute，及びDBCallableStatementクラスのSetProcedureメソッドの実行時にも指定できます。

SQL/Kの場合は，どの値を指定しても，ロックが解除されるまで待ち状態になります。

XDM/SDの場合は，どの値を指定しても，ロックが解除されるまで待たないで，すぐにエラーを返します。

LOCK_OPT_NOWAIT，又は LOCK_OPT_WITH_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。HiRDB又はXDM/RDの場合は同時にロールバックを実行します。それ以外のDBMSの場合は，ロールバックは実行しません。

LOCK_OPT_WITHOUT_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。ロールバックは実行しません。
ただし，現在のバージョンでは，XDM/RDではロールバックを実行します。また，HiRDBのDELETE,INSERT,UPDATE文では，このオプションは無効で，LOCK_OPT_WAITと同じ動作になります。

LOCK_OPT_WAIT
ロックが解除されるまで待ちます。

swTimeout

現在のバージョンでは値を指定しても意味を持ちません。指定を省略する又は0を指定します。

swSync

コネクションごとに，データベースアクセス（SQL文）を同期処理，又は非同期処理のどちらで実行するかを指定します。

STMT_SYNC：SQL文を同期処理で実行します。

STMT_ASYNC：SQL文を非同期処理で実行します。

STMT_ASYNCを指定した場合，各ステートメントオブジェクトで実行されるSQL文は，子スレッドで処理されます。

TPBrokerのOTSインタフェースでトランザクションを制御する場合
非同期処理のSTMT_ASYNCは指定できません。

OpenTP1連携を使ったトランザクション制御の場合
省略するか，必ずSTMT_SYNCを指定します。ただし，グローバルトランザクションの制御対象とする場合，非同期処理はできません。

戻り値

データ型：DBConnection*

DBConnectionオブジェクトへのポインタ。

機能詳細

DBConnectionオブジェクトを生成し，データベースに接続します。DBConnectionオブジェクトはデータベースへの接続ごとに生成してください。

データベースの接続は，DBDriverオブジェクトの生成時に指定したデータベース種別名と，このメソッドで指定するデータベース名によって決められます。

また，いったん，Closeして再接続する場合は，DBConnectionクラスのConnectメソッドでも各項目について指定できます。

このメソッドは，非同期実行可能メソッドです。

接続先データベース定義ファイルの定義内容を使用しないで接続する場合の補足事項
データベースとの接続には，接続先データベース定義ファイルの使用をお勧めしますが，もし接続先データベース定義ファイル中の定義内容を使用しない場合には，引数lpctAbstractName で NULL を指定し，使用するDBMSごとに次の引数の指定が必要です。
ただし，Database Connection Server 経由で接続するデータベース，SQL Server， 及び Adaptive Server Anywhereを使用する場合は，lpctAbstractNameにNULLを指定できません。lpctAbstractNameにNULLを指定しなくても，次の引数に値を指定すれば，接続先データベース定義ファイルの定義内容ではなく，引数に指定した内容で接続します。
データベースとの接続には，接続先データベース定義ファイルの使用をお勧めしますが，もし使用しない場合には引数lpctAbstractNameでNULLを指定し，使用するDBMSごとに次の引数の指定が必要です。

ORACLEの場合
引数lpctDBNに，SQL*NET経由で接続するORACLEのリスナー名称を指定します。リモートアクセスをしない場合はNULLを指定します。

HiRDBの場合
引数lpctOPTに，"PDHOST=XXXX;PDNAMEPORT=XXXX"という形式で接続先を指定します。環境変数にPDHOST，PDNAMEPORTが設定されていれば省略できます。

SQL Anywhere，Adaptive Server Anywhere，SQL Server の場合
引数lpctDBNにODBCのデータソース名を指定します。引数lpctOPTでデータソース名が定義されている場合は，この引数は省略できます。
引数lpctOPTにSQL Anywhere,Adaptive Server Anywhere,SQL Serverのデータベース接続パラメタ（ConnectionName以外）を指定できます。データベース接続パラメタでユーザIDやパスワードを指定した場合，Connectメソッドの引数に指定したユーザIDやパスワードよりも優先されます。

RDA Link for Gateway経由のXDM/RDの場合
引数lpctOPTに，RDノード名を指定します。

Database Connection Server経由のXDM/RDの場合
引数lpctOPTに，次に示す形式で接続先を指定します。
"RDNODE=xxxxx;DBHOST=xxxxx;SNDBUFSZ=xxxxx;RCVBUFSZ= xxxx"

Database Connection Server経由のXDM/SDの場合
lpctOPTで次に示す形式で接続先を指定します。
"SDNODE=xxxxx;DBHOST=xxxxx;SNDBUFSZ=xxxxx;RCVBUFSZ=xxxxx"

Database Connection Server経由のSQL/Kの場合
lpctOPTで次に示す形式で接続先を指定します。
"DBID=xxx1;DBHOST=xxx2;SNDBUFSZ=xxx3;RCVBUFSZ=xxx4"
xxx1：分散定義名を指定します。
xxx2：コネクションマルチ名を指定します。
xxx3：通信バッファサイズを指定します。この指定は省略できます。
xxx4：受信バッファサイズを調整します。この指定は省略できます。
各項目の詳細については，マニュアル「DABroker」を参照してください。

TPBrokerのOTSインタフェースを使ったトランザクション制御の場合
引数lpctAbstractNameにだけNULLを指定します。

HiRDBクライアント環境定義の環境変数指定
HiRDBの場合，HiRDBクライアント環境定義の環境変数をlpctOPTに指定できます。
引数の先頭に"DAB_HIRDBENV"がある場合，この接続でだけ有効にしたいHiRDBクライアント環境定義の環境変数をDAB_HIRDBENV+区切り文字(1バイト)"以降に記述します。
区切り文字に@を指定した場合の指定例を次に示します。

(例1)

"DAB_HIRDBENV@PDHOST=host.hitachi.co.jp@PDNAMEPORT=20000@PDSRVTYPE=VOS3@PDCWAITTIME=300"

接続時にHiRDBクライアントに以下の値を設定します。

PDHOST=host.hitachi.co.jp

PDNAMEPORT=20000

PDSRVTYPE=VOS3

PDCWAITTIME=300

(例2)

"DAB_HIRDBENV@DABENVGRP=XXXX"

接続時にHiRDB環境変数グループ識別子XXXXを指定します。

注意事項

DAB_HIRDBENVの次の1文字には，必ずDABroker動作環境定義ファイル(dasysconf)中で指定した区切り文字(変数名：DAB_HIRDB_DBINF_ESC)を指定してください。

DAB_HIRDBENVの文字列は必ず引数の先頭から指定してください。
それ以外の場所で記述しても有効になりません。
次のような指定をした場合の動作は保証しません。
" DAB_HIRDBENV@PDHOST=host@PDNAMEPORT=20000"
"DAB_HIRDBENVTEST@PDHOST=host@PDNAMEPORT=20000"

指定できるHiRDBの環境変数はPDUSER以外となります（PDUSERの指定は無視されます）。また，HiRDBで指定できる環境変数以外を指定した場合，動作は保証しません。

環境変数で指定した値は，DABroker for C++，及びDABrokerではエラーをチェックしないため，環境変数に誤りがある場合はHiRDBのエラーとなります。

この機能を使用する場合，従来DABrokerで設定していた，PDCLTAPNAMEは設定されません。必要な場合は，この機能でPDCLTAPNAMEを指定してください。

HiRDB環境変数グループ識別子を指定する場合，他のHiRDB環境変数の指定は無効となるので御注意ください。

この機能の指定値は，実行ユーザ(.profile)の指定よりも優先されます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_NAME_INVALID

DBConnectionオブジェクトの名前を指定していません。

DB_ERROR_CANNOT_BE_NULL

DBConnectionオブジェクトの名前にNULLを指定しています。

DB_ERROR_CONNECTSTRING_INVALID

接続文字列の形式が間違っています。

DB_ERROR_NAME_ALREADY_USED

指定した名前は既に使用されています。

DB_DRV_ERROR_CONNECT_NAME_ALREADY

同じDBConnectionオブジェクト名で既に接続しています。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_ILLEGAL_VALUE

指定した引数が不正です。DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_CANNOT_USE_ABSTRACTNAME

DBDriverオブジェクトにデータベース種別名が指定されていないので，データベース名を指定できません。

DB_ERROR_NOT_FOUND_DBDEFINITION

データベース種別名，又はデータベース名が見つかりません。

DB_ERROR_CONNECTDBDEFINITIONNAME_LENGTH_IS_ZERO

データベース名の長さが0です。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

DB_ERROR_NOT_EXECUTE_ASYNC

XAインターフェース使用時に非同期処理は指定できません。

GetDriverTypeメソッド

機能

データベース種別を取得します。

形式

UINT16 GetDriverType(void)

引数

なし

戻り値

データ型：UINT16

RV_TYPE_HIRDB：HiRDB用ドライバ

DRV_TYPE_ORACLE7：Oracle用ドライバ

DRV_TYPE_ANYWHERE：SQL Anywhere5.x用ドライバ

DRV_TYPE_ANYWHERE6：Adaptive Server Anywhere6.x用ドライバ

DRV_TYPE_SQLSERVER7：SQL Server用ドライバ

DRV_TYPE_VOS3XDMRD：XDM/RD用ドライバ（RDA Link for Gateway経由）

DRV_TYPE_VOS3XDMRD_DBS：XDM/RD用ドライバ（Database Connection Server経由）

DRV_TYPE_VOSKSQLK_DBS：SQL/K用ドライバ（Database Connection Server経由）

DRV_TYPE_VOS3XDMSD_DBS：XDM/SD用ドライバ（Database Connection Server経由）

DRV_TYPE_HIRDB_XA：XAインタフェースを利用したHiRDB用ドライバ

DRV_TYPE_ORACLE7_XA：XAインタフェースを利用したOraclex用ドライバ

DRV_TYPE_UNKNOWN：不明

機能詳細

データベース種別を取得できます。

Connectメソッドを呼び出してDBConnectionオブジェクトが生成されたか，ConnectメソッドでDB_ERROR_DRIVER_ERRORがスローされた後に，接続しようとしたデータベース種別を取得できます。Connectメソッドを一度実行するまではDRV_TYPE_UNKNOWNが返ります。

発生する例外

なし

GetErrorStatusメソッド

機能

SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。

形式

DBSQLCA *GetErrorStatus(void)

引数

なし

戻り値

データ型：DBSQLCA*

DBSQLCAオブジェクトへのポインタ。

機能詳細

DBSQLCAオブジェクトへのポインタを取得します。

非同期処理のときは，エラーが発生しても直にエラーを取得できません。このため，ユーザは任意の時点でエラーを確認する必要があります。

非同期実行でエラーが発生した場合，DBSQLCAオブジェクトにエラー情報が設定されます。

DBSQLCAオブジェクトでは，非同期実行中に発生したエラー情報を最大100回分保存できます。エラー情報は，新しいエラー情報から100回分保存されるため，エラー情報を確認したあとはDBSQLCAクラスのDeleteメソッドを呼び出して，不要なエラー情報をクリアしておいてください。

発生する例外

なし

Parentメソッド

機能

対象となるオブジェクトを生成したDBDriverManagerオブジェクトのポインタを取得します。

形式

LPOBJECT Parent(void)

引数

なし

戻り値

データ型：LPOBJECT

対象となるオブジェクトを生成したDBDriverManagerオブジェクトへのポインタ。

機能詳細

なし

発生する例外

なし

Removeメソッド

機能

DBDriverオブジェクト(自分自身)を削除します。

形式

void Remove(void)

引数

なし

戻り値

なし

機能詳細

DBDriverオブジェクト(自分自身)を削除します。

このメソッドを呼び出したDBDriverオブジェクト以外のDBDriverオブジェクトを削除する場合は，DBDriverManagerオブジェクトのRemoveDriverメソッドが利用できます。詳細については，「5.3 DBDriverManagerクラスの詳細」のRemoveDriverメソッドを参照してください。

発生する例外

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中ステートメントがあります。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

RemoveConnectionメソッド

機能

DBConnectionオブジェクトを削除します。

形式

void RemoveConnection(LPCTSTR lpctName) throw DBSQLCA

引数

lpctName

削除するDBConnectionオブジェクトの名前を指定します。

戻り値

なし

機能詳細

引数lpctNameで指定した名前のDBConnectionオブジェクトを削除します。また，このDBConnectionオブジェクトで生成されたステートメントはすべて削除され，トランザクション中のコネクションがある場合はロールバックしてトランザクションを破棄します。

実行待ちステートメントがある場合（非同期処理），DBConnectionオブジェクトは削除できません。その場合は，実行待ち，及び実行中の処理の終了を確認してから，DBConnectionオブジェクトを削除してください。

なお，一時的にデータベースとの接続を切り離したい場合は，Closeメソッドが使えます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_CANNOT_BE_NULL

オブジェクトの名前にNULLを指定しています。

DB_ERROR_CANNOT_FIND_OBJECT

指定した名前を持つオブジェクトがありません。

DB_ERROR_IN_ASYNC_EXECUTE

SQLの非同期実行中です。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

5.5　DBConnectionクラスの詳細

データベースへの接続を管理します。

データベースとの接続・切断や，SQL文を実行するオブジェクトの生成・削除などのメソッドを提供するクラスです。

データベースに接続するためには，DBDriverクラスのConnectメソッドを呼び出して，DBConnectionオブジェクトを生成します。このとき，同期接続，又は非同期接続を選択できます。

非同期接続を選択した場合，データベースへの接続処理を含めて，同一セッション中のデータベースへの処理要求(クラスライブラリのメソッド呼び出し)は，非同期に実行されます。この場合は，別スレッド上で処理されるため，メソッドの呼び出しでアプリケーションが「待ち」になることはありません。その代わりに，メソッドの実行中にエラーが発生した場合，非同期で処理されているメソッドではエラーをスローできません。アプリケーション側で適当なタイミングを設定し，必要であればエラーを確認してください。

機 能 | メソッド名
データベースとの接続を切り離します。 | Close
Closeメソッドを使って切断したデータベースと再接続します。 | Connect
DBCallableStatementオブジェクトを生成します。 | CreateCallableStatement
DBPreparedStatementオブジェクトを生成します。 | CreatePreparedStatement
DBStatementオブジェクトを生成します。 | CreateStatement
Transactionオブジェクトとの関連付けを解消します。 | EraseTransaction
検索結果を必要としない，SQL文を実行します。 | ExecuteDirect
DBRArrayDataFactoryオブジェクトを生成します。 | GetArrayDataFactory
SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。 | GetErrorStatus
DBDatabaseMetaDataオブジェクトを生成します。 | GetMetaData
DBConnectionオブジェクトの名称を取得します。 | GetName
DBConnectionオブジェクトで実行待ち，又は実行中のステートメントがあるかどうかを確認します。 | InWaitForDataSource
データベースが切断されているかどうかを確認します。 | IsClosed
対象となるオブジェクトを生成したDBDriverオブジェクトのポインタを取得します。 | Parent
DBTransactionオブジェクトとDBConnectionオブジェクトを関連付けます。 | RegisterTransactions
DBConnectionオブジェクト(自分自身)を削除します。 | Remove
DBCallableStatementオブジェクトを削除します。 | RemoveCallableStatement
DBPreparedStatementオブジェクトを削除します。 | RemovePreparedStatement
DBStatementオブジェクトを破棄します。 | RemoveStatement
RegisterTransactionsメソッドで関連付けたDBTransactionオブジェクトのポインタを取得します。 | Transaction
DBConnectionオブジェクトで要求した実行待ち，及び実行中の非同期処理がすべて終了するまで待ちます。 | WaitForDataSource

＜この節の構成＞

Closeメソッド

Connectメソッド

CreateCallableStatementメソッド

CreatePreparedStatementメソッド

CreateStatementメソッド

EraseTransactionメソッド

ExecuteDirectメソッド

GetArrayDataFactoryメソッド

GetErrorStatusメソッド

GetMetaDataメソッド

GetNameメソッド

InWaitForDataSourceメソッド

IsClosedメソッド

Parentメソッド

RegisterTransactionsメソッド

Removeメソッド

RemoveCallableStatementメソッド

RemovePreparedStatementメソッド

RemoveStatementメソッド

Transactionメソッド

WaitForDataSourceメソッド

Closeメソッド

機能

データベースとの接続を切り離します。

形式

void Close(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

DBConnectionオブジェクトに対して次の処理をして，データベースとの接続を切り離します。トランザクションが完了していないコネクションの場合には，ロールバック後，データベースとの接続を切り離します。接続していないときは何もしません。

すべてのステートメントオブジェクトの削除

DBDatabaseMetaDataオブジェクトの削除

Transactionオブジェクトへの関連付けを解消

発生する例外

DBSQLCA(RetCode)

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

Connectメソッド

機能

Closeメソッドを使って切断したデータベースと再接続します。

形式

void Connect (LPCTSTR lpctUID,
             LPCTSTR lpctPWD,
             LPCTSTR lpctDBN,
             LPCTSTR lpctOPT = NULL,
             LPCTSTR lpctAbstractName = NULL,
             UINT16 swWait = LOCK_OPT_NOWAIT,
             UINT16 swTimeout = 0,
             UINT16 swSync = STMT_SYNC)        throw DBSQLCA

引数

lpctUID

接続先データベースのユーザIDを指定します。

SQL/K，又はXDM/SDの場合，Database Connection Serverの認証属性の設定によっては，不正な値を設定してもデータベースに接続できるので注意してください。認証属性の詳細については，マニュアル「Database Connection Server」を参照してください。

lpctPWD

接続先データベースのパスワードを指定します。

SQL/K，又はXDM/SDの場合，Database Connection Serverの認証属性の設定によっては，不正な値を設定してもデータベースに接続できるので注意してください。認証属性の詳細については，マニュアル「Database Connection Server」を参照してください。

lpctDBN

NULLを指定します。

lpctOPT

通常はNULLを指定します。以降の引数をすべて省略する場合はこの引数の指定も省略できます。

SQL/Kの場合
lpctAbstractNameにNULLを指定して，lpctOPTで次に示す形式で接続先を指定すると，接続先データファイルを使用しないで接続できます。

DBID=xxx1;DBHOST=xxx2;SNDBUFSZ=xxx3;RCVBUFSZ=xxx4

xxx1：分散定義名を指定します。
xxx2：コネクションマルチ名を指定します。
xxx3：通信バッファサイズを指定します。この指定は省略できます。
xxx4：受信バッファサイズを調整します。この指定は省略できます。
各項目の詳細については，マニュアル「DABroker」を参照してください。

XDM/SDの場合
lpctAbstractNameにNULLを指定して，lpctOPTで次に示す形式で接続先を指定します。

SDNODE=xxxxx;DBHOST=xxxxx;SNDBUFSZ=xxxxx;RCVBUFSZ=xxxxx

lpctAbstractName

接続先データベース定義ファイル中のデータベース名を指定します。

SQL/K，又はXDM/SDの場合
NULLを指定して，lpctOPTで接続先を指定することで，接続先データファイルを使用しないで接続できます。

swWait

検索対象のレコードがほかのトランザクションによってロックされている場合の動作を指定します。ここでの処理が，DBConnection内でのデフォルト値になります。DBStatementクラスのExecute，DBPreparedStatementクラスのExecute，及びDBCallableStatementクラスのSetProcedureメソッドの実行時にも指定できます。

SQL/Kの場合は，どの値を指定しても，ロックが解除されるまで待ち状態になります。

XDM/SDの場合は，どの値を指定しても，ロックが解除されるまで待たないで，すぐにエラーを返します。

LOCK_OPT_NOWAIT，又は LOCK_OPT_WITH_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。HiRDB又はXDM/RDの場合は同時にロールバックを実行します。それ以外のDBMSの場合は，ロールバックは実行しません。

LOCK_OPT_WITHOUT_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。ロールバックは実行しません。
ただし，現在のバージョンでは，XDM/RDではロールバックを実行します。また，HiRDBのDELETE,INSERT,UPDATE文では，このオプションは無効で，LOCK_OPY_WAITと同じ動作になります。

LOCK_OPT_WAIT
ロックが解除されるまで待ちます。

swTimeout

現在のバージョンでは値を指定しても意味を持ちません。指定を省略する又は0を指定します。

swSync

コネクションごとに，データベースアクセスを（SQL文）を非同期，又は同期処理のどちらで実行するかを指定します。ただし，TPBrokerのOTSインタフェースでトランザクションを制御する場合は， 非同期処理のSTMT_ASYNCは指定できません。

STMT_SYNC：SQL文を同期処理で実行します。

STMT_ASYNC：SQL文を非同期処理で実行します。

戻り値

なし

機能詳細

Closeメソッドを呼び出してデータベースとの接続を切断した後，再度データベースへ接続する場合に呼び出します。

各引数の詳細な説明については，「5.4 DBDriverクラスの詳細」のConnectメソッドを参照してください。

このメソッドは，非同期実行可能なメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_CONNECTSTRING_INVALID

接続文字列の形式が間違っています。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_ILLEGAL_VALUE

指定した引数が不正です。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

DB_ERROR_NOT_EXECUTE_ASYNC

XAインターフェース使用時に非同期処理は指定できません。

CreateCallableStatementメソッド

機能

DBCallableStatementオブジェクトを生成します。

DBCallableStatementオブジェクトはストアドプロシジャの実行を管理します。

形式

DBCallableStatement *CreateCallableStatement
                        (LPCTSTR lpctName = NULL) throw DBSQLCA

引数

lpctName

生成するDBCallableStatementオブジェクトの名前，又はNULLを指定します。

NULLを指定する，又は指定を省略すると，DABrokerが名前を自動生成して，DBCallableStatementオブジェクト生成し，オブジェクトへのポインタを返します。

指定した名前を持つオブジェクトが既にある場合は，そのオブジェクトのポインタを返します。

戻り値

データ型：DBCallableStatement*

DBCallableStatementオブジェクトへのポインタ。

機能詳細

DBCallableStatementオブジェクトを生成し，オブジェクトのポインタを返します。

ストアドプロシジャを実行するためには，このDBCallableStatementオブジェクトを使います。

ストアドプロシジャの実行方法については「2.6.6 ストアドプロシジャの利用」を参照してください。

生成できるDBCallableStatementオブジェクトの個数には制限があります。詳細については「3.3.2 データベースアクセスリソース数の制限」を参照してください。

自動的に生成されるオブジェクト名については「3.3.1 オブジェクトの生成と削除」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_NOT_CONNECTED

データベースに接続していません。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_DRV_ERROR_STAT_COUNT

ステートメントの個数が上限値を超えました。

CreatePreparedStatementメソッド

機能

DBPreparedStatementオブジェクトを生成します。

DBPreparedStatementオブジェクトは，?パラメタを使ったSQL文を実行するためのオブジェクトです。

形式

DBPreparedStatement *CreatePreparedStatement
                         (LPCTSTR lpctStatement，
                          LPCTSTR lpctName = NULL) throw DBSQLCA

引数

lpctStatement

0個以上の?パラメタを含んだSQL文を指定します。

lpctName

生成するDBPreparedStatementオブジェクトの名前，又はNULLを指定します。

NULLを指定する，又は指定を省略すると，DABrokerが名前を自動生成して，DBPreparedStatementオブジェクトを生成し，オブジェクトへのポインタを返します。

指定した名前を持つオブジェクトが既にあった場合，そのオブジェクトのポインタが返ります。

戻り値

データ型：DBPreparedStatement*

DBPreparedStatementオブジェクトへのポインタ。

機能詳細

？パラメタを含むSQL文を組み立て，このメソッドを呼び出してDBPreparedStatementオブジェクトを生成します。

なお，引数lpctStatementでNULL以外の値を指定して，既にあるオブジェクトと同じ名称を指定した場合はエラーをスローします。SQLの実行方法については「2.6 詳細版クラスのデータベースアクセス」を参照してください。

自動的に生成されるオブジェクト名については，「3.3.1 オブジェクトの生成と削除」を参照してください。

生成できるDBPreparedStatementオブジェクトの個数には制限があります。詳細については「3.3.2 データベースアクセスリソース数の制限」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_NOT_CONNECTED

DBに接続していません。

DB_ERROR_INVALID_ARGUMENT

新規生成時に，既に使われているオブジェクト名称を指定しています。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_NAME_ALREADY_USED

指定した名称は既に使用されています（非同期実行時）。

DB_ERROR_CANNOT_FIND_OBJECT

指定した名前を持つオブジェクトがありません。

DB_DRV_ERROR_STAT_COUNT

ステートメントの個数が上限値を超えました。

CreateStatementメソッド

機能

DBStatementオブジェクトを生成します。

DBStatementオブジェクトでは，SQL文の実行を管理します。

形式

DBStatement *CreateStatement(LPCTSTR lpctName=NULL)
                                             throw DBSQLCA

引数

lpctName

生成するDBStatementオブジェクトの名前，又はNULLを指定します。

NULLを指定する，又は指定を省略すると，DABrokerが名前を自動生成して，DBStatementオブジェクトを生成し，オブジェクトへのポインタを返します。

指定した名前を持つオブジェクトが既にある場合は，そのオブジェクトのポインタを返します。

戻り値

データ型：DBStatement*

DBStatementオブジェクトへのポインタ。

機能詳細

？パラメタを使わないSQL文を実行する場合，このメソッドでDBStatementオブジェクトを生成します。？パラメタを含むSQL文を実行したい場合は，CreatePreparedStatementメソッドを呼び出してDBPreparedStatementオブジェクトを生成してください。

SQLの実行方法については「2.6 詳細版クラスのデータベースアクセス」を参照してください。

自動的に生成されるオブジェクト名については，「3.3.1　オブジェクトの生成と削除」を参照してください。

オブジェクトの個数には制限があります。詳細については，「3.3.2 データベースアクセスリソース数の制限」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_NOT_CONNECTED

データベースに接続していません。

DB_DRV_ERROR_STAT_COUNT

ステートメントの個数が上限値を超えました。

EraseTransactionメソッド

機能

Transactionオブジェクトとの関連付けを解消します。

形式

void EraseTransaction (void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

DBTransactionオブジェクトに対するDBConnectionオブジェクトの関連付けを解消します。

トランザクション実行中の場合，関連付けの解消時にロールバックします。自動コミットが設定されている場合は何もしません。

TPBrokerのOTSインタフェースを使ったトランザクション制御の場合

登録されているDBConnectionオブジェクトがOTSインタフェースを使用している場合でもこのクラスの各メソッドは呼び出せます。しかし，関連付けの解消時には，ロールバックは行われないため，注意してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NO_CONNECTION_OBJECT

DBConnectionオブジェクトがDBTransactionオブジェクトに関連付けられていません。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中のステートメントがあります。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

ExecuteDirectメソッド

機能

検索結果を必要としない，SQL文を実行します。

形式

void ExecuteDirect(LPCTSTR lpctStatement) throw DBSQLCA

引数

lpctStatement

実行するSQL文を指定します。

戻り値

なし

機能詳細

引数lpctStatementで指定されたSQL文を実行します。

このメソッドでは，?パラメタを使ったSQL文を指定できません。また，SELECT文を実行しても，検索結果は取得できません。

SQLの実行方法については「2.6 詳細版クラスのデータベースアクセス」を参照してください。

非同期に実行できるSQL文の個数には制限があります。詳細については，「3.3.2 データベースアクセスリソース数の制限」を参照してください。

このメソッドは，非同期実行可能なメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_NOT_CONNECTED

データベースに接続していません。

DB_ERROR_CANNOT_BE_NULL

引数にNULLを指定しています。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

DB_DRV_ERROR_STAT_COUNT

ステートメントの個数が上限値を超えました。（非同期実行時）

GetArrayDataFactoryメソッド

機能

繰り返し列を扱うために，DBRArrayDataFactoryオブジェクトを生成し，ポインタを取得します。

形式

DBRArrayDataFactory * GetArrayDataFactory(void) throw DBSQLCA

引数

なし

戻り値

データ型：DBRArrayDataFactory *

DBRArrayDataFactoryオブジェクトのポインタ。

機能詳細

GetArrayDataFactoryメソッドは，DBRArrayDataオブジェクトを管理するためのDBRArrayDataFactoryオブジェクトを生成し，ポインタを取得するメソッドです。

このDBRArrayDataFactoryオブジェクトの生成後，CreateArrayDataメソッドでDBRArrayDataオブジェクトを生成します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_DRIVER_NOT_LOADED

データベースとの接続時に非同期処理を設定していますが，接続に失敗した上に，接続するDBMS種別も不明です。

GetErrorStatusメソッド

機能

SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。

形式

DBSQLCA *GetErrorStatus(void)

引数

なし

戻り値

データ型：DBSQLCA*

DBSQLCAオブジェクトへのポインタ。

機能詳細

DBSQLCAオブジェクトへのポインタを取得します。

非同期処理のときは，エラーが発生しても直にエラーを取得できません。このため，ユーザは任意の時点でエラーを確認する必要があります。

非同期実行時にエラーが発生した場合，DBSQLCAオブジェクトにエラー情報が設定されます。

DBSQLCAオブジェクトでは，非同期実行中に発生したエラー情報を最大100回分保存できます。エラー情報は，新しいエラー情報から100回分保存されるため，エラー情報を確認したあとはDBSQLCAクラスのDeleteメソッドを呼び出して，不要なエラー情報をクリアしておいてください。

発生する例外

なし

GetMetaDataメソッド

機能

DBDatabaseMetaDataオブジェクトを生成します。

DBDatabaseMetaDataオブジェクトでは，データベース情報を管理します。

形式

DBDatabaseMetaData *GetMetaData(void) throw DBSQLCA

引数

なし

戻り値

データ型：DBDatabaseMetaData*

DBDatabaseMetaDataオブジェクトへのポインタ。

機能詳細

DBDatabaseMetaDataオブジェクトを生成し，そのオブジェクトへのポインタを返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_NOT_CONNECTED

データベースに接続されていません。

GetNameメソッド

機能

DBConnectionオブジェクトの名称を取得します。

形式

LPCTSTR GetName(void)

引数

なし

戻り値

データ型：LPCTSTR

DBConnectionオブジェクトの名前を返します。

機能詳細

DBConnectionオブジェクトの名前を取得します。

発生する例外

なし

InWaitForDataSourceメソッド

機能

DBConnectionオブジェクトで実行待ち，又は実行中のステートメントがあるかどうかを確認します。同じDBConnectionオブジェクトで実行しているすべてのステートメントが対象になります。

形式

BOOLEAN InWaitForDataSource(void)

引数

なし

戻り値

データ型：BOOLEAN

TRUE：非同期処理の継続中です。

FALSE：非同期処理は終了しています。

機能詳細

子スレッドで実行待ち又は実行中のSQL文があればTRUEを，実行待ち又は実行中のSQL文がなければFALSEを返します。

厳密には，SQLを実行する子スレッドがあればTRUEを，なければFALSEを返します。同期実行接続時には常にFALSEを返します。

なお，各クラスのInExecuteメソッドと，InWaitForDataSourceメソッドの違いは，前者がInExecuteメソッドを実行したオブジェクトの非同期処理が実行中かどうかを確認するのに対して，後者はDBConnectionオブジェクトで生成したすべてのオブジェクトの非同期処理が実行中かどうかを確認できます（対象となるコネクション内のすべての非同期処理が終わるのを確認できます）。

発生する例外

なし

IsClosedメソッド

機能

データベースが切断されているかどうかを確認します。

形式

BOOLEAN  IsClosed(void)

引数

なし

戻り値

データ型：BOOLEAN

TRUE：データベースと接続されていません。

FALSE：データベースと接続しています。

機能詳細

なし

発生する例外

なし

Parentメソッド

機能

対象となるオブジェクトを生成したDBDriverオブジェクトのポインタを取得します。

形式

LPOBJECT Parent(void)

引数

なし

戻り値

データ型：LPOBJECT

対象となるオブジェクトを生成したDBDriverオブジェクトへのポインタ。

機能詳細

なし

発生する例外

なし

RegisterTransactionsメソッド

機能

DBTransactionオブジェクトとDBConnectionオブジェクトを関連付けます。

トランザクションの開始前，コネクションとトランザクションを対応させる必要があります。この関連付けによって，そのコネクションに対してトランザクション制御ができるようになります。

形式

void RegisterTransactions (DBTransaction* pTransaction)
                                              throw DBSQLCA

引数

pTransaction

トランザクションを管理するDBTransactionオブジェクトのポインタを指定します。

戻り値

なし

機能詳細

トランザクションをアプリケーションから制御する場合，DBConnectionオブジェクトを引数pTransactionに指定したDBTransactionオブジェクトに関連付けます。

DBTransactionオブジェクトへの関連付けはデータベースへの接続単位でします。1トランザクションでは，1コネクションを管理します。

対象とするDBTransactionオブジェクトで自動コミットが設定されている場合，DBConnectionオブジェクト(コネクション)は関連付けられた時に自動コミット設定になります。また，DBTransactionオブジェクトで自動コミットが設定されていない場合，DBConnectionオブジェクトを関連付け，BeginTransメソッド(DBTransactionクラス)を呼び出した時点からトランザクションが開始されます。

また，RegisterTransactionsメソッドを指定しない場合は，SQL文を1文実行するごとにコミットされるので注意してください。

TPBrokerのOTSインタフェースを使ったトランザクション制御の場合

登録されているDBConnectionオブジェクトがOTSインタフェースを使用している場合でもこのクラスの各メソッドは呼び出せますが，このような場合，DBTransactionオブジェクトではトランザクション制御はしないため，このメソッドの機能は無効になります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_CANNOT_BE_NULL

引数にNULLを指定しています。

DB_ERROR_ALREADY_REGISTERED

既に登録されています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中ステートメントがあります。

Removeメソッド

機能

DBConnectionオブジェクト(自分自身)を削除します。

形式

void Remove(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

データベースとの接続を切り離し，DBConnectionオブジェクトから作られたステートメントと一覧オブジェクトをすべて削除します。また，DBTransactionオブジェクトとの関連付けを解消した上で，自分自身を削除します。

コミットされていないトランザクションはロールバックされます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中ステートメントがあります。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

RemoveCallableStatementメソッド

機能

DBCallableStatementオブジェクトを削除します。

形式

void RemoveCallableStatement(LPCTSTR lpctName = NULL)
                                              throw DBSQLCA

引数

lpctName

削除するDBCallableStatementオブジェクトの名前，又はNULLを指定します。

NULLを指定した場合，このDBConnectionオブジェクトが持っているすべてのDBCallableStatementオブジェクトを削除します。

戻り値

なし

機能詳細

引数lpctNameで指定された名前を持つDBCallableStatementオブジェクトを削除します。また，削除するステートメントで生成されたDBResultSetオブジェクトも削除します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_CANNOT_FIND_OBJECT

指定した名前を持つDBCallableStatementオブジェクトがありません。

RemovePreparedStatementメソッド

機能

DBPreparedStatementオブジェクトを削除します。

形式

void RemovePreparedStatement(LPCTSTR lpctName = NULL)
                                              throw DBSQLCA

引数

lpctName

削除するDBPreparedStatementオブジェクトの名前，又はNULLを指定します。

NULLを指定した場合，このDBConnectionオブジェクトが持っているすべてのDBPreparedStatementオブジェクトを削除します。

戻り値

なし

機能詳細

引数lpctNameで指定された名前を持つDBPreparedStatementオブジェクトを削除します。また，削除するDBPreparedStatementオブジェクトで生成されたDBResultSetオブジェクトも削除します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_CANNOT_FIND_OBJECT

指定した名前を持つDBPreparedStatementオブジェクトがありません。

RemoveStatementメソッド

機能

DBStatementオブジェクトを削除します。

形式

void RemoveStatement(LPCTSTR lpctName = NULL) throw DBSQLCA

引数

lpctName

削除するDBStatementオブジェクトの名前，又はNULLを指定します。

NULLを指定した場合，このDBConnectionオブジェクトが持っているすべてのDBStatementオブジェクトを削除します。

戻り値

なし

機能詳細

引数lpctNameで指定された名前を持つDBStatementオブジェクトを削除します。また，削除するDBStatementオブジェクトで生成したDBResultSetオブジェクトも削除します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_CANNOT_FIND_OBJECT

指定した名前を持つDBStatementオブジェクトがありません。

Transactionメソッド

機能

RegisterTransactionsメソッドで関連付けたDBTransactionオブジェクトのポインタを取得します。

形式

DBTransaction *Transaction (void)

引数

なし

戻り値

データ型：DBTransaction*

DBTransactionオブジェクトのポインタ。

機能詳細

RegisterTransactionsメソッドで関連付けたDBTransactionオブジェクトのポインタを取得します。関連付けられていない場合は，NULLが返ります。

発生する例外

なし

WaitForDataSourceメソッド

機能

DBConnectionオブジェクトで要求した実行待ち，及び実行中の非同期処理がすべて終了するまで待ちます。非同期処理中の同期を取りたい場合に利用できます。

形式

BOOLEAN WaitForDataSource(UINT32 dwWaitTime = DBR_INFINITE)

引数

dwWaitTime

非同期処理の終了を待つ最大時間（単位はミリ秒），又はDBR_INFINITEを指定します。

指定した時間内に非同期処理が終了した場合，又は非同期実行中のSQLがない場合は，TRUEが返ります。指定した値を経過しても非同期処理が終了しない場合，FALSEが返ります。

DBR_INFINITEを指定した場合はタイムアウト時間を設定しません。非同期処理がすべて終了するまで待ち続けます。

戻り値

データ型：BOOLEAN

TRUE：すべての非同期処理が終了しました。

FALSE：タイムアウト時間が経過しました。

機能詳細

非同期処理の実行待ち及び実行中のSQLが，終了するのを待ちます。

なお，各クラスのWaitForDataSourceメソッドと，このクラスのWaitForDataSourceメソッドの違いは，前者がWaitForDataSourceメソッドを実行したオブジェクトの非同期処理の終了を待つのに対して，後者はDBConnectionオブジェクトで生成したすべてのオブジェクトの非同期処理の終了を待ちます（対象となるコネクション内のすべての非同期処理が終わるのを待ちます）。

同期実行時はすぐにTRUEを返します。

発生する例外

なし

5.6　DBStatementクラスの詳細

SQL文の実行を管理します。このクラスは，SQL文の実行やその結果の取得などのメソッドを提供するクラスです。SQL文の実行でも，?パラメタ（プレースホルダ）を利用して動的に検索条件を変更したい場合はDBPreparedStatementクラスを使います。

検索

DBStatementオブジェクトを生成した後，SELECT文を指定したExecuteメソッドを呼び出します。次に，検索結果を取得するために，GetResultSetメソッドを呼び出して，DBResultSetオブジェクトを取得します。

検索以外

DBStatementオブジェクトを生成した後，SQL文を指定したExecuteメソッドを呼び出します。

機 能 | メソッド名
SQL文の情報をデータベースに通知します。 | Execute
SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。 | GetErrorStatus
検索結果のフィールドの数を取得します。 | GetFieldCount
SetMaxFieldSizeメソッドで設定したデータ長を取得します。 | GetMaxFieldSize
ResultSetに検索できるレコード数の最大値を取得します。 | GetMaxRows
DBStatementオブジェクトの名前を取得します。 | GetName
SQL文を実行し，検索したレコードからResultSetオブジェクトを生成します。 | GetResultSet
DBResultSetMetaDataオブジェクトを生成します。 | GetResultSetMetaData
SQL文を使って更新，追加，又は削除したレコード数を取得します。 | GetUpdateRows
DBStatementオブジェクトに非同期実行中（又は実行待ち）のステートメントがあるかどうかを確認します。 | InExecute
対象となるオブジェクトを生成したDBConnectionオブジェクトのポインタを取得します。 | Parent
DBStatementオブジェクト(自分自身)を削除します。 | Remove
DBResultSetオブジェクトを削除します。 | RemoveResultSet
アプリケーションで受け取るフィールドの長さを設定します。 | SetMaxFieldSize
ResultSetに検索するレコード数の最大値を指定します。 | SetMaxRows
DBResultSetオブジェクトの生成オプションを指定します。 | SetResultSetType
DBStatementオブジェクトで要求した実行待ち，及び実行中の非同期処理が終了するまで待ちます。 | WaitForDataSource

＜この節の構成＞

Executeメソッド

GetErrorStatusメソッド

GetFieldCountメソッド

GetMaxFieldSizeメソッド

GetMaxRowsメソッド

GetNameメソッド

GetResultSetメソッド

GetResultSetMetaDataメソッド

GetUpdateRowsメソッド

InExecuteメソッド

Parentメソッド

Removeメソッド

RemoveResultSetメソッド

SetMaxFieldSizeメソッド

SetMaxRowsメソッド

SetResultSetTypeメソッド

WaitForDataSourceメソッド

Executeメソッド

機能

引数で指定したSQL文の情報をデータベースに通知します。

SELECT文によって検索結果を取得する場合，Executeメソッドを呼び出した後，GetResultSetメソッドを呼び出してDBResultSetオブジェクトを生成します。

形式

void Execute (LPCTSTR lpctStatement，
             UINT16 swWait = LOCK_OPT_DEFAULT)      throw DBSQLCA

引数

lpctStatement

SQL文を指定します。

swWait

実行するSQL単位に，検索対象のレコードがほかのトランザクションによってロックされていた場合の動作を指定します。

SQL/Kの場合は，どの値を指定しても，ロックが解除されるまで待ち状態になります。

XDM/SDの場合は，どの値を指定しても，ロックが解除されるまで待たないで，すぐにエラーを返します。

次の値のうち，どれか一つを指定します。

LOCK_OPT_DEFAULT
DBConnectionオブジェクトの設定を引き継ぎます。（DBDriverクラスのConnectメソッドの引数swWaitに指定した値）

LOCK_OPT_NOWAIT，又は LOCK_OPT_WITH_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。HiRDB又はXDM/RDの場合は同時にロールバックを実行します。それ以外のDBMSの場合は，ロールバックは実行しません。

LOCK_OPT_WITHOUT_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。ロールバックは実行しません。
ただし，現在のバージョンでは，XDM/RDではロールバックを実行します。また，HiRDBのDELETE,INSERT,UPDATE文では，このオプションは無効で，LOCK_OPY_WAITと同じ動作になります。

LOCK_OPT_WAIT
ロックが解除されるまで待ちます。

戻り値

なし

機能詳細

引数lpctStatementで指定されたSQL文の情報をデータベースに通知します。また，そのSQL文ごとに排他エラーの処理形態を変更できます。

このメソッドは，非同期実行可能なメソッドです。(SELECT文以外の実行時)

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

DB_DRV_ERROR_INVALID_SQL_EXCLUSIVE

WITH句で始まるSQL文の指定時には，DBResultSetオブジェクトの生成オプションをTYPE_EXCLUSIVE以外に設定してください。

GetErrorStatusメソッド

機能

SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。

形式

DBSQLCA *GetErrorStatus(void)

引数

なし

戻り値

データ型：DBSQLCA*

DBSQLCAオブジェクトへのポインタ。

機能詳細

DBSQLCAオブジェクトへのポインタを取得します。

非同期処理のときは，エラーが発生しても直にエラーを取得できません。このため，ユーザは任意の時点でエラーを確認する必要があります。

非同期実行時にエラーが発生した場合，DBSQLCAオブジェクトにエラー情報が設定されます。

DBSQLCAオブジェクトでは，非同期実行中に発生したエラー情報を最大100回分保存できます。エラー情報は，新しいエラー情報から100回分保存されるため，エラー情報を確認したあとはDBSQLCAクラスのDeleteメソッドを呼び出して，不要なエラー情報をクリアしておいてください。

発生する例外

なし

GetFieldCountメソッド

機能

検索結果のフィールドの数を取得します。

形式

UINT32 GetFieldCount(void)

引数

なし

戻り値

データ型：UINT32

フィールドの個数。

機能詳細

Executeメソッドで指定されたSELECT文の，検索結果中に含まれるフィールドの個数を取得します。

GetFieldCountメソッドを呼び出す前に，Executeメソッドを呼び出しておく必要があります。

発生する例外

なし

GetMaxFieldSizeメソッド

機能

SetMaxFieldSizeメソッドで設定したデータ長を取得します。

形式

フィールド名で指定する場合

UINT32 GetMaxFieldSize(LPCTSTR lpctFieldName=NULL) throw DBSQLCA

インデクス番号で指定する場合

UINT32 GetMaxFieldSize(UINT32 dwIndex) throw DBSQLCA

引数

lpctFieldName

フィールドの名称，又はNULLを指定します。

NULLが指定された場合，すべてのフィールド長の合計値をバイト数で取得します。

dwIndex

1から始まるフィールドの番号を指定します。

戻り値

データ型：UINT32

SetMaxFieldSizeメソッドで設定したデータ長。

機能詳細

SetMaxFieldSizeメソッドで設定したデータの長さを取得します。データベース中のフィールドの定義長ではないことに注意してください。

このメソッドを呼び出す前に，Executeメソッドを呼び出しておく必要があります。

不定長のフィールドの場合は，0を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_BEFORE_EXECUTE

Executeが実行されていません。

DB_ERROR_NOT_FOUND

指定されたフィールドがありません。

GetMaxRowsメソッド

機能

ResultSetに検索できるレコード数の最大値を取得します。

形式

UINT32 GetMaxRows(void)

引数

なし

戻り値

データ型：UINT32

SetMaxRowsメソッドで設定した，レコード数の最大値を取得します。

機能詳細

SetMaxRowsメソッドで設定した，DBResultSetオブジェクトで取得できるレコード数の最大値を取得します。SetMaxRowsメソッドを一度も呼び出していない場合はデフォルト値の100を返します。

発生する例外

なし

GetNameメソッド

機能

DBStatementオブジェクトの名前を取得します。

形式

LPCTSTR GetName(void)

引数

なし

戻り値

データ型：LPCTSTR

DBStatementオブジェクトの名前。

機能詳細

DBStatementオブジェクトの名前を取得します。DBStatementオブジェクトの名称は，DBConnectionクラスのCreateStatementメソッドの引数から生成されます。

発生する例外

なし

GetResultSetメソッド

機能

SQL文を実行し，検索したレコードからResultSetオブジェクトを生成します。

形式

DBResultSet *GetResultSet (void) throw DBSQLCA

引数

なし

戻り値

データ型：DBResultSet*

DBResultSetオブジェクトへのポインタ。

機能詳細

Executeメソッドで指定されたSELECT文の検索結果を取得します。

データベースからSetMaxRowsメソッドで指定されたレコード数分のレコードを検索後，DBResultSetオブジェクトを生成し，生成したオブジェクトへのポインタを返します。

Executeメソッドを実行していない場合や，Executeメソッドで実行したSQLがSELECT文でない場合はNULLが返ります。

同じSQLに対する2度目以降のGetResultSetの呼び出しは，既にあるDBResultSetオブジェクトへのポインタが返ります。

BLOB型データを扱う場合の制限事項については，SetResultSetTypeメソッド，及び「3.3.4 BLOB型データの取得方法についての制限」を参照してください。

このメソッドは，非同期実行可能なメソッドです。

DBResultSetオブジェクトのポインタの有効期間

GetResultSetメソッドを呼び出して取得したDBResultSetオブジェクトのポインタは，次にExecuteメソッドを実行した時点で無効になります。このため，Executeメソッド実行後に検索結果を取得したい場合は，必ずGetResultSetメソッドを実行して新しいDBResulSetオブジェクトのポインタを取得してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

DB_DRV_ERROR_REQUEST_RESULTSET_ROWS

ResultSetを生成するために指定されたレコード数が不正です。SetMaxRowsメソッドで正しいレコード数を指定してください。

GetResultSetMetaDataメソッド

機能

DBResultSetMetaDataオブジェクトを生成します。

DBResultSetMetaDataオブジェクトからフィールドの名称，数，属性などが取得できます。

形式

DBResultSetMetaData *GetResultSetMetaData(void) throw DBSQLCA

引数

なし

戻り値

データ型：DBResultSetMetaData*

DBResultSetMetaDataオブジェクトへのポインタ。

機能詳細

Executeメソッドで指定されたSELECT文の検索結果に対する情報を取得します。

DBResultSetMetaDataオブジェクトを生成し，生成したオブジェクトへのポインタを返します。取得したポインタは，次にExecuteメソッドが呼ばれた時点で無効になります。

また，Executeメソッドで実行したSQLがSELECT文でない場合はNULLを返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

GetUpdateRowsメソッド

機能

SQL文を使って更新，追加，又は削除したレコード数を取得します。

形式

UINT32 GetUpdateRows(void)

引数

なし

戻り値

データ型：UINT32

処理されたレコード件数を取得します。

機能詳細

Executeメソッドで指定したUPDATE，DELETE，INSERT文によって処理されたレコード数を取得します。

発生する例外

なし

InExecuteメソッド

機能

DBStatementオブジェクトに非同期実行中（又は実行待ち）のステートメントがあるかどうかを確認します。

形式

BOOLEAN  InExecute(void)

引数

なし

戻り値

データ型：BOOLEAN

TRUE：ステートメントが非同期実行中(又は実行待ち)です。

FALSE：非同期実行中(又は実行待ち)ではありません。

機能詳細

InExecuteメソッドを実行したオブジェクト内のステートメントが非同期実行中（又は実行待ち）かどうかを確認します。

非同期実行中（又は実行待ち）の場合はTRUEを，非同期実行中(又は実行待ち）でない場合はFALSEを返します。

同期実行接続時はFALSEを返します。

コネクション内のすべてのステートメントを対象に非同期実行中かどうかを確認するには，InWaitForDataSourceメソッドを呼び出します(DBConnectionクラス)。

発生する例外

なし

Parentメソッド

機能

対象となるオブジェクトを生成したDBConnectionオブジェクトのポインタを取得します。

形式

LPOBJECT Parent(void)

引数

なし

戻り値

データ型：LPOBJECT

対象となるオブジェクトを生成したDBConnectionオブジェクトへのポインタ。

機能詳細

なし

発生する例外

なし

Removeメソッド

機能

DBStatementオブジェクト(自分自身)を削除します。

形式

void Remove(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

DBStatementオブジェクト(自分自身)を削除します。

非同期処理中に実行待ち，及び実行中のステートメントがある場合は削除できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中ステートメントがあります。

RemoveResultSetメソッド

機能

DBResultSetオブジェクトを削除します。

形式

void RemoveResultSet(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

GetResultSetメソッドで生成したDBResultSetオブジェクトを削除します。

非同期処理中に実行待ち，又は実行中のステートメントがある場合は削除できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行中です。

SetMaxFieldSizeメソッド

機能

アプリケーションで受け取るフィールドの長さを設定します。

形式

フィールド名で指定する場合

void SetMaxFieldSize(LPCTSTR lpctFieldName， UINT32 dwMaxSize=0)
                                                 throw DBSQLCA

インデクス番号で指定する場合

void SetMaxFieldSize(UINT32 dwIndex，UINT32 dwMaxSize=0)
                                                 throw DBSQLCA

引数

lpctFieldName

フィールド名を指定します。

dwIndex

1から始まるフィールドの番号を指定します。

dwMaxSize

アプリケーションで受け取るフィールドの長さを，0以上のバイト数で指定します。この引数で指定された値が，データベースでの定義長よりも大きい場合，引数で指定した値は無視されます。

0を指定すると，データベース中の定義長が仮定されます。

戻り値

なし

機能詳細

アプリケーションで受け取るフィールドの長さをバイト数で指定します。アプリケーションで必要とするデータがフィールド値全体でなく，フィールド値の一部である場合に利用します。データベース中のフィールドの定義長ではないことに注意してください。

このメソッドを呼び出す前に，Executeメソッドを呼び出しておく必要があります。

指定したフィールドが繰り返し列の場合は，設定した値は無視されます。繰り返し列に対しては，取得するフィールド長は指定できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_BEFORE_EXECUTE

Executeが実行されていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwIndexが1よりも小さいです。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

DB_DRV_ERROR_INVALID_ARGUMENT

指定した引数の範囲が不正です。

DB_DRV_ERROR_INVALID_MAX_SIZE

バッファの最大長の指定値が不正です。

SetMaxRowsメソッド

機能

ResultSetに検索するレコード数の最大値を指定します。

形式

void SetMaxRows(UINT32 dwMaxSize=MAX_ROWS_DEFAULT) throw DBSQLCA

引数

dwMaxSize

ResultSetに検索するレコード数の最大値を指定します。必ず１以上を指定してください。

システムデフォルト値は，MAX_ROWS_DEFAULTです(=100が仮定されます)。

SQL/Kの場合，指定できる範囲は4096レコード以下です。

戻り値

なし

機能詳細

DBResultSetオブジェクトで取得できるレコード数の最大値を指定します。

一度の読み込み（GetResultSetメソッド，又はPageNextメソッドの呼び出し）で，データベースから取得するレコード数の最大値を設定します。

指定できるレコード数の範囲

指定できるレコード数の最大値は使用しているDBMSによって異なります。各DBMSごとに，指定できるレコード数の最大値を次に示します。

ORACLEを使用している場合：32767レコード以下

ORACLE以外のDBMSの場合：4096レコード以下

1レコードのフィールド数は，DBResultSetMetaDataオブジェクトのGetColumnCountメソッドを呼び出して取得できます。

更新可能なDBResultSetオブジェクトでの扱い

DBResultSetオブジェクトが更新可能なオブジェクトとして生成された場合(SetResultSetTypeメソッドの引数swTypeでTYPE_EXCLUSIVEを指定した場合)，SetMaxRowsメソッドによる指定は無視され，常に１が仮定されます。更新可能なDBResultSetは常に1レコードだけを読み込みます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwMaxSizeが１より小さい値です。

SetResultSetTypeメソッド

機能

DBResultSetオブジェクトの生成オプションを指定します。

DBResultSetオブジェクトを生成するときに，参照専用，又は更新可能のどちらで生成するか選択します。検索レコードに対するロック方法を指定します。

検索時にバッファを幾つ使うかも指定できます。

また，BLOB型データを扱う場合，その取得方法についても指定します。

形式

void SetResultSetType (UINT16
                      swType = TYPE_EXCLUSIVE|BUFFER_TYPE_SINGLE，
                      DBR_BLOB_TYPE nBLOBType = TYPE_BLOB_MEMORY，
                      LPCTSTR lpctBLOBFileName = NULL)
                                                   throw DBSQLCA

引数

swType

次の三つの値を指定します。

検索したレコードに対するロック方法

検索時に使用するバッファ数

VARCHARデータをDBR_BINARY型で取得した場合のLengthメンバ，RealLengthメンバの意味

指定する値は，上記三つの値の論理和になります。

このメソッドを実行しなかった場合の動作は，TYPE_EXCLUSIVE | BUFFER_TYPE_SINGLE | VARCHAR_LENGTH_DEFを指定した場合と同じになります。

検索したレコードに対するロック方法

次に示すTYPE_EXCLUSIVE，TYPE_EXCLUSIVE2，TYPE_NONE，TYPE_WAIT，TYPE_NOWAIT，TYPE_SHAREDのどれかの値で，検索したレコードに対するロック方法を指定します。

TYPE_EXCLUSIVE又はTYPE_EXCLUSIVE2
DBResultSetオブジェクトからレコードの追加，更新，削除をする場合は，このオプションを指定します。検索したレコードに排他ロックが掛かり，他のトランザクションからの参照・更新を制限できます。実際に排他ロックが掛かるのは，このメソッドを実行した時点からです。
このオプションで生成したDBResultSetオブジェクトでは，一度に複数のレコードを読み込めないため，SetMaxRowsで指定したレコード数は無視されます。また，検索条件に一致する次のレコードをアクセスするには，Nextメソッドを使用します。TYPE_EXCLUSIVE，又はTYPE_EXCLUSIVE2で生成したオブジェクトの場合，カーソル制御のメソッドとしてはNextメソッドだけが指定できます。Nextメソッドについては，「5.7 DBResultSetクラスの詳細」を参照してください。

なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。なお，HiRDB以外のDBMSではTYPE_EXCLUSIVEとTYPE_EXCLUSIVE2で同じオプション文字列へ変換されて実行されます。

ORACLE：FOR UPDATE

SQL Anywhere,Adaptive Server Anywhere：オプション文字列は付加しません。

HiRDB
TYPE_EXCLUSIVE：FOR UPDATE
TYPE_EXCLUSIVE2：WITH EXCLUSIVE LOCK FOR UPDATE

XDM/RD：WITH EXCLUSIVE LOCK FOR UPDATE

SQL Server：(テーブル名の後に)UPDLOCK

SQL/K：FOR UPDATE
詳細については，マニュアル「SQL/K」を参照してください。

XDM/SD：LOCK SU

TYPE_NONE
参照専用のDBResultSetオブジェクトを生成します。検索するレコードに対して，参照ロックを掛けます。
このオプションで生成したDBResultSetオブジェクトでは，複数レコードを読み込めます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

ORACLE：付加しません。

SQL Anywhere，Adaptive Server Anywhere：付加しません。

HiRDB：付加しません。

XDM/RD：付加しません。

SQL Server：付加しません。

SQL/K：付加しません。

XDM/SD：付加しません(SDEXCLUSIVE値が仮定されます)。
SDEXCLUSIVE値の詳細については，マニュアル「Database Connection Server」のコントロール空間起動制御文を参照してください。

TYPE_WAIT(HiRDB，XDM/RD，SQL Server，SQL/K，XDM/SDの場合だけ有効です)
参照専用のDBResultSetオブジェクトを生成します。
検索したレコードに対して参照ロックを掛けますが，見終わった行から排他制御を解除します。このため，DABroker for C++では，ResultSetにレコードを読み込んだ時点，つまり，GetResultSetメソッド，又はPageNextメソッドが完了した時点で，ロックが解除されています。
このオプションで生成したDBResultSetオブジェクトでは，複数レコードを読み込めます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

HiRDB：WITHOUT LOCK WAIT

XDM/RD：WITHOUT LOCK WAIT

SQL Server：(テーブル名の後に)HOLDLOCK

SQL/K：付加しません。

XDM/SD：LOCK SR

TYPE_NOWAIT(HiRDB，XDM/RD，SQL Server，SQL/K，XDM/SDの場合だけ有効です)
参照専用のDBResultSetオブジェクトを生成します。該当するレコードをほかのトランザクションが更新中だったり，TYPE_EXCLUSIVEで検索している場合でも読み込めます。排他制御を全くしません。
このオプションで生成したDBResultSetオブジェクトでは，複数レコードを読み込めます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

HiRDB：WITHOUT LOCK NOWAIT

XDM/RD：WITHOUT LOCK NOWAIT

SQL Server：(テーブル名の後に)NOLOCK

SQL/K：付加しません。

XDM/SD：LOCK NR

TYPE_SHARED(HiRDB，XDM/RD，SQL/K，XDM/SDの場合だけ有効です)
検索するレコードに共有ロックを掛けます。共有ロックの掛かったレコードは，ほかのトランザクションから参照できますが，更新はできません。

HiRDB：WITH SHARE LOCK

XDM/RD：WITH SHARE LOCK

SQL/K：付加しません。

XDM/SD：LOCK SR

検索時に使用するバッファ数

次に示すBUFFER_TYPE_SINGLE，又はBUFFER_TYPE_DOUBLEのどちらかの値で，検索時に使用するバッファ数を指定します。指定を省略した場合は，BUFFER_TYPE_SINGLEが仮定されます。なお，バッファの利用方法については，「3.3.3 検索性能の向上策」を参照してください。

BUFFER_TYPE_SINGLE
検索結果を保持するバッファを一つだけ使います。

BUFFER_TYPE_DOUBLE
検索結果を保持するバッファを二つ使います。

VARCHARデータをDBR_BINARY型で取得したときのLengthメンバ，RealLengthメンバの意味

次に示す値のどれか一つを指定します。

VARCHAR_LENGTH_DEF

GetFieldメソッドの形式２を使用した場合，又は形式３を使用してもデータの切り捨てが発生しなかった場合
Length：カラムの定義長※
RealLength：0

GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合
Length：切り捨てたデータ長
RealLength：カラムの定義長※
注※　SetMaxFieldSizeメソッドで取得データ長を指定している場合は，「カラムの定義長」ではなく「SetMaxFieldSizeメソッドで指定したサイズ」となります。

VARCHAR_LENGTH_REAL

GetFieldメソッドの形式2を使用した場合，又は形式3を使用してもデータの切り捨てが発生しなかった場合
Length：実際のデータ長※
RealLength：0

GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合
Length：切り捨てたデータ長
RealLength：実際のデータ長※
注※　SetMaxFieldSizeメソッドでカラムの定義長よりも小さいサイズを指定している場合は，データベースから取得したデータは実際のデータよりも小さい場合があるため，「実際のデータ長」ではなく「取得データ長」となります。

nBLOBType

BLOB型データの取得方法として，次のどちらかを指定します。

TYPE_BLOB_MEMORY
メモリ上に一括して取得します。
ResultSetのレコード数が1の場合，BLOB型データをすべて取得します。
ResultSetのレコード数が複数の場合，先頭から32Kバイトまでを取得します。

TYPE_BLOB_FILE
ファイルを経由して取得します。
引数lpctBLOBFileNameに指定された名称が，BLOB型データを格納するファイルのプレフィックスとして使用されます。
なお，引数swTypeでBUFFER_TYPE_DOUBLEを指定している場合，検索の途中で終了しても先読みしているResultSet分のファイルは作成されます。

lpctBLOBFileName

BLOB型データを格納するファイルのプレフィックスを指定します。

引数nBLOBTypeでTYPE_BLOB_FILEを指定した場合，BLOB型データを格納するファイルのプレフィックスには，この引数で指定した名称が使われます。TYPE_BLOB_FILE以外の値を指定した場合は，この引数での指定は無視されます。

BLOB型データを格納したファイル名称は，「プレフィックス+レコード番号+フィールド番号」で表されます。NULLが指定された場合，「DBConnectionの名称+DBStatementの名称」が仮定されます。

戻り値

なし

機能詳細

検索レコードに対するロック方法，検索時にバッファを幾つ使うか，及びBLOB型データの取得方法について指定します。

指定した各引数の値は，次にGetResultSetメソッドを実行したときから有効になります。

ファイル上でBLOB型データを扱う場合の制限事項

データの格納されているファイルは，DABrokerが終了しても削除されません。アプリケーション自身で削除してください。

作成されたファイルのアクセス権限は，アプリケーションの実行ユーザ及びデフォルトの権限に依存します。例えば，HP-UX上で"user1"が実行しているアプリケーションで，デフォルトumaskが0666の場合，取得したBLOB型データが格納されるファイルも，"user1"の所有する0666のアクセス権限が付与されたファイルとして生成されます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

WaitForDataSourceメソッド

機能

DBStatementオブジェクトで要求した実行待ち，及び実行中の非同期処理が終了するまで待ちます。非同期処理中に同期を取りたい場合に利用できます。

形式

BOOLEAN WaitForDataSource(UINT32 swWaitTime = DBR_INFINITE)

引数

swWaitTime

非同期処理の終了を待つための最大時間（単位：ミリ秒），又はDBR_INFINITEを指定します。

指定した時間内に非同期処理が終了した場合，TRUEが返ります。指定した時間を経過しても非同期処理が終了しない場合，FALSEが返ります。非同期実行中のSQLがない場合は，TRUEが返ります。

DBR_INFINITEを指定した場合はタイムアウト時間を設定しません。非同期処理が終了するまで待ち続けます。

同期実行時はすぐにTRUEを返します。

戻り値

データ型：BOOLEAN

TRUE：すべての非同期処理が終了しました。

FALSE：タイムアウト時間が経過しました。

機能詳細

DBStatementオブジェクトで要求した実行待ち，及び実行中の非同期処理(SQL)が，終了するのを待ちます。

DBConnectionクラスのWaitForDataSourceメソッドとの違い

DBStatementオブジェクトのWaitForDataSourceメソッドでは，WaitForDataSourceメソッドを実行したDBStatementオブジェクトの非同期実行処理が終了するまで待ちます。ほかのオブジェクトの非同期実行処理については待ちません。そのため，ほかのオブジェクトの非同期実行処理が実行中でも，WaitForDataSourceメソッドを呼び出したオブジェクトの非同期実行処理が終了すれば，WaitForDataSourceメソッドはTRUEを返します。

同じDBConnectionオブジェクトで実行しているすべての非同期実行処理が終了するのを待ちたい場合は，DBConnectionクラスのWaitForDataSourceメソッドを実行してください。

発生する例外

なし

5.7　DBResultSetクラスの詳細

検索結果を管理するには，DBResultSetクラスを利用します。このクラスは，検索結果の取得，そのためのカーソルの移動，更新などのメソッドを提供するクラスです。

DBResultSetオブジェクトが生成されると，フィールド値を参照するためのGetFieldメソッドや，更新のためのSetFieldメソッドではレコード単位にデータを扱います。どのレコードを処理対象にするかはカーソルを使います。カーソルの位置付いたレコードをカレントレコードと呼び，複数のレコードを処理するためにはカーソルを順次移動して処理対象を変更していきます。

参照専用

DBStatementオブジェクト，DBPreparedStatementオブジェクト又はDBCallableStatementオブジェクトのSetResultSetTypeメソッドでTYPE_NONEなどを指定して生成します。

参照専用のDBResultSetオブジェクトは，一度に複数のレコードを読み込めます。1度に読み込める最大レコードの数は，SetMaxRowsメソッド(DBStatementオブジェクト，DBPreparedStatementオブジェクト，又はDBCallableStatementオブジェクト)で指定できます。また，読み込んだレコードは，GetFieldメソッドを呼び出して参照します。

更新可能

DBStatementオブジェクト，DBPreparedStatementオブジェクト，又はDBCallableStatementオブジェクトのSetResultSetTypeメソッドでTYPE_EXCLUSIVEを指定して生成します（検索するレコードに対してロックをかけます）。

更新可能なDBResultSetオブジェクトは，一度に一つのレコードしか読み込めませんが，読み込んだレコードに対して，EditメソッドやUpdateメソッドなどの更新用のメソッドを使って直接データを変更できます。このため，個別にUPDATE文などのSQL文を使わなくても，検索したレコードを直接更新するアプリケーションを作成できます。

機 能 | メソッド名
カーソルをResultSetの先頭からn番目のレコードに移動します。 | Absolute
カーソルをResultSetの最後のレコードへ移動します。 | Bottom
カレントレコードを削除します。 | Delete
カレントレコードを更新するための準備をします。 | Edit
フィールド名称に対応するフィールドのインデクスを取得します。 | FindColumn
検索したすべてのレコードの先頭から数えた，カレントレコードの位置を取得します。 | GetCurrent
ResultSetの先頭レコードから数えた，カレントレコードの位置を取得します。 | GetCurrentOfResultSet
SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。 | GetErrorStatus
カレントレコードのフィールドの値を取得します。 | GetField
DBResultSetMetaDataオブジェクトを生成します。 | GetMetaData
ResultSetのレコードの総数を取得します。 | GetRowCount
DBResultSetオブジェクトに非同期実行中（又は実行待ち）のステートメントがあるかどうかを確認します。 | InExecute
カーソルの位置が，ResultSetのレコードの最後を超えたかどうかを確認します。 | IsEOF
フィールドの値がNULLかどうかを確認します。 | IsNull
カーソルを次のレコードへ移動します。 | Next
カーソルを次のResultSetの先頭へ移動します。 | PageNext
対象となるオブジェクトを生成したDBStatementオブジェクト，DBPreparedStatementオブジェクト，又はDBCallableStatementオブジェクトのポインタを取得します。 | Parent
カーソルを前のレコードへ移動します。 | Previous
先頭のレコードから再読み込みをします。 | Refresh
カーソルを現在のレコードの位置からn個分移動します。 | Relative
DBResultSetオブジェクト(自分自身)を削除します。 | Remove
指定されたフィールドにデータを設定します。 | SetField
指定されたフィールドにNULLを設定します。 | SetNull
カーソルをResultSetの先頭のレコードへ移動します。 | Top
フィールドの更新結果をデータベースへ通知します。 | Update
DBResultSetオブジェクトで要求した実行待ち，及び実行中の非同期処理が終了するまで待ちます。 | WaitForDataSource

＜この節の構成＞

Absoluteメソッド

Bottomメソッド

Deleteメソッド

Editメソッド

FindColumnメソッド

GetCurrentメソッド

GetCurrentOfResultSetメソッド

GetErrorStatusメソッド

GetFieldメソッド

GetMetaDataメソッド

GetRowCountメソッド

InExecuteメソッド

IsEOFメソッド

IsNullメソッド

Nextメソッド

PageNextメソッド

Parentメソッド

Previousメソッド

Refreshメソッド

Relativeメソッド

Removeメソッド

SetFieldメソッド

SetNullメソッド

Topメソッド

Updateメソッド

WaitForDataSourceメソッド

Absoluteメソッド

機能

カーソルをResultSetの先頭からn番目のレコードに移動します。

形式

void Absolute(UINT32 dwCount) throw DBSQLCA

引数

dwCount

カーソルをどのレコードに位置付けるか，レコードのインデクスを指定します。

ResultSetの範囲を超えるような番号は指定できません。

戻り値

なし

機能詳細

カーソルをResultSetの先頭から引数dwCountで指定した番号のレコードに移動します。

カーソルがレコードの最後を超えている場合（IsEOFメソッドでTRUEが返る場合），このメソッドは呼び出せません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，ResultSetがまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_OUT_OF_RESULTSET

ResultSetの範囲を超えるような呼び出しです。

Bottomメソッド

機能

カーソルをResultSetの最後のレコードへ移動します。

形式

void Bottom(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

カーソルをResultSetの最後のレコードへ移します。

カーソルがレコードの最後を超えている場合（IsEOFメソッドでTRUEが返る場合），このメソッドは呼び出せません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，ResultSetがまだ取得できていません。

DB_ERROR_OUT_OF_RESULTSET

ResultSetの範囲を超えるような呼び出しです。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

Deleteメソッド

機能

カレントレコードを削除します。

形式

void Delete(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

カレントレコードを削除します。

トランザクションを設定したアプリケーションの場合，コミットされるまでデータベースに反映されません。

このメソッドは，非同期実行可能なメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_NOT_IN_EDIT

Editメソッドが実行されていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行中です。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

Editメソッド

機能

カレントレコードを更新するための準備をします。

形式

void Edit(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

カーソルを位置付けたレコードに対する更新の準備をします。

実際にカレントレコードを更新するためには，Editメソッドを呼び出した後，SetFieldメソッドを呼び出してフィールドの値を更新します。必要なデータを更新した後にUpdateメソッドを呼び出すと，カレントレコードの更新情報はデータベースへ送信されます。

トランザクションを設定したアプリケーションの場合，送信されたデータはコミットされるまでデータベースに反映されません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_CURRENT_RECORD_DELETED

カレントレコードが削除されています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_CANNOT_EDIT_LAST_RECORD

カレントレコードがありません(検索結果の最後がカレントレコードの場合)。

DB_ERROR_CANT_UPDATE

検索結果が読み込み専用です。

FindColumnメソッド

機能

フィールド名称に対応するフィールドのインデクスを取得します。

形式

UINT32 FindColumn(LPCTSTR lpctFieldName) throw DBSQLCA

引数

lpctFieldName

フィールド名を指定します。

なお，SELECT文でフィールド演算や，COUNTなどの関数を使用した場合，フィールド名はデータベースによって決められます。このような場合にフィールド名を調べるためには，DBResultSetMetaDataオブジェクトのGetColumnNameメソッドを呼び出します。

戻り値

データ型：UINT32

フィールドの番号を取得します。

機能詳細

指定されたフィールド名に対応したフィールド番号を取得します。

フィールド番号は，SQL文中での出現順に割り当てられます。

引数に指定されたフィールド名がDBResultSetオブジェクト中で重複していた場合，FindColumnメソッドは最初に検索したフィールド番号（フィールド番号の最も若いもの）を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_NOT_FOUND

指定したフィールドが見つかりません。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

GetCurrentメソッド

機能

検索したすべてのレコードの先頭から数えた，カレントレコードの位置を取得します。

形式

UINT32 GetCurrent(void) throw DBSQLCA

引数

なし

戻り値

データ型：UINT32

カレントレコードの先頭レコードからの位置を取得します。

機能詳細

検索したすべてのレコードの先頭を1として数えた，カレントレコードの位置を取得します。

レコードの終端（EOF）でGetCurrentメソッドを呼び出すと，検索レコード数+1の値を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

GetCurrentOfResultSetメソッド

機能

ResultSetの先頭レコードから数えた，カレントレコードの位置を取得します。

形式

UINT32 GetCurrentOfResultSet(void) throw DBSQLCA

引数

なし

戻り値

データ型：UINT32

カレントレコードのResultSetの先頭レコードからの位置を取得します。

機能詳細

ResultSetのレコードの先頭を1して数えた，カレントレコードの位置を取得します。

ResultSetが0レコードの場合も1を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，ResultSetがまだ取得できていません。

GetErrorStatusメソッド

機能

SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。

形式

DBSQLCA *GetErrorStatus(void)

引数

なし

戻り値

データ型：DBSQLCA*

DBSQLCAオブジェクトへのポインタ。

機能詳細

DBSQLCAオブジェクトへのポインタを取得します。

非同期処理のときは，エラーが発生しても直にエラーを取得できません。このため，ユーザは任意の時点でエラーを確認する必要があります。

非同期実行時にエラーが発生した場合，DBSQLCAオブジェクトにエラー情報が設定されます。

DBSQLCAオブジェクトでは，非同期実行中に発生したエラー情報を最大100回分保存できます。エラー情報は，新しいエラー情報から100回分保存されるため，エラー情報を確認したあとはDBSQLCAクラスのDeleteメソッドを呼び出して，不要なエラー情報をクリアしておいてください。

発生する例外

なし

GetFieldメソッド

機能

カレントレコードのフィールドの値を取得します。

形式１：ユーザ確保領域へコピーする場合

インデクス番号指定

void GetField(UINT32 dwIndex，INT16  *psData) throw DBSQLCA
void GetField(UINT32 dwIndex，INT32  *plData) throw DBSQLCA
void GetField(UINT32 dwIndex，UINT16 *pswData) throw DBSQLCA
void GetField(UINT32 dwIndex，UINT32 *pdwData) throw DBSQLCA
void GetField(UINT32 dwIndex，SINGLE *psfData) throw DBSQLCA
void GetField(UINT32 dwIndex，DOUBLE *pdfData) throw DBSQLCA
void GetField(UINT32 dwIndex，DBR_DATETIME *pdtData)
                                              throw DBSQLCA
void GetField(UINT32 ui32Index，DBRArrrayDataConstPtr*
                                     cparData)throw DBSQLCA

フィールド名指定

void GetField(LPCTSTR lpctFieldName，INT16  *psData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，INT32  *plData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，UINT16 *pswData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，UINT32 *pdwData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，SINGLE *psfData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，DOUBLE *pdfData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，DBR_DATETIME *pdtData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，DBRArrrayDataConstPtr*
                                    cparData) throw DBSQLCA

形式２：DABrokerが用意した領域を参照する場合

インデクス番号指定

void GetField(UINT32 dwIndex，LPTSTR *lptData) throw DBSQLCA
void GetField(UINT32 dwIndex，DBR_BINARY *pblobData)
                                              throw DBSQLCA

フィールド名指定

void GetField(LPCTSTR lpctFieldName，LPTSTR *lptData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName，DBR_BINARY *pblobData)
                                              throw DBSQLCA

形式３：ユーザ確保領域へコピーする場合

インデクス番号指定

UINT32 GetField(UINT32 dwIndex，LPTSTR lptData，UINT32 dwSize)
                                              throw DBSQLCA
UINT32 GetField(UINT32 dwIndex，DBR_BINARY *pblobData，
                               UINT32 dwSize) throw DBSQLCA

フィールド名指定

UINT32 GetField(LPCTSTR lpctFieldName，LPTSTR lptData，
                               UINT32 dwSize) throw DBSQLCA
UINT32 GetField(LPCTSTR lpctFieldName，DBR_BINARY *pblobData，
                               UINT32 dwSize) throw DBSQLCA

引数

dwIndex, ui32Index

1から始まるフィールドの番号を指定します。指定するフィールドの番号は，SQL文中での出現順に割り当てられます。

lpctFieldName

フィールド名を指定します。

なお，SELECT文でフィールド演算や，COUNTなどの関数を使用した場合，フィールド名はデータベースによって決められます。このような場合にフィールド名を調べるためには，DBResultSetMetaDataオブジェクトのGetColumnNameメソッドを呼び出します。取得するフィールド名は，重複することもあります。このため，SELECT文でJOINを指定したときなどに，フィールド名が重複している可能性がある場合や，SELECT文でのフィールド演算などでフィールド名が不定の場合は，フィールドの番号を使用してください。

*xxData（形式１，３の第２引数）

データをコピーする領域のポインタを指定します。

*xxData（形式２の第２引数）

ポインタ変数を指定します。

dwSize

コピー先の領域サイズをバイト数で指定します。

戻り値

データ型：UINT32

コピーした文字列の長さが返ります。フィールドの値を指定された型にキャストして取得します（形式３の場合）。

機能詳細

形式１の処理

フィールド値を，引数に指定されたポインタが指す領域にコピーします。

形式２の処理

DABrokerが確保した領域にフィールド値をコピーし，その先頭アドレスをポインタ変数に設定します。このため，LPTSTRまたはDBR_BINARYの変数の確保だけで，フィールド値をコピーする領域を確保する必要はありません。

フィールド値の有効期間
フィールド値は，GetResultSetメソッドやNextメソッドなどで次のResultSet取得時まで，又はResultSetを削除するまで有効です。前のResultSetのフィールド値を残したい場合には，ユーザが確保した領域にデータを取得してください。

形式３の処理

LPTSTR型
引数lptDataの指す領域は，引数dwSizeバイト分確保されている必要があります。

引数dwSizeがデータベースから取得したデータの長さ以下の場合
データベースのデータ型が可変長文字列型の場合，引数dwSize-1分のデータ（最後にはNULL終端文字が入る）がコピーされ，残りのデータは切り捨てられます。
データベースのデータ型が固定長文字列の場合，引数dwSize分のデータ（最後にNULL終端文字が入らない）がコピーされ，残りのデータは切り捨てられます。

引数dwSizeがデータベースから取得したデータの長さよりも大きい場合
文字列はすべてコピーします。固定長文字列の場合，残りの領域にはNULL終端文字が埋められます。

DBR_BINARY型
フィールド値をコピーする領域（LPTSTR型）を確保し，DBR_BINARY型変数（構造体）のDataメンバに設定し，この変数をGetFieldメソッドの引数に指定します。引数dwSizeはこの領域のサイズを指定します。
引数dwSizeがデータベースから取得したデータの長さ以下の場合，引数dwSize分のデータ（最後にNULL終端文字が入らない）がコピーされ，残りのデータは切り捨てられます。引数dwSizeがデータベースから取得したデータの長さより大きい場合，データはすべてコピーされ，残りの領域にはNULL終端文字が埋められます。

データ変換について

データベースのデータ型とGetFieldの引数に指定したデータ型とが異なる場合は，値の変換できるものについては引数で指定したデータ型に変換して返します。

文字列から数値データ型への変換に失敗した場合は0を返します。データ型の変換規則については，「7.1 クラスライブラリで扱うデータ型と変換規則」のGetField，GetParamメソッドでのデータ型変換規則を参照してください。

NULL値の扱い

NULLであるフィールドに対してGetFieldメソッドを呼び出すと，戻される値は意味のない値(0，空文字列，要素がすべて0，空文字列からなる構造体，又は不定値)となります。

このため，NULLが格納されている可能性のあるフィールドでは，IsNullメソッドを呼び出して，NULL値かどうかを確認してください。

DBR_BINARY型で値を取得した場合

各メンバの値は次のようになります。

SetMaxFieldSizeメソッドで指定した長さよりも実データ長が長い場合
Length：取得したデータ長
RealLength：実データ長
Data：Lengthの長さ分のデータ（データの切り捨てあり）

SetMaxFieldSizeメソッドで指定した長さよりも実データ長が短い，又は等しい場合
Length：取得したデータ長
RealLength：0
Data：Lengthの長さ分のデータ（データの切り捨てなし）

TYPE_BLOB_FILEについて

SetResultSetTypeメソッドで，TYPE_BLOB_FILEを指定した場合，BLOB型のフィールドに対するGetFieldメソッドの引数にはファイル名称が返ります。この場合，GetFieldメソッドの引数の型には，文字列と同じLPTSTRを使います。

SQL/Kの場合

データが設定されていない列を検索しても，GetFieldメソッドを実行すると，VOS K/FSのファイル定義で定義されたデータを返します。ファイル定義の詳細は，マニュアル「ファイル運用」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_NOT_FOUND

引数dwIndexの範囲が不正です。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldName，又は引数xxDataにNULLを指定しています。

DB_ERROR_DATA_TRUNCATED

取得した値を指定した型に変換できません。

DB_DRV_ERROR_INVALID_ARGUMENT

引数に指定したフィールド名は不正です。

DB_ERROR_CONVERT_ARRAY_TO_SCALAR

引数cparDataで繰り返し列以外のフィールド値を取得しました，又は引数cparData以外の引数で繰り返し列の値を取得しようとしました。

GetMetaDataメソッド

機能

DBResultSetMetaDataオブジェクトを生成します。

DBResultSetMetaDataオブジェクトから，ResultSetのフィールド数や，属性などが取得できます。

形式

DBResultSetMetaData *GetMetaData(void) throw DBSQLCA

引数

なし

戻り値

データ型：DBResultSetMetaData*

DBResultSetMetaDataオブジェクトへのポインタ。

機能詳細

DBResultSetMetaDataオブジェクトを生成し，生成したオブジェクトへのポインタを返します。

発生する例外

なし

GetRowCountメソッド

機能

ResultSetのレコードの総数を取得します。

形式

UINT32 GetRowCount(void) throw DBSQLCA

引数

なし

戻り値

データ型：UINT32

ResultSet中のレコードの総数を取得します。

機能詳細

DBResultSetオブジェクト中に読み込まれたレコード数を取得します。

GetRowCountメソッドの返す値がGetMaxRowsメソッドの返す値よりも少ない場合，データベース中のすべての検索結果が読み込まれたことを示します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

InExecuteメソッド

機能

DBResultSetオブジェクトに非同期実行中（又は実行待ち）のステートメントがあるかどうかを確認します。

形式

BOOLEAN  InExecute(void)

引数

なし

戻り値

データ型：BOOLEAN

TRUE：ステートメントが非同期実行中(又は実行待ち)です。

FALSE：非同期実行中(又は実行待ち)ではありません。

機能詳細

InExecuteメソッドを実行したオブジェクト内のステートメントが非同期実行中(又は実行待ち）かどうかを確認します。

非同期実行中(又は実行待ち）の場合はTRUEを，非同期実行中(又は実行待ち）でない場合はFALSEを返します。

同期実行接続時はFALSEを返します。

コネクション内のすべてのステートメントを対象に非同期実行中かどうかを確認するには，InWaitForDataSourceメソッドを呼び出します(DBConnectionクラス)。

発生する例外

なし

IsEOFメソッド

機能

カーソルの位置が，ResultSetのレコードの最後を超えたかどうかを確認します。

形式

BOOLEAN  IsEOF(void) throw DBSQLCA

引数

なし

戻り値

データ型：BOOLEAN

TRUE：カーソルの位置が，ResultSetのレコードの最後を超えました。

FALSE：カーソルの位置は，まだResultSetの途中のレコードにあります。

機能詳細

Nextメソッドで次のレコードへカーソルを移動した後，まだレコードがあるかどうかを判断するときに使います。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

IsNullメソッド

機能

フィールドの値がNULLかどうかを確認します。

形式

インデクス番号で指定する場合

BOOLEAN  IsNull(UINT32   dwIndex) throw DBSQLCA

フィールド名称で指定する場合

BOOLEAN  IsNull(LPCTSTR lpctName) throw DBSQLCA

引数

dwIndex

1から始まるフィールドの番号を指定します。

lpctName

フィールド名を指定します。

戻り値

データ型：BOOLEAN

TRUE：フィールドの値がNULLです。

FALSE：フィールドの値はNULLではありません。

機能詳細

指定されたフィールドの値がNULL値かどうかを確認します。

NULLはC言語で使用するNULLポインタの意味ではなく，データベースシステムでは「値がない」ことを意味します。

NULLであるフィールドに対してGetFieldメソッドを呼び出すと，戻される値は意味のない値（0，NULL文字列，要素がすべて0，NULL文字列からなる構造体，又は不定値）となるため注意してください。

SQL/Kの場合，データが設定されていない列を検索しても，IsNullメソッドの戻り値は常にFALSEです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_NOT_FOUND

引数dwIndexの範囲が不正です。

DB_ERROR_CANNOT_BE_NULL

引数lpctNameにNULLを指定しています。

DB_DRV_ERROR_INVALID_ARGUMENT

引数に指定したフィールド名は不正です。

Nextメソッド

機能

カーソルを次のレコードへ移動します。

形式

void Next(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

次のレコードへカーソルを移します。

更新可能なResultSetの場合，検索条件に一致する次のレコードをResultSetに読み込みます。参照専用のResultSetの場合，カーソルを次のレコードへ移します。ResultSetの最後のレコードにカーソルがある場合，Nextメソッドが呼び出されると，次のレコードを読み込みます。

次のレコードをResultSetに読み込む場合は，非同期実行可能です。単にカーソルを次のレコードに移す場合は，非同期に実行しません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_OUT_OF_RANGE

レコード終端を超えてメソッドが呼び出されました。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

PageNextメソッド

機能

カーソルを次のResultSetの先頭へ移動します。

形式

void PageNext(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

次のレコード群(SetMaxRowsで設定したレコード数)を読み込み，ResultSet中のレコードを置き換えます。カーソルは次のレコード群の先頭のレコードに位置付けられます。

すべてのレコードが読み込まれている（IsEOFメソッドでTRUEが返る）ときにこのメソッドは呼び出せません。

このメソッドは，非同期実行可能なメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_OUT_OF_RANGE

レコード終端を超えてメソッドが呼び出されました。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

Parentメソッド

機能

対象となるオブジェクトを生成したDBStatementオブジェクト，DBPreparedStatement，又はDBCallableStatementオブジェクトオブジェクトのポインタを取得します。

形式

LPOBJECT Parent(void)

引数

なし

戻り値

データ型：LPOBJECT

対象となるオブジェクトを生成したDBStatementオブジェクト，DBPreparedStatementオブジェクト，又はDBCallableStatementオブジェクトへのポインタ。

機能詳細

なし

発生する例外

なし

Previousメソッド

機能

カーソルを前のレコードへ移動します。

形式

void Previous(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

カーソルを一つ前のレコードへ移します。

ResultSetの先頭でPreviousメソッドは呼び出せません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_OUT_OF_RESULTSET

ResultSetの範囲を超えるような呼び出しです。

Refreshメソッド

機能

先頭レコードから再読み込みをします。

形式

void Refresh(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

データベースからレコードを再検索して，先頭レコードから再読み込みをします。

DBResultSetオブジェクトがDBPreparedStatementオブジェクトから生成された場合，Refreshメソッドを呼び出す前にDBPreparedStatementオブジェクトのSetParamメソッドを呼び出して?パラメタの値を変更できます。この場合，Refreshメソッドによって再検索された結果は，新しく設定された?パラメタの値を反映したものになります。

例えば「商品番号」を?パラメタとして使用している場合，Refreshメソッドを呼び出す前にSetParamメソッドで新しい商品番号を設定しておくと，Refreshメソッドを呼び出した結果再検索されたデータは，新しい商品番号のデータとなります。

このメソッドは非同期実行可能なメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

Relativeメソッド

機能

カーソルを現在のレコードの位置からn個分移動します。

形式

void Relative(INT32  lCount) throw DBSQLCA

引数

lCount

指定した数分現在のレコードの位置からカーソルを移動します。

戻り値

なし

機能詳細

現在の位置から数えて，引数lCount番目のレコードにカーソルを移します。

正の値を指定した場合現在の位置より指定した値分後ろのレコードへ，負の値を指定した場合は指定した値分前のレコードへカーソルを移動します。

すべてのレコードが読み込まれている（IsEOFメソッドでTRUEが返る）ときにこのメソッドは呼び出せません。

また，引数lCountに検索結果の範囲を超えるような値は指定できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_OUT_OF_RESULTSET

ResultSetの範囲を超えるような呼び出しです。

Removeメソッド

機能

DBResultSetオブジェクト(自分自身)を削除します。

形式

void Remove(void)

引数

なし

戻り値

なし

機能詳細

DBResultSetオブジェクト(自分自身)を削除します。

非同期処理中に実行待ち，又は実行中のステートメントがある場合は削除できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中ステートメントがあります。

DB_ERROR_RESULTSET_NOTEXIST

非同期実行時に検索結果がまだ取得できません。

SetFieldメソッド

機能

指定されたフィールドにデータを設定します。

形式

インデクスで指定する場合

void SetField(UINT32 dwIndex，INT16 sData) throw DBSQLCA
void SetField(UINT32 dwIndex，INT32 lData) throw DBSQLCA
void SetField(UINT32 dwIndex，UINT16 swData) throw DBSQLCA
void SetField(UINT32 dwIndex，UINT32 dwData) throw DBSQLCA
void SetField(UINT32 dwIndex，SINGLE sfData) throw DBSQLCA
void SetField(UINT32 dwIndex，DOUBLE dfData) throw DBSQLCA
void SetField(UINT32 dwIndex，LPCTSTR lpctData)
                                            throw DBSQLCA
void SetField(UINT32 dwIndex，const DBR_DATETIME& dtData)
                                            throw DBSQLCA
void SetField(UINT32 dwIndex，const DBR_BINARY& blobData)
                                            throw DBSQLCA
void SetField(UINT32 ui32Index，const DBRArrayDataConstPtr&
                                  cparData) throw DBSQLCA

フィールド名で指定する場合

void SetField(LPCTSTR lpctFieldName，INT16 sData)
                                            throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，INT32 lData)
                                            throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，UINT16 swData)
                                            throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，UINT32 dwData)
                                            throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，SINGLE sfData)
                                            throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，DOUBLE dfData)
                                            throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，LPCTSTR lpctData)
                                            throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，const DBR_DATETIME&
                                    dtData) throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，const DBR_BINARY&
                                  blobData) throw DBSQLCA
void SetField(LPCTSTR lpctFieldName，const DBRArrayDataConstPtr&
                                  cparData) throw DBSQLCA

引数

dwIndex ，ui32Index

1から始まるフィールドの番号を指定します。指定するフィールドの番号は，SQL文中での出現順に割り当てられます。

lpctFieldName

フィールド名を指定します。

xxData（データ型：形式に示す第2引数を参照してください）

設定する値を指定します。

戻り値

なし

機能詳細

カレントレコードのフィールドに値を設定します。

更新可能なDBResultSetオブジェクトに対して指定できます。Editメソッドを呼び出した後に実行してください。

値はデータベースのデータ型に合わせて変換されます。データ型の変換規則については，「7.1 クラスライブラリで扱うデータ型と変換規則」のSetFieldメソッドでのデータ型変換規則を参照してください。

BLOB型データをファイル経由で設定する場合

SetResultSetTypeメソッドでTYPE_BLOB_FILEを指定した場合，BLOB型のフィールドに対するSetFieldメソッドの引数にはファイル名称を指定します。この場合，SetFieldメソッドの引数の型には，文字列と同じLPCTSTRを使います。

DBR_BINARY型を指定する場合

DBR_BINARY型の各メンバには次の値を設定します。

Length：設定するデータの長さ（単位はバイト）

RealLength：設定不要

Data：実際のデータの領域を指すポインタ

繰り返し列を扱う場合

引数cparDataにDBArrayDataオブジェクトを指定します。DBRArrayDataオブジェクトはDBRArrayDataFactoryクラスを利用して事前に生成しておく必要があります。なお，これ以外の引数には，繰り返し列は指定できません。

また，引数cparDataに指定されたオブジェクトが，DBRArrayDataクラスのインスタンスを持っていない場合は，エラーになります。

SetFieldメソッドで値を設定した後，DBRArrayDataオブジェクトのSetDataメソッドを実行すると，SetFieldメソッド実行時点のデータは失われて，SetDataメソッドで設定したデータに置き換わるため注意が必要です。

XDM/RDで更新できる型の制限

LONG VARCHAR型，LONG NVARCHAR型，LONG MVARCHAR型のフィールドについては更新できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_NOT_FOUND

引数dwIndexの範囲，又は引数lpctFieldNameが不正です。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

DB_ERROR_NOT_IN_EDIT

Editメソッドが実行されていません。

DB_ERROR_DATA_TRUNCATED

取得した値を指定した型に変換できません。

DB_ERROR_NO_INSTANCE

引数cparDataに指定されたオブジェクトが，DBRArrayDataクラスのインスタンスを持っていません。

DB_ERROR_CONVERT_ARRAY_TO_SCALAR

引数cparDataに繰り返し列以外のフィールド値を設定しようとしました，又は引数cparData以外の引数に繰り返し列の値を設定しようとしました。

DB_ERROR_CANNOT_ACCESS_WHILE_EXECUTED

Updateメソッドを実行中に，DBRArrayDataオブジェクトのSetDataメソッドを呼び出しました。

SetNullメソッド

機能

指定されたフィールドにNULLを設定します。

形式

インデクス番号で指定する場合

void SetNull(UINT32 dwIndex) throw DBSQLCA

フィールド名で指定する場合

void SetNull(LPCTSTR lpctFieldName) throw DBSQLCA

引数

dwIndex

１から始まるフィールドの番号を指定します。

lpctFieldName

フィールド名を指定します。

戻り値

なし

機能詳細

指定されたフィールドにNULLを設定します。

NULLはC言語で使用するNULLポインタの意味ではなく，データベースシステムでは「値がない」ことを意味します。

SetFieldメソッドと同様にEditメソッドを呼び出した後に実行してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

引数dwIndexの範囲が不正です。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

DB_ERROR_NOT_IN_EDIT

Editメソッドが実行されていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_DRV_ERROR_INVALID_ARGUMENT

引数に指定したフィールド名が不正です。

Topメソッド

機能

カーソルをResultSetの先頭のレコードへ移動します。

形式

void Top(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

カーソルをResultSetの先頭のレコードへ移動します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

Updateメソッド

機能

フィールドの更新結果をデータベースへ通知します。

形式

void Update(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

検索したレコードを更新する場合，Editメソッドの後，SetFieldメソッドでフィールドの値を更新し，Updateメソッドを呼び出すと，更新結果がデータベースへ通知されます。

トランザクションを設定したアプリケーションの場合，通知されたデータはコミットされるまでデータベースに反映されません。

SetFieldメソッドで更新したあと，Updateメソッドを呼び出さないでNext，又はPageNextメソッドを呼び出した場合，更新したフィールドの内容は無効になります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_NOT_IN_EDIT

Editメソッドが実行されていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行中です。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

WaitForDataSourceメソッド

機能

DBResultSetオブジェクトで要求した実行待ち，及び実行中の非同期処理が終了するまで待ちます。非同期処理中に同期を取りたい場合に利用できます。

形式

BOOLEAN WaitForDataSource(UINT32 swWaitTime = DBR_INFINITE)

引数

swWaitTime

非同期処理の終了を待つための最大時間（単位：ミリ秒），又はDBR_INFINITEを指定します。

指定した時間内に非同期処理が終了した場合，TRUEが返ります。指定した時間を経過しても非同期処理が終了しない場合，FALSEが返ります。非同期実行中のSQLがない場合は，TRUEが返ります。

DBR_INFINITEを指定した場合はタイムアウト時間を設定しません。非同期処理が終了するまで待ち続けます。

同期実行時はすぐにTRUEを返します。

戻り値

データ型：BOOLEAN

TRUE：すべての非同期処理が終了しました。

FALSE：タイムアウト時間が経過しました。

機能詳細

DBResultSetオブジェクトで要求した実行待ち，及び実行中の非同期処理(SQL)が，終了するのを待ちます。

DBConnectionクラスのWaitForDataSourceメソッドとの違い

DBResultSetオブジェクトのWaitForDataSourceメソッドでは，WaitForDataSourceメソッドを実行したDBResultSetオブジェクトの非同期実行処理が終了するまで待ちます。ほかのオブジェクトの非同期実行処理については待ちません。そのため，ほかのオブジェクトの非同期実行処理が実行中でも，WaitForDataSourceメソッドを呼び出したオブジェクトの非同期実行処理が終了すれば，WaitForDataSourceメソッドはTRUEを返します。

同じDBConnectionオブジェクトで実行しているすべての非同期実行処理が終了するのを待ちたい場合は，DBConnectionクラスのWaitForDataSourceメソッドを実行してください。

発生する例外

なし

5.8　DBResultSetMetaDataクラスの詳細

ResultSetの情報を管理します。

このクラスは，フィールドの数，名称，属性などを取得するためのメソッドを提供するクラスです。

機 能 | メソッド名
繰り返し列の要素の数を取得します。 | GetArraySize
ResultSetのフィールド数を取得します。 | GetColumnCount
フィールドのデータ型をC++の型で取得します。 | GetColumnCType
フィールドのデータ型をDBMSの型で取得します。 | GetColumnDBType
フィールド名称を取得します。 | GetColumnName
フィールドの精度（桁数）を取得します。 | GetColumnPrecision
フィールドの小数点以下の桁数を取得します。 | GetColumnScale
フィールドのデータ型を取得します。 | GetColumnType
対象となるオブジェクトを生成したDBStatementオブジェクト，DBPreparedStatementオブジェクト，又はDBResultSetオブジェクトのポインタを取得します。 | Parent

＜この節の構成＞

GetArraySizeメソッド

GetColumnCountメソッド

GetColumnCTypeメソッド

GetColumnDBTypeメソッド

GetColumnNameメソッド

GetColumnPrecisionメソッド

GetColumnScaleメソッド

GetColumnTypeメソッド

Parentメソッド

GetArraySizeメソッド

機能

繰り返し列の要素の数を取得します。

形式

インデクス番号で指定する場合

UINT32 GetArraySize(UINT32 ui32Index) throw DBSQLCA

フィールド名で指定する場合

UINT32 GetArraySize(LPCTSTR lpctFieldName) throw DBSQLCA

引数

ui32Index

フィールド番号を，１～フィールド数の範囲の値で指定します。

lpctFieldName

フィールド名を指定します。

戻り値

データ型：UINT32

繰り返し列の要素数を返します。

機能詳細

フィールド番号又はフィールド名によって特定した繰り返し列の，要素の数を取得します。

指定したフィールドが繰り返し列でない場合は，0が返ります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

DB_ERROR_NOT_FOUND

インデックス指定の場合は，指定したフィールド番号が１未満の値，又はフィールド数より大きい値を指定しています。フィールド名指定の場合は，指定したフィールド名が間違っています(NULLを除く)。

GetColumnCountメソッド

機能

ResultSetのフィールド数を取得します。

形式

UINT32 GetColumnCount(void)

引数

なし

戻り値

データ型：UINT32

ResultSet中のフィールド数。

機能詳細

ResultSetのフィールド数を取得します。

必ず1以上の数値が返ります。

発生する例外

なし

GetColumnCTypeメソッド

機能

指定したフィールドのデータ型をC++の型で取得します。

形式

インデクス番号で指定する場合

DBR_CTYPE GetColumnCType(UINT32 dwIndex) throw DBSQLCA

フィールド名で指定する場合

DBR_CTYPE GetColumnCType(LPCTSTR lpctFieldName) throw DBSQLCA

引数

dwIndex

1から始まるフィールドの番号を指定します。

lpctFieldName

フィールドの名称を指定します。

戻り値

データ型：DBR_CTYPE

指定したフィールドのデータ型をC++のデータ型で取得します。

COL_CTYPE_ INT16：INT16

COL_CTYPE_ INT32：INT32

COL_CTYPE_ UINT16：UINT16

COL_CTYPE_UINT32：UINT32

COL_CTYPE_DOUBLE：DOUBLE

COL_CTYPE_SINGLE：SINGLE

COL_CTYPE_CHAR：TCHAR，LPTSTR，LPCTSTR

COL_CTYPE_OFFSET：OFFSET

COL_CTYPE_DATETIME：DBR_DATETIME

COL_CTYPE_BINARY：DBR_BINARY

COL_CTYPE_BOOLEAN：BOOLEAN

機能詳細

指定したフィールドのデータ型をC++のデータ型で取得します。

それぞれのデータ型は，DBResultSetオブジェクト中に読み込まれたときに，デフォルトのC++データ型に変換されます。

変換されたデフォルトのデータ型がどのような型になるかは，使用するDBMSによって異なります。型変換の詳細については，「7.1 クラスライブラリで扱うデータ型と変換規則」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

指定したフィールドがありません。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定できません。

GetColumnDBTypeメソッド

機能

指定したフィールドのデータ型をDBMSの型で取得します。

形式

インデクス番号で指定する場合

UINT16 GetColumnDBType(UINT32 dwIndex) throw DBSQLCA

フィールド名で指定する場合

UINT16 GetColumnDBType(LPCTSTR lpctFieldName) throw DBSQLCA

引数

dwIndex

1から始まるフィールドの番号を指定します。

lpctFieldName

フィールドの名称を指定します。

戻り値

データ型：UINT16

指定したフィールドのデータ型をDBMSのデータ型で取得します。

機能詳細

指定したフィールドの属性をDBMSのデータ型で取得します。

それぞれのデータ型は，DBMSによって異なります。データ型の詳細については，使用するDBMSの仕様をご確認ください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

指定したフィールドがありません。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定できません。

GetColumnNameメソッド

機能

フィールド名称を取得します。

形式

LPCTSTR GetColumnName(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

１から始まるフィールドの番号を指定します。指定するフィールド番号は，SQL文中での出現順に割り当てられます。

戻り値

データ型：LPCTSTR

指定されたフィールドの名称を取得します。

機能詳細

指定されたフィールドのフィールド名を取得します。

SELECT文でフィールド演算や，COUNTなどの関数を使用した場合，フィールド名はデータベースによって決められます。このような場合にこのメソッドを使用します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

指定したフィールドがありません。

GetColumnPrecisionメソッド

機能

フィールドの精度（桁数）を取得します。

形式

インデクス番号で指定する場合

UINT32 GetColumnPrecision(UINT32 dwIndex) throw DBSQLCA

フィールド名で指定する場合

UINT32 GetColumnPrecision(LPCTSTR lpctFieldName) throw DBSQLCA

引数

dwIndex

１から始まるフィールドの番号を指定します。

lpctFieldName

フィールドの名称を指定します。

戻り値

データ型：UINT32

フィールドの精度（桁数）を取得します。COL_TYPE_NUMERICの場合，小数点以下を含めた数値の有効桁数を取得します。

機能詳細

指定されたフィールドのデータの精度（桁数）を取得します。

指定されたフィールドのデータ型によって，戻り値の持つ意味が異なるものがあります。各データ型で返す値（Precision,Scale）を，表5-2から5-9に示します。

表5-2　Precision,Scaleで返す値（ORACLE)

データ型 | Precision | Scale
NUMBER(固定小数点数) | 定義長 | 小数点以下の桁数
NUMBER（浮動小数点数） | 45 | 0
VARCHAR2 | 定義長 | 0
RAW | 定義長 | 0
LONG | 0 | 0
LONG RAW | 0 | 0
DATE | 32※ | 0
ROWID | 18 | 0

注※ この値は，sizeof(DBR_DATETIME)で取得した値です。

表5-3　Precision,Scaleで返す値（SQL Anywhere）

データ型
Precision
Scale

CHAR
CHARACTER
VARCHAR
CHARACTER VARYING
定義長
0

SYSNAME
30
0

LONG VARCHAR
TEXT
0
0

SMALLINT
BIT
TINYINT
6
0

INT
INTEGER
11
0

DECIMAL
NUMERIC
定義長
定義長

MONEY
19
4

SMALLMONEY
10
4

REAL
9
0

DOUBLE
17
0

DATE
32※
0

TIME
32※
0

TIMESTAMP
DATETIME
SMALLDATETIME
32※
0

BINARY
定義長
0

LONG BINARY
IMAGE
0
0

注※ この値は，sizeof(DBR_DATETIME)で取得した値です。

表5-4　Precision,Scaleで返す値(Adaptive Server Anywhere)

データ型
Precision
Scale

CHAR
CHARACTER
VARCHAR
CHARACTER VARYING
定義長
0

SYSNAME
30
0

LONG VARCHAR
TEXT
0
0

SMALLINT
BIT
TINYINT
OLDBIT
6
0

INT
INTEGER
11
0

DECIMAL
NUMERIC
定義長
定義長

MONEY
19
4

SMALLMONEY
10
4

REAL
9
0

DOUBLE
17
0

DATE
32※
0

TIME
32※
0

TIMESTAMP
DATETIME
SMALLDATETIME
32※
0

BINARY
VARBINARY
定義長
0

LONG BINARY
IMAGE
java serialization
java.lang.Object
0
0

BIGINT
20
0

注※ この値は，sizeof(DBR_DATETIME)で取得した値です

表5-5　Precision,Scaleで返す値(SQL Server)

データ型
Precision
Scale

CHAR
VARCHAR
定義長
0

TEXT
0
0

SMALLINT
TINYINT
BIT
6
0

INT
11
0

DECIMAL
NUMERIC
定義長
定義長

MONEY
19
4

SMALLMONEY
10
4

REAL
9
0

DOUBLE
17
0

DATETIME
SMALLDATETIME
32※
0

TIMESTAMP
8
0

BINARY
VARBINARY
定義長
0

IMAGE
0
0

注※ この値は，sizeof(DBR_DATETIME)で取得した値です

表5-6　Precision,Scaleで返す値（HiRDB）

データ型 | Precision | Scale
SMALLINT | 6 | 0
INT | 11 | 0
SMALLFLT | 9 | 0
FLOAT | 17 | 0
DECIMAL | 定義長 | 小数点以下の桁数
CHAR | 定義長 | 0
VARCHAR | 定義長 | 0
MCHAR | 定義長 | 0
MVARCHAR | 定義長 | 0
NCHAR | 定義長×2 | 0
NVARCHAR | 定義長×2 | 0
DATE | 32※ | 0
TIME | 32※ | 0
INTERVAL YEAR TO DAY | 32※ | 0
INTERVAL HOUR TO SECOND | 32※ | 0
BLOB | 定義長 | 0
BINARY | 定義長 | 0

注※ この値は，sizeof(DBR_DATETIME)で取得した値です。

表5-7　Precision,Scaleで返す値(XDM/RD)

データ型 | Precision | Scale
DECIMAL | 定義長 | 小数点以下の桁数
LARGE DECIMAL | 定義長 | 小数点以下の桁数
INT | 11 | 0
SMALLINT | 6 | 0
FLOAT | 17 | 0
SMALLFLT | 9 | 0
CHAR | 定義長 | 0
VARCHAR | 定義長 | 0
LONG VARCHAR | 定義長 | 0
MCHAR | 定義長 | 0
MVARCHAR | 定義長 | 0
LONG MVARCHAR | 定義長 | 0
NCHAR | 定義長×2 | 0
NVARCHAR | 定義長×2 | 0
LONG NVARCHAR | 定義長×2 | 0
DATE | 32※ | 0

注※ この値は，sizeof(DBR_DATETIME)で取得した値です。

表5-8　Precision,Scaleで返す値（SQL/K）

データ型 | Precision | Scale
SMALLINT | 2 | 0
INTEGER | 4 | 0
DECIMAL | 定義長 | 定義長
NUMERIC TRAILING | 定義長 | 定義長
NUMERIC UNSIGNED | 定義長 | 定義長
CHAR | 定義長 | 0
NCHAR | 定義長×2 | 0
MCHAR | 定義長 | 0
XCHAR | 定義長 | 0

表5-9　Precision,Scaleで返す値（XDM/SD）

データ型 | Precision | Scale
BIT | 定義長 | 0
$DBK(データベースキー) | 定義長 | 0
NUMERIC TRAILING | 定義長 | 定義長
DECIMAL | 定義長 | 定義長
INTEGER | 4 | 0
SMALLFLT | 2 | 0
NCHAR | 定義長×2 | 0
CHAR | 定義長 | 0

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

指定したフィールドがありません。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

GetColumnScaleメソッド

機能

フィールドの小数点以下の桁数を取得します。

形式

インデクス番号で指定する場合

INT32 GetColumnScale(UINT32 dwIndex) throw DBSQLCA

フィールド名で指定する場合

INT32 GetColumnScale(LPCTSTR lpctFieldName) throw DBSQLCA

引数

dwIndex

１から始まるフィールドの番号を指定します。

lpctFieldName

フィールドの名称を指定します。

戻り値

データ型：INT32

COL_TYPE_NUMERICの場合，小数点の以下の桁数を取得します。

0の場合は整数となります。また，マイナスの場合は桁上がりとなります。

機能詳細

指定されたフィールドが数値データの場合，データの小数点以下の桁数を取得します。そのほかのデータの場合，返される値は意味を持ちません。

負の値が戻された場合，戻された値分の桁が上がります。

また，GetColumnPrecisionメソッドで取得した値よりも大きな正の値が戻された場合，戻された値分の桁が下がります。

指定されたフィールドのデータ型によって，戻り値の持つ意味が異なるものがあります。各データ型で返す値（Scale）については，GetColumnPrecisionメソッドの表5-2から5-7を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

指定したフィールドがありません。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

GetColumnTypeメソッド

機能

フィールドのデータ型を取得します。

形式

インデクス番号で指定する場合

UINT16 GetColumnType(UINT32 dwIndex) throw DBSQLCA

フィールド名で指定する場合

UINT16 GetColumnType(LPCTSTR lpctFieldName) throw DBSQLCA

引数

dwIndex

１から始まるフィールドの番号を指定します。

lpctFieldName

フィールドの名称を指定します。

戻り値

データ型：UINT16

指定したフィールドのデータ型を取得します。

COL_TYPE_INT16：2バイト長符号付き2進整数

COL_TYPE_INT32：4バイト長符号付き2進整数

COL_TYPE_UINT16：2バイト長符号なし2進整数

COL_TYPE_UINT32：4バイト長符号なし2進整数

COL_TYPE_NUMERIC：符号付き10進数

COL_TYPE_SINGLE：4バイト長浮動小数点数

COL_TYPE_DOUBLE：8バイト長浮動小数点数

COL_TYPE_CHAR：固定長文字列

COL_TYPE_VARCHAR：可変長文字列（最大長指定あり）

COL_TYPE_LONGVARCHAR：可変長文字列（最大長指定なし）

COL_TYPE_DATE：日付型

COL_TYPE_TIME：時間型

COL_TYPE_TIMESTAMP：日付・時間型

COL_TYPE_INTERVAL：時間間隔型

COL_TYPE_BOOLEAN：ブーリアン型

COL_TYPE_BINARY：固定長バイナリ型

COL_TYPE_VARBINARY：可変長バイナリ型（最大長指定あり）

COL_TYPE_LONGVARBINARY：可変長バイナリ型（最大長指定なし）

COL_TYPE_MONEY：金額型

COL_TYPE_SERIAL：自動インクリメント型

COL_TYPE_ROWID：ROWID

COL_TYPE_BIGINT：8バイト長符号付き整数

COL_TYPE_BIT：1バイト長符号なし2進整数

機能詳細

指定されたフィールドのデータベース中でのデータ型を取得します。

それぞれのデータ型は，DBResultSetオブジェクト中に読み込まれたときに，デフォルトのC++データ型に変換されます。

変換されたデフォルトのデータ型がどのような型になるかは，使用するDBMSによって異なります。

型変換の詳細については，「7.1 クラスライブラリで扱うデータ型と変換規則」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

指定したフィールドがありません。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLを指定しています。

Parentメソッド

機能

対象となるオブジェクトを生成したDBStatementオブジェクト，DBPreparedStatementオブジェクト，又はDBResultSetオブジェクトのポインタを取得します。

形式

LPOBJECT Parent(void)

引数

なし

戻り値

データ型：LPOBJECT

対象となるオブジェクトを生成したDBStatementオブジェクト，DBPreparedStatementオブジェクト，又はDBResultSetオブジェクトのポインタ。

機能詳細

対象となるオブジェクトを生成したDBStatementオブジェクト，DBPreparedStatementオブジェクト，又はDBResultSetオブジェクトのポインタを取得します。どのオブジェクトのポインタを取得するかは，DBResultSetMetaDataオブジェクトを取得したメソッドによって異なります。

DBResultSetMetaDataオブジェクトをGetResultSetMetaDataメソッドで取得した場合

GetResultSetMetaDataメソッド
呼び出し元クラス
Parentメソッドの戻り値

DBStatement
呼び出し元(DBStatement)オブジェクトのポインタ

DBPreparedStatement
呼び出し元(DBPreparedStatement)オブジェクトのポインタ

DBResultSet::GetMetaDataメソッドで取得した場合

DBResultSetオブジェクトを
作成したクラス
Parentメソッドの戻り値

DBStatement
DBResultSetオブジェクトを作成したDBStatementオブジェクトのポインタ

DBPreparedStatement
DBResultSetオブジェクトを作成したDBPreparedStatementオブジェクトのポインタ

DBCallableStatement
GetMetaDataメソッドを呼び出したDBResultSetオブジェクトのポインタ

発生する例外

なし

5.9　DBPreparedStatementクラスの詳細

実行時に，動的に設定できる?パラメタを利用するSQL文を管理します。このクラスは，?パラメタを含むSQL文の実行やその結果の取得などのメソッドを提供するクラスです。

DBPreparedStatementクラスを使えば，?の値を除いて実行するSQL文が固定されるため，DBMSのSQL文シンタックスチェックが最初以外必要なくなります。例えば，同じテーブルに対してデータを追加する場合，INSERT文の形式は固定され，データだけが変化します。このような場合，?パラメタは効果的に利用できます。

上記の場合，Executeメソッドは最初だけ呼び出せばよく，その後の更新処理では,SetParam，ExecuteUpdate，SetParam，ExecuteUpdate…と繰り返し実行することで異なるデータを追加できます。指定方法の詳細については，「2.6 詳細版クラスのデータベースアクセス」を参照してください。

ORACLEを使用している場合,？パラメタはプレースホルダに相当します。？パラメタとプレースホルダのどちらでも指定できますが,一つのSQL文中に混在はできません。

SQL/Kの場合，？パラメタを含むSQLの実行時は，必ず？パラメタに値を設定してください。SetNull，及びデフォルト値(NULL)を使用した場合，ExecuteUpdate，及びGetResultSetでエラーになります。NULL値を指定したい場合は，？パラメタの代わりにNULL述語を指定してください。

機 能 | メソッド名
データベースにSQL実行の情報を通知します。 | Execute
INSERT, DELETE, UPDATEのSQL文を実行します。 | ExecuteUpdate
SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。 | GetErrorStatus
検索結果のフィールドの数を取得します。 | GetFieldCount
SetMaxFieldSizeメソッドで設定したデータ長を取得します。 | GetMaxFieldSize
ResultSetに検索できるレコード数の最大値を取得します。 | GetMaxRows
DBPreparedStatementオブジェクトの名前を取得します。 | GetName
SetParamメソッドで指定したパラメタの値を取得します。 | GetParam
パラメタの数を取得します。 | GetParamCount
SQL文を実行し，検索したレコードから，ResultSetオブジェクトを生成します。 | GetResultSet
DBResultSetMetaDataオブジェクトを生成します。 | GetResultSetMetaData
SQL文を使って更新，追加，又は削除したレコード数を取得します。 | GetUpdateRows
DBPreparedStatementオブジェクトに非同期実行中（又は実行待ち）のステートメントがあるかどうかを確認します。 | InExecute
パラメタの値がNULL（欠損値）かどうか確認します。 | IsNull
対象となるオブジェクトを生成したDBConnectionオブジェクトのポインタを取得します。 | Parent
DBPreparedStatementオブジェクトを削除します。 | Remove
DBResultSetオブジェクトを削除します。 | RemoveResultSet
SQLのINSERT文使用時,1度に何レコード挿入するかを指定します。 | SetInsertRows
アプリケーションで受け取るフィールドの長さを指定します。 | SetMaxFieldSize
ResultSetに検索するレコード数の最大値を指定します。 | SetMaxRows
指定されたパラメタにNULL（欠損値)を設定します。 | SetNull
?パラメタに値を設定します。 | SetParam
?パラメタの属性を指定します。 | SetParamType
DBResultSetオブジェクトの生成オプションを指定します。 | SetResultSetType
DBPreparedStatementオブジェクトで要求した実行待ち，及び実行中の非同期処理が終了するまで待ちます。 | WaitForDataSource

＜この節の構成＞

Executeメソッド

ExecuteUpdateメソッド

GetErrorStatusメソッド

GetFieldCountメソッド

GetMaxFieldSizeメソッド

GetMaxRowsメソッド

GetNameメソッド

GetParamメソッド

GetParamCountメソッド

GetResultSetメソッド

GetResultSetMetaDataメソッド

GetUpdateRowsメソッド

InExecuteメソッド

IsNullメソッド

Parentメソッド

Removeメソッド

RemoveResultSetメソッド

SetInsertRowsメソッド

SetMaxFieldSizeメソッド

SetMaxRowsメソッド

SetNullメソッド

SetParamメソッド

SetParamTypeメソッド

SetResultSetTypeメソッド

WaitForDataSourceメソッド

Executeメソッド

機能

SQL文実行の前処理として，レコードがロックされていたときの動作を指定し，データベースにSQL実行の情報を通知します。

検索結果を取得する場合，Executeメソッドを呼び出した後，GetResultSetを呼び出してDBResultSetオブジェクトを取得します。

形式

void Execute (UINT16 swWait = LOCK_OPT_DEFAULT) throw DBSQLCA

引数

swWait

実行するSQL単位に，検索対象のレコードがほかのトランザクションによってロックされていた場合の動作を指定します。

SQL/Kの場合は，どの値を指定しても，ロックが解除されるまで待ち状態になります。

XDM/SDの場合は，どの値を指定しても，ロックが解除されるまで待たないで，すぐにエラーを返します。

次の値のうち，どれか一つを指定します。

LOCK_OPT_DEFAULT
DBConnectionオブジェクトの設定を引き継ぎます。（DBDriverクラスのConnectメソッドの引数swWaitに指定した値）

LOCK_OPT_NOWAIT，又は LOCK_OPT_WITH_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。HiRDB又はXDM/RDの場合は同時にロールバックを実行します。それ以外のDBMSの場合は，ロールバックは実行しません。

LOCK_OPT_WITHOUT_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。ロールバックは実行しません。
ただし，現在のバージョンでは，XDM/RDではロールバックを実行します。また，HiRDBのDELETE,INSERT,UPDATE文では，このオプションは無効で，LOCK_OPY_WAITと同じ動作になります。

LOCK_OPT_WAIT
ロックが解除されるまで待ちます。

戻り値

なし

機能詳細

DBPreparedStatementオブジェクトの生成時に設定されているSQL文実行の情報をデータベースに通知します（DBPreparedStatementオブジェクトは，DBConnectionクラスのCreatePreparedStatementメソッドで生成します。）

このステートメントのResultSetが既にある場合，Execute実行時にResultSetは削除されます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_DRV_ERROR_PHOLDER_AND_QP

プレースホルダ，及び？パラメタが混在するSQL文は指定できません。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

DB_DRV_ERROR_INVALID_SQL_EXCLUSIVE

WITH句で始まるSQL文の指定時には，DBResultSetオブジェクトの生成オプションをTYPE_EXCLUSIVE以外に設定してください。

DB_ERROR_DAB_ILLEGAL_VALUE

指定した引数が不正です。

DBSQLCAクラスで詳細コードを確認してください。

ExecuteUpdateメソッド

機能

INSERT，DELETE，UPDATEのSQL文を実行します。

形式

void ExecuteUpdate(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

追加・更新・削除のためのSQL文を実行します。

検索のためにSELECT文を実行する場合は，このメソッドではなく，GetResultSetメソッドを呼び出します。

なお，GetUpdateRowsメソッドを呼び出して，処理したレコード数を取得できます。

このメソッドは，非同期実行可能なメソッドです。

XDM/RDを使用している場合

ExecuteUpdateを呼び出す前に，すべてのパラメタについてSetParamTypeメソッドを呼び出し，データ型を設定しておく必要があります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_BEFORE_EXECUTE

Executeが実行されていません。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_DRV_ERROR_RDA_PARAM_TYPE

パラメタの型が未設定か，又は設定された型が不正です。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

GetErrorStatusメソッド

機能

SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。

形式

DBSQLCA *GetErrorStatus(void)

引数

なし

戻り値

データ型：DBSQLCA*

DBSQLCAオブジェクトへのポインタ。

機能詳細

DBSQLCAオブジェクトへのポインタを取得します。

非同期実行時にエラーが発生した場合，DBSQLCAオブジェクトにエラー情報が設定されます。

非同期処理のときは，エラーが発生しても直にエラーを取得できません。このため，ユーザは任意の時点でエラーを確認する必要があります。

DBSQLCAオブジェクトでは，非同期実行中に発生したエラー情報を最大100回分保存できます。エラー情報は，新しいエラー情報から100回分保存されるため，エラー情報を確認したあとはDBSQLCAクラスのDeleteメソッドを呼び出して，不要なエラー情報をクリアしておいてください。

発生する例外

なし

GetFieldCountメソッド

機能

検索結果のフィールドの数を取得します。

形式

UINT32 GetFieldCount(void)

引数

なし

戻り値

データ型：UINT32

フィールドの個数。

機能詳細

DBPreparedStatementオブジェクトの生成時に指定したSELECT文の，検索結果中に含まれるフィールドの個数を取得します。

GetFieldCountメソッドを呼び出す前に，Executeメソッドを呼び出しておく必要があります。

発生する例外

なし

GetMaxFieldSizeメソッド

機能

SetMaxFieldSizeメソッドで設定したデータ長を取得します。

形式

フィールド名で指定する場合

UINT32   GetMaxFieldSize(LPCTSTR lpctFieldName = NULL) throw DBSQLCA

インデクス番号で指定する場合

UINT32   GetMaxFieldSize(UINT32 dwIndex) throw DBSQLCA

引数

lpctFieldName

フィールドの名称，又はNULLを指定します。

NULLが指定された場合，すべてのフィールド長の合計値をバイト数で取得します。

dwIndex

1から始まるフィールドの番号を指定します。

戻り値

データ型：UINT32

SetMaxFieldSizeメソッドで設定したデータ長。

機能詳細

SetMaxFieldSizeメソッドで設定したデータの長さを指定します。データベース中のフィールドの定義長ではないことに注意してください。

取得するデータがフィールドの値を格納する領域の最大長よりも大きい場合，データは切り捨てられます。

このメソッドを呼び出す前に，Executeメソッドを呼び出しておく必要があります。

不定長のフィールドの場合は，0を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

DB_ERROR_NOT_FOUND

指定されたフィールドがありません。

GetMaxRowsメソッド

機能

ResultSetに検索できるレコード数の最大値を取得します。

形式

UINT32 GetMaxRows(void)

引数

なし

戻り値

テータ型：UINT32

SetMaxRowsメソッドで設定した，レコード数の最大値を取得します。

機能詳細

SetMaxRowsメソッドで設定した，DBResultSetオブジェクトで取得できるレコード数の最大値を取得します。SetMaxRowsメソッドを一度も呼び出していない場合はデフォルト値の100を返します。

発生する例外

なし

GetNameメソッド

機能

DBPreparedStatementオブジェクトの名前を取得します。

形式

LPCTSTR GetName(void)

引数

なし

戻り値

データ型：LPCTSTR

DBPreparedStatementオブジェクトの名前が返ります。

機能詳細

DBPreparedStatementオブジェクトの名前を取得します。DBPreparedStatementオブジェクトの名称は，DBConnectionクラスのCreatePreparedStatementメソッドの引数から生成されます。

発生する例外

なし

GetParamメソッド

機能

SetParamメソッドで指定したパラメタの値を取得します。

形式１：ユーザ確保領域へコピーする場合

インデクス番号指定

void GetParam(UINT32 dwIndex，INT16* sParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，INT32* lParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，UINT16* swParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，UINT32 * dwParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，SINGLE* sfParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，DOUBLE* dfParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，DBR_DATETIME* dtParam)
                                              throw DBSQLCA
void GetParam(UINT32 ui32Index，DBRArrayDataPtr* parParam)
                                              throw DBSQLCA

レコード番号・インデクス番号指定

void GetParam(UINT32 dwRow，UINT32 dwIndex，INT16* sParam)
                                              throw DBSQLCA
void GetParam(UINT32 dwRow，UINT32 dwIndex，INT32* lParam)
                                              throw DBSQLCA
void GetParam(UINT32 dwRow，UINT32 dwIndex，UINT16* swParam)
                                              throw DBSQLCA
void GetParam(UINT32 dwRow，UINT32 dwIndex，UINT32 * dwParam)
                                              throw DBSQLCA
void GetParam(UINT32 dwRow，UINT32 dwIndex，SINGLE* sfParam)
                                              throw DBSQLCA
void GetParam(UINT32 dwRow，UINT32 dwIndex，DOUBLE* dfParam)
                                              throw DBSQLCA
void GetParam(UINT32 dwRow，UINT32 dwIndex，DBR_DATETIME*
                                     dtParam) throw DBSQLCA
void GetParam(UINT32 ui32Row，UINT32 ui32Index，
                   DBRArrayDataPtr* parParam) throw DBSQLCA

形式２：DABrokerが用意した領域を参照する場合

インデクス番号指定

void GetParam(UINT32 dwIndex，LPTSTR* lptParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，DBR_BINARY* blobParam)
                                               throw DBSQLCA

レコード番号・インデクス番号指定

void GetParam(UINT32 dwRow，UINT32 dwIndex，LPTSTR* lptParam)
                                               throw DBSQLCA
void GetParam(UINT32 dwRow，UINT32 dwIndex，
                        DBR_BINARY* blobParam) throw DBSQLCA

形式３：ユーザ確保領域へコピーする場合

インデクス番号指定

UINT32 GetParam(UINT32 dwIndex，LPTSTR lptParam，
                                UINT32 dwSize) throw DBSQLCA
UINT32 GetParam(UINT32 dwIndex，DBR_BINARY* blobParam，
                                UINT32 dwSize) throw DBSQLCA

レコード番号・インデクス番号指定

UINT32 GetParam(UINT32 dwRow，UINT32 dwIndex，LPTSTR lptParam，
                                UINT32 dwSize) throw DBSQLCA
UINT32 GetParam(UINT32 dwRow，UINT32 dwIndex，
         DBR_BINARY* blobParam，UINT32 dwSize) throw DBSQLCA

引数

dwIndex ,ui32Index

1から始まるパラメタの番号を指定します。指定するパラメタの番号は，SQL文中での出現順に割り当てられます。

dwRow

1から始まる，レコード番号を指定します。

*xxParam（形式1，3の第2引数）

データをコピーする領域のポインタを指定します。

*xxParam（形式２の第2引数）

ポインタ変数を指定します。

dwSize

コピー先の領域サイズをバイト数で指定します。

戻り値

データ型：UINT32

コピーした文字列の長さが返ります。パラメタの値を指定された型にキャストして取得します（形式３の場合）。

機能詳細

SetParamで設定した値を取得します。このメソッドは，Executeを呼び出し，SetParamメソッドでパラメタを渡した後に実行してください。SetParamを実行する前にGetParamを実行した場合，NULL文字，又は0が返ります。

形式１の処理

パラメタ値を，引数に指定されたポインタが指す領域にコピーします。

繰り返し列がある場合は，引数parParamに設定します。

形式２の処理

DABrokerが確保した領域にパラメタ値をコピーし，その先頭アドレスをポインタ変数に設定します。このため，LPTSTRまたはDBR_BINARYの変数の確保だけで，フィールド値をコピーする領域を確保する必要はありません。

パラメタ値の有効期間
パラメタ値は，Executeメソッドや SetProcedureメソッドを実行するまで，又は取得したパラメタに対してSetParamを実行するまで有効です。

形式３の処理

LPTSTR型
引数lptParamの指す領域は，引数dwSizeバイト分確保されている必要があります。
引数dwSizeがデータベースから取得したデータの長さ以下の場合，引数dwSize-1分のデータ（最後にはNULL終端文字が入る）がコピーされ，残りのデータは切り捨てられます。
引数dwSizeがデータベースから取得したデータの長さよりも大きい場合，文字列はすべてコピーします。

DBR_BINARY型
パラメタ値をコピーする領域（LPTSTR型）を確保し，DBR_BINARY型変数（構造体）のDataメンバに設定し，この変数をGetFieldメソッドの引数に指定します。引数dwSizeはこの領域のサイズを指定します。
引数dwSizeがデータベースから取得したデータの長さ以下の場合，引数dwSize分のデータがコピーされ，残りのデータは切り捨てられます。この場合，NULL終端文字は入りません。引数dwSizeがデータベースから取得したデータの長さより大きい場合，データはすべてコピーされ，残りの領域にはNULL終端文字が埋められます。

データ変換について

データベースのデータ型とGetParamの引数に指定したデータ型とが異なる場合は，値の変換できるものについては引数で指定したデータ型に変換して返します。

文字列から数値データ型への変換に失敗した場合は0を返します。データ型の変換規則については，「7.1 クラスライブラリで扱うデータ型と変換規則」のGetField，GetParamメソッドでのデータ型変換規則を参照してください。

NULL値の扱い

NULLであるパラメタに対してGetParamメソッドを呼び出すと，戻される値は意味のない値(0，空文字列，要素がすべて0，空文字列からなる構造体，又は不定値)となります。

このため，パラメタの値がNULLである可能性がある場合は，IsNullメソッドを呼び出して，NULL値かどうかを確認してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_CANNOT_BE_NULL

引数lpctParamName，又は引数xxParamにNULLを指定しています。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwRow，又は引数dwIndexの範囲が不正です（Execute実行前に実行した場合を含みます）。

DB_ERROR_DATA_TRUNCATED

パラメタの値を指定した型に変換できません。

DB_ERROR_CONVERT_ARRAY_TO_SCALAR

引数parDataで繰り返し列以外のフィールド値を取得しようとしました，又は引数parData以外の引数で繰り返し列の値を取得しようとしました。

GetParamCountメソッド

機能

パラメタの数を取得します。

形式

UINT32 GetParamCount(void)

引数

なし

戻り値

データ型：UINT32

パラメタの個数。

機能詳細

SQL文中に含まれる？パラメタの個数を取得します。

GetParamCountメソッドを呼び出す前に，Executeメソッドを呼び出しておく必要があります。

発生する例外

なし

GetResultSetメソッド

機能

SQL文を実行し，検索したレコードから，ResultSetオブジェクトを生成します。

形式

DBResultSet *GetResultSet (void) throw DBSQLCA

引数

なし

戻り値

データ型：DBResultSet*

DBResultSetオブジェクトへのポインタ。

機能詳細

?パラメタを付けたSELECT文の検索結果を取得します。SELECT文はDBPreparedStatementオブジェクトの生成時に指定したものです。

データベースからSetMaxRowsメソッドで指定されたレコード数分レコードを検索後，DBResultSetオブジェクトを生成し，生成したオブジェクトへのポインタを返します。

GetResultSetメソッドを呼び出す前に，Executeメソッドを呼び出し，SetParamメソッドを呼び出してパラメタの値を設定しておきます。SetParamメソッドで値を設定していないパラメタはNULL値と解釈して実行します。

Executeメソッドで実行したSQLがSELECT文でない場合はNULLを返します。

BLOB型データを扱う場合の制限事項については，SetResultSetTypeメソッド，及び「3.3.4 BLOB型データの取得方法についての制限」を参照してください。

このメソッドは，非同期実行可能なメソッドです。

XDM/RDの場合

GetResultSetメソッドを呼び出す前に，すべてのパラメタについてSetParamTypeメソッドでデータ型を設定しておいてください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しました。

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_DRV_ERROR_RDA_PARAM_TYPE

パラメタのデータ型が設定されていないか，又は設定されたデータ型が不正です。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

DB_DRV_ERROR_REQUEST_RESULTSET_ROWS

ResultSetを生成するために指定されたレコード数が不正です。SetMaxRowsメソッドで正しいレコード数を指定してください。

GetResultSetMetaDataメソッド

機能

DBResultSetMetaDataオブジェクトを生成します。

DBResultSetMetaDataオブジェクトからフィールドの名称，数，属性などが取得できます。

形式

DBResultSetMetaData *GetResultSetMetaData(void) throw DBSQLCA

引数

なし

戻り値

データ型：DBResultSetMetaData*

DBResultSetMetaDataオブジェクトへのポインタ。

機能詳細

Executeメソッドを実行した後，SELECT文の検索結果に対する情報を取得します。

DBResultSetMetaDataオブジェクトを生成し，生成したオブジェクトへのポインタを返します。取得したポインタは，次回のExecuteメソッドが呼ばれた時点で無効になります。

また，実行したSQL文がSELECT文でない場合はNULLを返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しました。

GetUpdateRowsメソッド

機能

SQL文を使って更新，追加，又は削除したレコード数を取得します。

形式

UINT32 GetUpdateRows(void)

引数

なし

戻り値

データ型：UINT32

処理されたレコード件数を取得します。

機能詳細

ExecuteUpdateメソッドで実行されたUPDATE，DELETE，INSERT文によって処理されたレコード数を取得します。

発生する例外

なし

InExecuteメソッド

機能

DBPreparedStatementオブジェクトに非同期実行中（又は実行待ち）のステートメントがあるかどうかを確認します。

形式

BOOLEAN  InExecute(void)

引数

なし

戻り値

データ型：BOOLEAN

TRUE：ステートメントが非同期実行中(又は実行待ち)です。

FALSE：非同期実行中(又は実行待ち)ではありません。

機能詳細

InExecuteメソッドを実行したオブジェクト内のステートメントが非同期実行中(又は実行待ち）かどうかを確認します。

非同期実行中(又は実行待ち）の場合はTRUEを，非同期実行中(又は実行待ち）でない場合はFALSEを返します。

同期実行接続時はFALSEを返します。

コネクション内のすべてのステートメントを対象に非同期実行中かどうかを確認するには，InWaitForDataSourceメソッドを呼び出します(DBConnectionクラス)。

発生する例外

なし

IsNullメソッド

機能

パラメタの値がNULL（欠損値）かどうかを確認します。

形式

インデクス番号で指定する場合

BOOLEAN IsNull(UINT32 dwIndex) throw DBSQLCA

レコード番号・インデクス番号で指定する場合

BOOLEAN IsNull(UINT32 dwRow，UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まるパラメタの番号を指定します。

dwRow

1から始まるパラメタのレコード番号を指定します。

戻り値

データ型：BOOLEAN

TRUE：パラメタの値がNULLです。

FALSE：パラメタの値はNULLではありません。

機能詳細

指定されたパラメタがNULLかどうかを確認します。

NULLはC言語で使用するNULLポインタの意味ではなく，データベースシステムでは「値がない」ことを意味します。

NULLであるパラメタに対してGetParamメソッドを呼び出すと，戻される値は意味のない値（0，NULL文字列，要素がすべて0，NULL文字列からなる構造体，又は不定値）となります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しました。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwIndex，引数dwRowの範囲が不正です。

Parentメソッド

機能

対象となるオブジェクトを生成したDBConnectionオブジェクトのポインタを取得します。

形式

LPOBJECT Parent(void)

引数

なし

戻り値

データ型：LPOBJECT

対象となるオブジェクトを生成したDBConnectionオブジェクトへのポインタ。

機能詳細

なし

発生する例外

なし

Removeメソッド

機能

DBPreparedStatementオブジェクト(自分自身)を削除します。

形式

void Remove(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

DBPreparedStatementオブジェクト（自分自身）を削除します。

非同期処理中に実行待ち，及び実行中のステートメントがある場合は削除できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中ステートメントがあります。

RemoveResultSetメソッド

機能

DBResultSetオブジェクトを削除します。

形式

void RemoveResultSet(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

GetResultSetメソッドで生成したDBResultSetオブジェクトを削除します。

非同期処理中に実行待ち，及び実行中のステートメントがある場合は削除できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行中です。

SetInsertRowsメソッド

機能

SQLのINSERT文使用時，1度に何レコード挿入するかを指定します。

形式

void SetInsertRows(UINT32 dwCount = 1) throw DBSQLCA

引数

dwCount

INSERTするレコード数を指定します。１以上を指定してください。

戻り値

なし

機能詳細

1回のINSERTで挿入するレコード数を指定します。

指定できるレコード数の範囲

指定できるレコード数の最大値は使用しているDBMSによって異なります。各DBMSごとに指定できるレコード数の最大数を次に示します。

ORACLEを使用している場合：最大32767レコード

ORACLE以外のDBMSを使用している場合：
「1レコードのパラメタ数×INSERTするレコード数 ≦ 32767」を満たす値

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwCountで指定した値が不正（1未満）です。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

SetMaxFieldSizeメソッド

機能

アプリケーションで受け取るフィールドの長さを指定します。

形式

フィールド名で指定する場合

void SetMaxFieldSize(LPCTSTR lpctFieldName，
                    UINT32 dwMaxSize=0)    throw DBSQLCA

インデクス番号で指定する場合

void SetMaxFieldSize(UINT32 dwIndex，
                    UINT32 dwMaxSize=0)    throw DBSQLCA

引数

lpctFieldName

フィールド名を指定します。

dwIndex

1から始まるフィールドの番号を指定します。

dwMaxSize

アプリケーションで受け取るフィールドの長さを，0以上のバイト数で指定します。この引数で指定された値が，データベースでの定義長よりも大きい場合，引数で指定した値は無視されます。

0を指定すると，データベース中の定義長が仮定されます。

戻り値

なし

機能詳細

アプリケーションで受け取るフィールドの長さを，バイト数で指定します。アプリケーションで必要とするデータがフィールド値全体でなく，フィールド値の一部である場合に利用します。データベース中のフィールドの定義長ではないことに注意してください。

このメソッドを呼び出す前に，Executeメソッドを呼び出しておく必要があります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwIndexが1より小さい値です。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLが指定されています。

DB_DRV_ERROR_INVALID_ARGUMENT

指定した引数は不正です。

DB_DRV_ERROR_INVALID_MAX_SIZE

バッファの最大長の指定値が不正です。

SetMaxRowsメソッド

機能

ResultSetに検索するレコード数の最大値を指定します。

形式

void SetMaxRows(UINT32 dwMaxSize=MAX_ROWS_DEFAULT) throw DBSQLCA

引数

dwMaxSize

ResultSetに検索するレコード数の最大値を指定します。必ず１以上を指定してください。

システムデフォルト値は，MAX_ROWS_DEFAULTです（=100が仮定されます）。

戻り値

なし

機能詳細

DBResultSetオブジェクトで一度に取得できる最大レコード数を指定します。

一度の読み込み（GetResultSetメソッド，又はPageNextメソッドの呼び出し）で，データベースから取得するレコード数の最大値を設定します。

指定できるレコード数の範囲

指定できるレコード数の最大値は使用しているDBMSによって異なります。各DBMSごとに，指定できるレコード数の最大値を次に示します。

ORACLEを使用している場合：32767レコード以下

ORACLE以外のDBMSを使用している場合：4096レコード以下

1レコードのフィールド数は，DBResultSetMetaDataオブジェクトのGetColumnCountメソッドを呼び出して取得できます。

更新可能なDBResultSetオブジェクトでの扱い

DBResultSetオブジェクトが更新可能なオブジェクトとして生成された場合(SetResultSetTypeメソッドの引数swTypeでTYPE_EXCLUSIVEを指定した場合)，SetMaxRowsメソッドによる指定は無視され，常に１が仮定されます。更新可能なDBResultSetは常に1レコードだけを読み込みます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwMaxSizeに範囲外（１より小さい）が指定されています。

SetNullメソッド

機能

指定されたパラメタにNULL（欠損値)を設定します。

形式

インデクス番号で指定する場合

void SetNull(UINT32 dwIndex) throw DBSQLCA

レコード番号・インデクス番号で指定する場合

void SetNull(UINT32 dwRow，UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まるフィールドの番号を指定します。

dwRow

1から始まるパラメタのレコード番号を指定します。

戻り値

なし

機能詳細

指定されたパラメタにNULLを設定します。

NULLはC言語で使用するNULLポインタの意味ではなく，データベースシステムでは「値がない」ことを意味します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwIndex，引数dwRowの範囲が不正です。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

SetParamメソッド

機能

？パラメタに値を設定します。

形式

インデクス番号で指定する場合

void SetParam(UINT32 dwIndex，LPCTSTR lpctParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，INT16 sParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，INT32 lParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，UINT16 swParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，UINT32 dwParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，SINGLE sfParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，DOUBLE dfParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，const DBR_DATETIME& dtParam)
                                             throw DBSQLCA
void SetParam(UINT32 dwIndex，const DBR_BINARY& blobParam)
                                             throw DBSQLCA
void SetParam(UINT32 ui32Index，const DBRArrayDataConstPtr&
                                    cpArray) throw DBSQLCA

レコード番号・インデクス番号で指定する場合

void SetParam(UINT32 dwRow，UINT32 dwIndex，LPCTSTR lpctParam)
                                             throw DBSQLCA
void SetParam(UINT32 dwRow，UINT32 dwIndex，INT16 sParam)
                                             throw DBSQLCA
void SetParam(UINT32 dwRow，UINT32 dwIndex，INT16 sParam)
                                             throw DBSQLCA
void SetParam(UINT32 dwRow，UINT32 dwIndex，UINT16 swParam)
                                             throw DBSQLCA
void SetParam(UINT32 dwRow，UINT32 dwIndex，UINT32 dwParam)
                                             throw DBSQLCA
void SetParam(UINT32 dwRow，UINT32 dwIndex，SINGLE sfParam)
                                             throw DBSQLCA
void SetParam(UINT32 dwRow，UINT32 dwIndex，DOUBLE dfParam)
                                             throw DBSQLCA
void SetParam(UINT32 dwRow，UINT32 dwIndex，DOUBLE dfParam)
                                             throw DBSQLCA
void SetParam(UINT32 dwRow，UINT32 dwIndex，
                const DBR_DATETIME& dtParam) throw DBSQLCA
void SetParam(UINT32 dwRow，UINT32 dwIndex，
                const DBR_BINARY& blobParam) throw DBSQLCA
void SetParam(UINT32 ui32Row，UINT32 ui32Index，
        const DBRArrayDataConstPtr& cpArray) throw DBSQLCA

引数

指定されたパラメタを，データベースの型にキャストして設定します。

dwIndex

１から始まるパラメタの番号を指定します。指定するパラメタの番号は，SQL文中での出現順に割り当てられます。

dwRow

１から始まるパラメタを設定するレコード番号を指定します。

xxParam（データ型：インデクス番号で指定する場合の第2引数，レコード番号・インデクス番号で指定する場合の第3引数を参照してください）

パラメタに設定する値を指定します。

cpArray

インスタンスを保持しているDBRArrayDataConstPtrオブジェクトを指定します。

戻り値

なし

機能詳細

指定されたパラメタの値を設定します。

値は指定するデータ型からデータベース固有の型に変換されます。データ型変換規則については，「7.1 クラスライブラリで扱うデータ型と変換規則」の SetParamメソッドでのデータ型変換規則を参照してください。

SetParamメソッドはExecuteUpdateメソッドの前，ExecuteとGetResultSetの間に実行してください。

パラメタに欠損値を設定したい場合は，SetNullメソッドを使用してください。

引数lpctParamがNULL（LPCTSTR型の変数にNULLを代入して引数に渡した場合，又はNULLをLPCTSTR型にキャストした場合）の時も欠損値が設定されます。キャストしないで引数にNULLだけ指定した場合は欠損値とはみなしません。

BLOB型データをファイル経由で取得する場合

SetResultSetTypeメソッドでTYPE_BLOB_FILE_xxを指定した場合，BLOB型のフィールドに対するSetParamメソッドの引数にはファイル名称を指定します。SetParamTypeメソッドはSetParamメソッドの前に実行してください。

DBR_BINARY型を指定する場合

DBR_BINARY型の各メンバには次の値を設定します。

Length：設定するデータの長さ（単位はバイト）

RealLength：設定不要

Data：実際のデータの領域を指すポインタ

レコード番号の指定

1レコードだけを挿入する場合には，インデクス番号と設定するデータだけを指定します。複数のレコードを一度に挿入する場合，DABrokerで確保された領域のどのレコード番号に対する処理なのかをアプリケーションから指定する必要があります。引数dwRowにはSetParamを実行するレコード番号を，SetInsertRowsメソッドで設定した範囲内の値で指定します。

繰り返し列を扱う場合の注意

引数cpArrayで指定するDBRArrayDataConstPtrオブジェクトがインスタンスを保持していない場合は，エラーになります。インスタンスを保持するDBRArrayDataPtrオブジェクトは，次の手順で生成し，引数へ設定します。

DBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドで，DBRArrayDataオブジェクトを生成します。

新しく繰り返し列を作成する場合だけ，DBRArrayDataオブジェクトのCreateメソッドで要素の格納領域を確保します。

DBRArrayDataオブジェクトのSetDataメソッドで要素の値を設定します。

引数pArrayにDBRArrayDataPtrオブジェクトを設定し，SetParamメソッドを呼び出します。

ExecuteUpdateメソッドで実行します。

なお，SetParamメソッドで値を設定した後に，DBRArrayDataオブジェクトのSetDataメソッドを実行すると，SetParamメソッド実行時点のデータは失われ，SetDataメソッドに指定した値が設定されるため注意してください。

また，Updateメソッドを実行中に，DBRArrayDataオブジェクトのSetDataメソッドは呼び出せません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwRow，又は引数dwIndexの範囲が不正です（Execute実行前に実行した場合を含みます）。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_CANNOT_BE_NULL

引数にNULLは指定できません。

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しました。

DB_ERROR_NO_INSTANCE

引数cparArrayに指定されたオブジェクトが，DBRArrayDataPtrクラスのインスタンスを持っていません。

DB_ERROR_CANNOT_ACCESS_WHILE_EXECUTED

Updateメソッドを実行中に，DBRArrayDataオブジェクトのSetDataメソッドを呼び出しました。

SetParamTypeメソッド

機能

？パラメタの属性を指定します。

形式

void SetParamType(UINT32 dwIndex，
                 UINT16 ui16Type = TYPE_BLOB_MEMORY) throw DBSQLCA

引数

dwIndex

1から始まるパラメタの番号を指定します。

ui16Type

パラメタの属性を指定します。 指定できる値を次に示します。

TYPE_BLOB_MEMORY：メモリ上のデータを長大データとして読み込みます。

TYPE_BLOB_FILE_TEXT：テキストファイルを長大データとして読み込みます。

TYPE_BLOB_FILE_BINARY：バイナリファイルを長大データとして読み込みます。

RDA Link for Gatewayを使用している場合にだけ指定できる値を次に示します。

RDA_DT_XCHAR

RDA_DT_NUM_TRAILING

RDA_DT_NUM_UNSIGNED

RDA_DT_FLOAT

RDA_DT_SMALLFLT

RDA_DT_DECIMAL

RDA_DT_LARGE_DECIMAL

RDA_DT_INTEGER

RDA_DT_SMALLINT

RDA_DT_MVARCHAR

RDA_DT_MCHAR

RDA_DT_LONG_MVARCHAR

RDA_DT_NVARCHAR

RDA_DT_NCHAR

RDA_DT_LONG_NVARCHAR

RDA_DT_VARCHAR

RDA_DT_CHAR

RDA_DT_LONG_VARCHAR

RDA_DT_DATE

～LONG_(M,N)VARCHARはメモリ上のデータを長大データとして読み込みます。

戻り値

なし

機能詳細

パラメタの属性を指定します。

BLOB型のフィールドに対してファイル経由でのパラメタ設定をしたい場合だけ，SetParamTypeメソッドをTYPE_BLOB_FILE_TEXT，又はTYPE_BLOB_FILE_BINARYオプションを指定して呼び出します。この場合，SetParamでは「値」として「ファイル名」を指定する必要があります。詳細については，SetParamメソッドを参照してください。

SetParamTypeメソッドはSetParamメソッドを呼び出す前に実行してください。SetParamメソッドで値を設定した後にSetParamTypeメソッドを実行した場合，そのパラメタの値はクリアされます。

HiRDBのBinary型の場合

TYPE_BLOB_FILE_TEXTおよびTYPE_BLOB_FILE_BINARYは指定できません。メモリ経由でのパラメタ設定だけ実行できます。

XDM/RDの場合

ExecuteUpdateメソッド，又はGetResultSetメソッドを呼び出す前に，すべてのパラメタについてこのメソッドを呼び出してパラメタのデータ型を指定してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwIndexの範囲が不正です（Executeメソッド実行前に実行した場合を含みます )。

DB_DRV_ERROR_SQL_NOT_FOUND

SQL文が設定されていません。

SetResultSetTypeメソッド

機能

DBResultSetオブジェクトの生成オプションを指定します。

DBResultSetオブジェクトを生成するときに，参照専用，又は更新可能のどちらで生成するか選択します。検索レコードに対するロック方法を指定します。

検索時にバッファを幾つ使うかも指定できます。

また，BLOB型データを扱う場合，その取得方法についても指定します。

形式

void SetResultSetType (UINT16
                  swType = TYPE_EXCLUSIVE|BUFFER_TYPE_SINGLE，
                  DBR_BLOB_TYPE nBLOBType = TYPE_BLOB_MEMORY，
                  LPCTSTR lpctBLOBFileName = NULL) throw DBSQLCA

引数

swType

次の三つの値を指定します。

検索したレコードに対するロック方法

検索時に使用するバッファ数

VARCHARデータをDBR_BINARY型で取得した場合のLengthメンバ，RealLengthメンバの意味

指定する値は，上記三つの値の論理和になります。

このメソッドを実行しなかった場合の動作は，TYPE_EXCLUSIVE | BUFFER_TYPE_SINGLE | VARCHAR_LENGTH_DEFを指定した場合と同じになります。

検索したレコードに対するロック方法

次に示すTYPE_EXCLUSIVE，TYPE_EXCLUSIVE2，TYPE_NONE，TYPE_WAIT，TYPE_NOWAIT，TYPE_SHAREDのどれかの値で，検索したレコードに対するロック方法を指定します。

TYPE_EXCLUSIVE又はTYPE_EXCLUSIVE2
DBResultSetオブジェクトからレコードの追加，更新，削除をする場合は，このオプションを指定します。検索したレコードに排他ロックが掛かり，他のトランザクションからの参照・更新を制限できます。実際に排他ロックが掛かるのは，GetResultSetメソッドを実行した時点からです。
このオプションで生成したDBResultSetオブジェクトでは，一度に複数のレコードを読み込めないため，SetMaxRowsで指定したレコード数は無視されます。また，検索条件に一致する次のレコードをアクセスするには，Nextメソッドを使用します。TYPE_EXCLUSIVE，又はTYPE_EXCLUSIVE2で生成したオブジェクトの場合，カーソル制御のメソッドとしてはNextメソッドだけが指定できます。Nextメソッドについては，「5.7 DBResultSetクラスの詳細」を参照してください。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。なお，HiRDB以外のDBMSではTYPE_EXCLUSIVEとTYPE_EXCLUSIVE2で同じオプション文字列へ変換されて実行されます。

ORACLE：FOR UPDATE

SQL Anywhere,Adaptive Server Anywhere：オプション文字列は付加しません。

HiRDB
TYPE_EXCLUSIVE：FOR UPDATE
TYPE_EXCLUSIVE2：WITH EXCLUSIVE LOCK FOR UPDATE

XDM/RD：WITH EXCLUSIVE LOCK FOR UPDATE

SQL Server：UPDLOCK

SQL/K：FOR UPDATE
詳細については，マニュアル「SQL/K」を参照してください。

XDM/SD：LOCK SU

TYPE_NONE
参照専用のDBResultSetオブジェクトを生成します。検索するレコードに対して，参照ロックを掛けます。
このオプションで生成したDBResultSetオブジェクトでは，複数レコードを読み込めます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

ORACLE：付加しません。

SQL Anywhere，Adaptive Server Anywhere：付加しません。

HiRDB：付加しません。

XDM/RD：付加しません。

SQL Server：付加しません。

SQL/K：付加しません。

XDM/SD：付加しません(SDEXCLUSIVE値が仮定されます)。
SDEXCLUSIVE値の詳細については，マニュアル「Database Connection Server」のコントロール空間起動制御文を参照してください。

TYPE_WAIT(HiRDB，XDM/RD，SQL Server，SQL/K，XDM/SDの場合に有効です)
参照専用のDBResultSetオブジェクトを生成します。
検索したレコードに対して参照ロックを掛けますが，見終わった行から排他制御を解除します。このため，DABroker for C++では，ResultSetにレコードをすべて読み込んだ時点，つまり，GetResultSetメソッド，又はPageNextメソッドが完了した時点で，ロックが解除されています。
このオプションで生成したDBResultSetオブジェクトでは，複数レコードを読み込めます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

HiRDB：WITHOUT LOCK WAIT

XDM/RD：WITHOUT LOCK WAIT

SQL Server：HOLDLOCK

SQL/K：付加しません。

XDM/SD：LOCK SR

TYPE_NOWAIT(HiRDB，XDM/RD，SQL Server，SQL/K，XDM/SDの場合に有効です)
参照専用のDBResultSetオブジェクトを生成します。該当するレコードをほかのトランザクションが更新中だったり，TYPE_EXCLUSIVEで検索している場合でも読み込めます。排他制御を全くしません。
このオプションで生成したDBResultSetオブジェクトでは，複数レコードを読み込めます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

HiRDB：WITHOUT LOCK NOWAIT

XDM/RD：WITHOUT LOCK NOWAIT

SQL Server：NOLOCK

SQL/K：付加しません。

XDM/SD：LOCK NR

TYPE_SHARED(HiRDB，XDM/RD，SQL/K，XDM/SDの場合だけ有効です)
検索するレコードに共有ロックを掛けます。共有ロックの掛かったレコードは，ほかのトランザクションから参照できますが，更新はできません。

HiRDB：WITH SHARE LOCK

XDM/RD：WITH SHARE LOCK

SQL/K：付加しません。

XDM/SD：LOCK SR

検索時に使用するバッファ数

次に示すBUFFER_TYPE_SINGLE，又はBUFFER_TYPE_DOUBLEのどちらかの値で，検索時に使用するバッファ数を指定します。指定を省略した場合は，BUFFER_TYPE_SINGLEが仮定されます。なお，バッファの利用方法については，「3.3.3 検索性能の向上策」を参照してください。

BUFFER_TYPE_SINGLE
検索結果を保持するバッファを一つだけ使います。

BUFFER_TYPE_DOUBLE
検索結果を保持するバッファを二つ使います。

VARCHARデータをDBR_BINARY型で取得したときのLengthメンバ，RealLengthメンバの意味

次に示す値のどれか一つを指定します。

VARCHAR_LENGTH_DEF

GetFieldメソッドの形式２を使用した場合，又は形式３を使用してもデータの切り捨てが発生しなかった場合
Length：カラムの定義長※
RealLength：0

GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合
Length：切り捨てたデータ長
RealLength：カラムの定義長※
注※　SetMaxFieldSizeメソッドで取得データ長を指定している場合は，「カラムの定義長」ではなく「SetMaxFieldSizeメソッドで指定したサイズ」となります。

VARCHAR_LENGTH_REAL

GetFieldメソッドの形式2を使用した場合，又は形式3を使用してもデータの切り捨てが発生しなかった場合
Length：実際のデータ長※
RealLength：0

GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合
Length：切り捨てたデータ長
RealLength：実際のデータ長※
注※　SetMaxFieldSizeメソッドでカラムの定義長よりも小さいサイズを指定している場合は，データベースから取得したデータは実際のデータよりも小さい場合があるため，「実際のデータ長」ではなく「取得データ長」となります。

nBLOBType

BLOB型データの取得方法を次のどちらかで指定します。

TYPE_BLOB_MEMORY
メモリ上に一括して取得します。
ResultSetのレコード数が1の場合，BLOB型データをすべて取得します。
ResultSetのレコード数が複数の場合，先頭から32Kバイトまでを取得します。

TYPE_BLOB_FILE
ファイルを経由して取得します。
引数lpctBLOBFileNameに指定された名称が，BLOB型データを格納するファイルのプレフィックスとして使用されます。
なお，引数swTypeでBUFFER_TYPE_DOUBLEを指定している場合，検索の途中で終了しても先読みしているResultSet分のファイルは作成されます。

lpctBLOBFileName

BLOB型データを格納するファイルのプレフィックスを指定します。

引数nBLOBTypeでTYPE_BLOB_FILEを指定した場合，BLOB型データを格納するファイルのプレフィックスには，この引数で指定した名称が使われます。TYPE_BLOB_FILE以外の値を指定した場合は，この引数での指定は無視されます。

BLOB型データを格納したファイル名称は，「プレフィックス+レコード番号+フィールド番号」で表されます。NULLが指定された場合，「DBConnectionの名称+DBPreparedStatementの名称」が仮定されます。

戻り値

なし

機能詳細

検索レコードに対するロック方法，検索時にバッファを幾つ使うか，及びBLOB型データの取得方法について指定します。

指定した各引数の値は，次にGetResultSetメソッドを実行したときから有効になります。

ファイル上でBLOB型データを扱う場合の制限事項

データの格納されているファイルは，DABrokerが終了しても削除されません。アプリケーション自身で削除してください。

作成されたファイルのアクセス権限は，アプリケーションの実行ユーザ及びデフォルトの権限に依存します。例えば，HP-UX上で"user1"が実行しているアプリケーションで，デフォルトumaskが0666の場合，取得したBLOB型データが格納されるファイルも，"user1"の所有する0666のアクセス権限が付与されたファイルとして生成されます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

WaitForDataSourceメソッド

機能

DBPreparedStatementオブジェクトで要求した実行待ち，及び実行中の非同期処理が終了するまで待ちます。非同期処理中に同期を取りたい場合に利用できます。

形式

BOOLEAN WaitForDataSource(UINT32 swWaitTime = DBR_INFINITE)

引数

swWaitTime

非同期処理の終了を待つための最大時間（単位：ミリ秒），又はDBR_INFINITEを指定します。

指定した時間内に非同期処理が終了した場合，TRUEが返ります。指定した時間を経過しても非同期処理が終了しない場合，FALSEが返ります。非同期実行中のSQLがない場合は，TRUEが返ります。

DBR_INFINITEを指定した場合はタイムアウト時間を設定しません。非同期処理が終了するまで待ち続けます。

同期実行時はすぐにTRUEを返します。

戻り値

データ型：BOOLEAN

TRUE：すべての非同期処理が終了しました。

FALSE：タイムアウト時間が経過しました。

機能詳細

DBPreparedStatementオブジェクトで要求した実行待ち，及び実行中の非同期処理(SQL)が，終了するのを待ちます。

DBConnectionクラスのWaitForDataSourceメソッドとの違い

DBPreparedStatementオブジェクトのWaitForDataSourceメソッドでは，WaitForDataSourceメソッドを実行したDBPreparedStatementオブジェクトの非同期実行処理が終了するまで待ちます。ほかのオブジェクトの非同期実行処理については待ちません。そのため，ほかのオブジェクトの非同期実行処理が実行中でも，WaitForDataSourceメソッドを呼び出したオブジェクトの非同期実行処理が終了すれば，WaitForDataSourceメソッドはTRUEを返します。

同じDBConnectionオブジェクトで実行しているすべての非同期実行処理が終了するのを待ちたい場合は，DBConnectionクラスのWaitForDataSourceメソッドを実行してください。

発生する例外

なし

5.10　DBCallableStatementクラスの詳細

ストアドプロシジャの実行を管理します。

このクラスは，ストアドプロシジャの実行やその結果の取得などのメソッドを提供するクラスです。ストアドプロシジャについては，「1.6.11 ストアドプロシジャの利用」，又は「2.6.6 ストアドプロシジャの利用」を参照してください。

ストアドプロシジャを指定できるDBMS

ORACLE

HiRDB

SQLAnywhere，Adaptive Server Anywhere

SQL Server

ストアドプロシジャへの引数設定と実行結果の受け取り

引数を持つプロシジャでは，IN，OUT，IN/OUTのどの属性の引数に対しても？パラメタを使えます。IN，又はIN/OUTの引数に対しては，Executeメソッドで実行する前に，SetParamメソッドで値を設定します。

プロシジャの実行後，IN/OUT，又はOUTの引数に格納された結果を取得するためにはGetParamメソッドを使います。

SQL Anywhere，Adaptive Server Anywhereでは,実行結果をGetResultSetメソッドで生成したDBResultSetオブジェクトとして受け取ることもできます。

なお，GetParamメソッドは，DBPreparedStatementクラスではSetParamメソッドで設定した値を取得するメソッドであるのに対し，DBCallableStatementクラスでは，IN/OUT，又はOUT引数に出力されたストアドプロシジャの実行結果を取得するメソッドです。

機 能 | メソッド名
ストアドプロシジャを実行します。 | Execute
SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。 | GetErrorStatus
SetMaxFieldSizeメソッドで設定したデータ長を取得します。 | GetMaxFieldSize
ResultSetに検索できるレコード数の最大値を取得します。 | GetMaxRows
DBCallableStatementオブジェクトの名前を取得します。 | GetName
IN/OUT,OUTパラメタの数を取得します。 | GetOutputParams
ストアドプロシジャの実行結果を取得します。 | GetParam
IN,IN/OUTパラメタの数を取得します。 | GetParamCount
ストアドプロシジャを実行し，検索したレコードから，ResultSetオブジェクトを生成します。 | GetResultSet
DBCallableStatementオブジェクトに非同期実行中（又は実行待ち）のステートメントがあるかどうかを確認します。 | InExecute
ストアドプロシジャの実行が完了したかどうかを確認します。 | IsCompleted
IN/OUT,OUTパラメタの値がNULL（欠損値）かどうか確認します。 | IsNull
対象となるオブジェクトを生成したDBConnectionオブジェクトのポインタを取得します。 | Parent
DBCallableStatementオブジェクトを削除します。 | Remove
指定されたパラメタの値にNULL（欠損値)を設定します。 | SetNull
DBResultSetオブジェクトを削除します。 | RemoveResultSet
ストアドプロシジャの実行を再開します。 | Resume
アプリケーションで受け取るフィールドの長さを指定します。 | SetMaxFieldSize
ResultSetに検索するレコード数の最大値を指定します。 | SetMaxRows
IN/OUT,INパラメタの値を設定します。 | SetParam
引数で指定したストアドプロシジャ名をデータベースに通知します。 | SetProcedure
DBResultSetオブジェクトの生成オプションを指定します。 | SetResultSetType
DBCallableStatementオブジェクトで要求した実行待ち，及び実行中の非同期処理が終了するまで待ちます。 | WaitForDataSource

＜この節の構成＞

Executeメソッド

GetErrorStatusメソッド

GetMaxFieldSizeメソッド

GetMaxRowsメソッド

GetNameメソッド

GetOutputParamsメソッド

GetParamメソッド

GetParamCountメソッド

GetResultSetメソッド

InExecuteメソッド

IsCompletedメソッド

IsNullメソッド

Parentメソッド

Removeメソッド

RemoveResultSetメソッド

Resumeメソッド

SetMaxFieldSizeメソッド

SetMaxRowsメソッド

SetNullメソッド

SetParamメソッド

SetProcedureメソッド

SetResultSetTypeメソッド

WaitForDataSourceメソッド

Executeメソッド

機能

ストアドプロシジャを実行します。

形式

void Execute (void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

SetProcedureで設定されているストアドプロシジャを実行します。

このメソッドは非同期実行可能なメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_PROCEDURE_NOT_SET

実行するプロシジャが設定されていません。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_DRV_ERROR_PHOLDER_AND_QP

プレースホルダ，及び？パラメタが混在するSQL文は指定できません。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

GetErrorStatusメソッド

機能

SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトへのポインタを取得します。

形式

DBSQLCA *GetErrorStatus(void)

引数

なし

戻り値

データ型：DBSQLCA*

DBSQLCAオブジェクトへのポインタ。

機能詳細

DBSQLCAオブジェクトへのポインタを取得します。

非同期処理のときは，エラーが発生しても直にエラーを取得できません。このため，ユーザは任意の時点でエラーを確認する必要があります。

非同期実行時にエラーが発生した場合，DBSQLCAオブジェクトにエラー情報が設定されます。

DBSQLCAオブジェクトでは，非同期実行中に発生したエラー情報を最大100回分保存できます。エラー情報は，新しいエラー情報から100回分保存されるため，エラー情報を確認したあとはDBSQLCAクラスのDeleteメソッドを呼び出して，不要なエラー情報をクリアしておいてください。

発生する例外

なし

GetMaxFieldSizeメソッド

機能

SetMaxFieldSizeメソッドで設定したデータ長を取得します。

形式

フィールド名で指定する場合

UINT32   GetMaxFieldSize(LPCTSTR lpctFieldName = NULL) throw DBSQLCA

インデクス番号で指定する場合

UINT32   GetMaxFieldSize(UINT32 dwIndex) throw DBSQLCA

引数

lpctFieldName

フィールドの名称，又はNULLを指定します。

NULLが指定された場合，すべてのフィールド長の合計値をバイト数で取得します。

dwIndex

1から始まるフィールドの番号を指定します。

戻り値

データ型：UINT32

SetMaxFieldSizeメソッドで設定したデータ長。

機能詳細

SetMaxFieldSizeメソッドで設定したデータの長さを指定します。データベース中のフィールドの定義長ではないことに注意してください。

取得するデータがフィールドの値を格納する領域の最大長よりも大きい場合，データは切り捨てられます。

このメソッドを呼び出す前に，Executeメソッドを呼び出しておく必要があります。

不定長のフィールドの場合は，0を返します。

このメソッドは，アクセスするDBMSがSQL Anywhere，Adaptive Server Anywhereの場合だけ利用できます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_PROCEDURE_NOT_SET

実行するプロシジャが指定されていません。

DB_DRV_ERROR_INVALID_ARGUMENT

引数に指定した値は不正です。

GetMaxRowsメソッド

機能

ResultSetに検索できるレコード数の最大値を取得します。

形式

UINT32 GetMaxRows(void)

引数

なし

戻り値

テータ型：UINT32

SetMaxRowsメソッドで設定した，レコード数の最大値を取得します。

機能詳細

SetMaxRowsメソッドで設定した，DBResultSetオブジェクトで取得できるレコード数の最大値を取得します。SetMaxRowsメソッドを一度も呼び出していない場合はデフォルト値の100を返します。

このメソッドは，アクセスするDBMSがSQL Anywhere，Adaptive Server Anywhereの場合だけ利用できます。

発生する例外

なし

GetNameメソッド

機能

DBCallableStatementオブジェクトの名前を取得します。

形式

LPCTSTR GetName(void)

引数

なし

戻り値

データ型：LPCTSTR

DBCallableStatementオブジェクトの名前が返ります。

機能詳細

DBCallableStatementオブジェクトの名前を取得します。DBCallableStatementオブジェクトの名称は，DBConnectionクラスのCreateCallableStatementメソッドの引数から生成されます。

発生する例外

なし

GetOutputParamsメソッド

機能

IN/OUT，OUTパラメタの数を取得します。

形式

UINT32 GetOutputParams(void) throw DBSQLCA

引数

なし

戻り値

データ型：UINT32

指定したプロシジャのIN/OUT，OUTパラメタの個数です。

機能詳細

SetProcedureメソッドで指定したプロシジャのIN/OUT，OUTパラメタの個数を取得します。

リターン値の戻るプロシジャの場合，戻り値にはリターン値の分も含みます。

使用するDBMSがSQL Anywhere，Adaptive Server Anywhere，SQL Serverの場合は，このメソッドで返す値は，リターン値の有無にかかわらず常にIN/OUT，OUTパラメタの個数＋１を返します。

これ以外のDBMSの場合は，常にIN/OUT，OUTパラメタの個数だけが取得できます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_PROCEDURE_NOT_SET

実行するプロシジャが指定されていません。

GetParamメソッド

機能

ストアドプロシジャの実行結果を引数で取得します。

形式１：ユーザ確保領域へコピーする場合

インデクス番号指定

void GetParam(UINT32 dwIndex，INT16 * sParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，INT32 * lParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，UINT16* swParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，UINT32* dwParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，SINGLE* sfParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，DOUBLE* dfParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，DBR_DATETIME* dtParam)
                                              throw DBSQLCA

フィールド名指定

void GetParam(LPCTSTR lpctParamName，INT16 * sParam)
                                              throw DBSQLCA
void GetParam(LPCTSTR lpctParamName，INT32 * lParam)
                                              throw DBSQLCA
void GetParam(LPCTSTR lpctParamName，UINT16* swParam)
                                              throw DBSQLCA
void GetParam(LPCTSTR lpctParamName，UINT32* dwParam)
                                              throw DBSQLCA
void GetParam(LPCTSTR lpctParamName，SINGLE* sfParam)
                                              throw DBSQLCA
void GetParam(LPCTSTR lpctParamName，DOUBLE* dfParam)
                                              throw DBSQLCA
void GetParam(LPCTSTR lpctParamName，DBR_DATETIME* dtParam)
                                              throw DBSQLCA

形式２：DABrokerが用意した領域を参照する場合

インデクス番号指定

void GetParam(UINT32 dwIndex，LPTSTR* lptParam) throw DBSQLCA
void GetParam(UINT32 dwIndex，DBR_BINARY* blobParam)
                                              throw DBSQLCA

フィールド名指定

void GetParam(LPCTSTR lpctParamName，LPTSTR* lptParam)
                                              throw DBSQLCA
void GetParam(LPCTSTR lpctParamName，DBR_BINARY* blobParam)
                                              throw DBSQLCA

形式３：ユーザ確保領域へコピーする場合

インデクス番号指定

INT32 GetParam(UINT32 dwIndex，LPTSTR lptParam，UINT32 dwSize)
                                              throw DBSQLCA
INT32 GetParam(UINT32 dwIndex，DBR_BINARY* blobParam，
                               UINT32 dwSize) throw DBSQLCA

フィールド名指定

UINT32 GetParam(LPCTSTR lpctParamName，LPTSTR lptParam，
                               UINT32 dwSize) throw DBSQLCA
UINT32 GetParam(LPCTSTR lpctParamName，DBR_BINARY* blobParam，
                               UINT32 dwSize) throw DBSQLCA

引数

dwIndex

1から始まるパラメタの番号を指定します。指定するパラメタの番号は，プロシジャのパラメタの定義順に割り当てられます。

*xxParam（形式１，３の第2引数）

データをコピーする領域のポインタを指定します。

*xxParam（形式２の第2引数）

ポインタ変数を指定します。

dwSize

コピー先の文字列領域の大きさをバイト数で指定します。

lpctParamName

プロシジャを作成したときのパラメタの名前を指定します。パラメタの名前は，プロシジャで定義した名前を使用してください。

戻り値

データ型：UINT32

コピーした文字列の長さが返ります。パラメタの値を指定された型にキャストして取得します（形式３の場合）。

機能詳細

IN/OUT，OUT引数に出力された結果（パラメタ値）を取得します。このメソッドはプロシジャの実行が終了してから実行してください。プロシジャの実行が終了したかどうかを確認するには，IsCompletedメソッドを利用できます。

形式１の処理

パラメタ値を，引数に指定されたポインタが指す領域に格納します。

形式２の処理

DABrokerが確保した領域にパラメタ値をコピーし，その先頭アドレスをポインタ変数に設定します。このため，LPTSTRまたはDBR_BINARYの変数の確保だけで，パラメタ値をコピーする領域を確保する必要はありません。

パラメタ値の有効期間
パラメタ値は，Executeメソッドや SetProcedureメソッドを実行するまで，又は取得したパラメタに対してSetParamを実行するまで有効です。

形式３の処理

LPTSTR型
引数lptParamの指す領域は，引数dwSizeバイト分確保されている必要があります。

引数dwSizeがデータベースから取得したデータの長さ以下の場合
プロシジャのデータ型が可変長文字列型の場合，引数dwSize-1分のデータ（最後にはNULL終端文字が入る）がコピーされ，残りのデータは切り捨てられます。
プロシジャのデータ型が固定長文字列の場合は，引数dwSize分のデータ（最後にNULL終端文字が入らない）がコピーされ，残りのデータは切り捨てられます。

引数dwSizeがデータベースから取得したデータの長さよりも大きい場合
文字列はすべてコピーします。固定長文字列の場合，残りの領域にはNULL終端文字が埋められます。

DBR_BINARY型
パラメタ値をコピーする領域（LPTSTR型）を確保し，DBR_BINARY型変数（構造体）のDataメンバに設定し，この変数をGetFieldメソッドの引数に指定します。引数dwSizeはこの領域のサイズを指定します。
引数dwSizeはDBR_BINARY型のDataメンバの領域のサイズを指定します。引数dwSizeがデータベースから取得したデータの長さ以下の場合，引数dwSize分のデータがコピーされ，残りのデータは切り捨てられます。この場合，NULL終端文字は入りません。
引数dwSizeがデータベースから取得したデータの長さより大きい場合，データはすべてコピーされ，残りの領域にはNULL終端文字が埋められます。

リターン値を返せるプロシジャを実行した場合

1番目のパラメタにリターン値が返ります。プロシジャがリターン値を返さない場合はリターン値としてパラメタには０が返ります。

データ変換について

データベースのデータ型とGetParamの引数に指定したデータ型とが異なる場合は，値の変換できるものについては引数で指定したデータ型に変換して返します。

文字列から数値データ型への変換に失敗した場合は0を返します。データ型の変換規則については，「7.1 クラスライブラリで扱うデータ型と変換規則」のGetField，GetParamメソッドでのデータ型変換規則を参照してください。

NULL値の扱い

NULLであるパラメタに対してGetParamメソッドを呼び出すと，戻される値は意味のない値(0，空文字列，要素がすべて0，空文字列からなる構造体，又は不定値)となります。

このため，パラメタの値がNULLである可能性がある場合は，IsNullメソッドを呼び出して，NULL値かどうかを確認してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しました。

DB_ERROR_CANNOT_BE_NULL

引数lpctParamName，又は引数xxParamにNULLを指定しています。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwRow，又は引数dwIndexの範囲が不正です（Execute実行前に実行した場合を含みます）。

DB_ERROR_DATA_TRUNCATED

パラメタの値を指定した型に変換できません。

DB_ERROR_PROCEDURE_NOT_COMPLETE

プロシジャが完了していません。

DB_DRV_ERROR_INVALID_ARGUMENT

引数に指定したパラメタ名は不正です。

GetParamCountメソッド

機能

IN，IN/OUTパラメタの数を取得します。

形式

UINT32 GetParamCount(void)

引数

なし

戻り値

データ型：UINT32

パラメタの個数。

機能詳細

SQL文中に含まれるIN，IN/OUTパラメタの個数を取得します。

このメソッドを呼び出す前に，Executeメソッドを呼び出しておく必要があります。

発生する例外

DB_ERROR_PROCEDURE_NOT_SET

実行するプロシジャが指定されていません。

GetResultSetメソッド

機能

ストアドプロシジャを実行し，検索したレコードからResultSetオブジェクトを生成します。

形式

DBResultSet *GetResultSet (void) throw DBSQLCA

引数

なし

戻り値

データ型：DBResultSet*

DBResultSetオブジェクトへのポインタ。

機能詳細

ストアドプロシジャ内のSELECT文(副問合わせ,サブクエリーを除く)の検索結果を取得します。

データベースからSetMaxRowsメソッドで指定されたレコード数分のレコードを検索後，DBResultSetオブジェクトを生成し，生成したオブジェクトへのポインタを返します。

GetResultSetメソッドを呼び出す前に，Executeメソッドを呼び出します。

BLOB型データを扱う場合の制限事項については，SetResultSetTypeメソッド，及び「3.3.4 BLOB型データの取得方法についての制限」を参照してください。

このメソッドは，非同期実行可能なメソッドです。

このメソッドは，アクセスするDBMSがSQL Anywhere，Adaptive Server Anywhereの場合だけ利用できます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しました。

DB_ERROR_BEFORE_EXECUTE

Executeメソッドが実行されていません。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_DRV_ERROR_RDA_PARAM_TYPE

パラメタのデータ型が設定されていないか，又は設定されたデータ型が不正です。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

DB_DRV_ERROR_REQUEST_RESULTSET_ROWS

ResultSetを生成するために指定されたレコード数が不正です。SetMaxRowsメソッドで正しいレコード数を指定してください。

InExecuteメソッド

機能

DBCallableStatementオブジェクトに非同期実行中（又は実行待ち）のステートメントがあるかどうかを確認します。

形式

BOOLEAN  InExecute(void)

引数

なし

戻り値

データ型：BOOLEAN

TRUE：ステートメントが非同期実行中(又は実行待ち)です。

FALSE：非同期実行中(又は実行待ち)ではありません。

機能詳細

InExecuteメソッドを実行したオブジェクト内のステートメントが非同期実行中(又は実行待ち）かどうかを確認します。

非同期実行中(又は実行待ち）の場合はTRUEを，非同期実行中(又は実行待ち）でない場合はFALSEを返します。

同期実行接続時はFALSEを返します。

コネクション内のすべてのステートメントを対象に非同期実行中かどうかを確認するには，InWaitForDataSourceメソッドを呼び出します(DBConnectionクラス)。

発生する例外

なし

IsCompletedメソッド

機能

ストアドプロシジャの実行が完了したかどうかを確認します。

形式

BOOLEAN  IsCompleted(void)

引数

なし

戻り値

データ型：BOOLEAN

TRUE：ストアドプロシジャの実行は完了しています。

FALSE：ストアドプロシジャは非同期実行中(又は実行待ち)です。

機能詳細

IsCompletedメソッドを実行したオブジェクト内のプロシジャの実行が完了したかどうかを確認します。

完了している場合はTRUEを，非同期実行中(又は実行待ち）の場合はFALSEを返します。同期実行接続時はTRUEを返します。SetProcedureメソッドを呼び出した後，まだ，Executeメソッドを実行していない場合もTRUEを返します。

検索結果をResultSetで受け取るプロシジャの場合の注意事項

複数のDBResultSetオブジェクトを生成する場合は，すべてのオブジェクトを取得し終えたときにTRUEが返ります。取得できるDBResultSetオブジェクトがある間はFALSEを返します。

発生する例外

なし

IsNullメソッド

機能

IN/OUT，OUTパラメタの値がNULL（欠損値）かどうかを確認します。

形式

インデクス番号で指定する場合

BOOLEAN  IsNull(UINT32 dwIndex) throw DBSQLCA

パラメタ名で指定する場合

BOOLEAN  IsNull(LPCTSTR lpctName) throw DBSQLCA

引数

dwIndex

1から始まるIN/OUT，OUTパラメタの番号を指定します。

lpctName

プロシジャ作成時に指定したパラメタ名を指定します。

戻り値

データ型：BOOLEAN

TRUE：IN/OUT，OUTパラメタの値がNULLです。

FALSE：IN/OUT，OUTパラメタの値はNULLではありません。

機能詳細

指定されたIN/OUT，OUTパラメタがNULLかどうかを確認します。

NULLはC言語で使用するNULLポインタの意味ではなく，データベースシステムでは「値がない」ことを意味します。

NULLであるIN/OUT，OUTパラメタに対してGetParamメソッドを呼び出すと，戻される値は意味のない値(0，NULL文字列，要素がすべて0，NULL文字列からなる構造体，又は不定値)となります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_PROCEDURE_NOT_COMPLETE

プロシジャが完了していません。

DB_ERROR_RESULTSET_NOT_EXIST

非同期実行時に，検索結果がまだ取得できていません。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwIndexの範囲が不正です。

DB_ERROR_CANNOT_BE_NULL

引数lpctNameにNULLを指定しています。

DB_DRV_ERROR_INVALID_ARGUMENT

引数に指定したパラメタ名，パラメタ番号は不正です。

Parentメソッド

機能

対象となるオブジェクトを生成したDBConnectionオブジェクトのポインタを取得します。

形式

LPOBJECT Parent(void)

引数

なし

戻り値

データ型：LPOBJECT

対象となるオブジェクトを生成したDBConnectionオブジェクトのポインタ。

機能詳細

なし

発生する例外

なし

Removeメソッド

機能

DBCallableStatementオブジェクトを削除します。

形式

void Remove(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

DBCallableStatementオブジェクト（自分自身）を削除します。

非同期処理中に実行待ち，又は実行中のステートメントがある場合は削除できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中ステートメントがあります。

RemoveResultSetメソッド

機能

DBResultSetオブジェクトを削除します。

形式

void RemoveResultSet(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

GetResultSetメソッドで生成したDBResultSetオブジェクトを削除します。

非同期処理中に実行待ち，又は実行中のステートメントがある場合は削除できません。

このメソッドは，アクセスするDBMSがSQL Anywhere，Adaptive Server Anywhereの場合だけ利用できます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行中です。

Resumeメソッド

機能

ResultSetを返すストアドプロシジャの実行を再開します。

形式

void Resume(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

ストアドプロシジャの検索結果をResultSetで取得する場合だけ，GetResultSetメソッドを呼び出した後にResumeメソッドを呼び出す必要があります。Resumeメソッドを呼び出すことで次の処理を継続できます。

このメソッドは，アクセスするDBMSがSQL Anywhere，Adaptive Server Anywhereの場合だけ利用できます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_PROCEDURE_NOT_EXECUTE

プロシジャが実行されていません。

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています(非同期実行時だけ)。

DB_ERROR_IN_ASYNC_EXECUTE

Execute又はGetResultSetが非同期実行中です(非同期実行時だけ)。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。「8.2　C++クラスライブラリのエラー情報」を参照してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。「8.2　C++クラスライブラリのエラー情報」を参照してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

SetMaxFieldSizeメソッド

機能

アプリケーションで受け取るフィールドの長さを指定します。

形式

フィールド名で指定する場合

void SetMaxFieldSize(LPCTSTR lpctFieldName，
                    UINT32 dwMaxSize=0)    throw DBSQLCA

インデクス番号で指定する場合

void SetMaxFieldSize(UINT32 dwIndex，
                    UINT32 dwMaxSize=0)    throw DBSQLCA

引数

lpctFieldName

フィールド名を指定します。

dwIndex

1から始まるフィールドの番号を指定します。

dwMaxSize

アプリケーションで受け取るフィールドの長さを，0以上のバイト数で指定します。この引数で指定された値が，データベースでの定義長よりも大きい場合，引数で指定した値は無視されます。

0を指定すると，データベース中の定義長が仮定されます。

戻り値

なし

機能詳細

アプリケーションで受け取るフィールドの長さを，バイト数で指定します。アプリケーションで必要とするデータがフィールド値全体でなく，フィールド値の一部である場合に利用します。データベース中のフィールドの定義長ではないことに注意してください。

このメソッドを呼び出す前に，Executeメソッドを呼び出しておく必要があります。

このメソッドは，アクセスするDBMSがSQL Anywhere，Adaptive Server Anywhereの場合だけ利用できます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwIndexが1より小さい値です。

DB_ERROR_CANNOT_BE_NULL

引数lpctFieldNameにNULLが指定されています。

DB_ERROR_PROCEDURE_NOT_SET

実行するプロシジャが指定されていません。

DB_DRV_ERROR_INVALID_ARGUMENT

指定した引数は不正です。

DB_DRV_ERROR_INVALID_MAX_SIZE

バッファの最大長の指定値が不正です。

SetMaxRowsメソッド

機能

ResultSetに検索するレコード数の最大値を指定します。

形式

void SetMaxRows(UINT32 dwMaxSize=MAX_ROWS_DEFAULT) throw DBSQLCA

引数

dwMaxSize

ResultSetに検索するレコード数の最大値を，1以上4096以下の値で指定します。

システムデフォルト値は，MAX_ROWS_DEFAULTです（=100が仮定されます）。

戻り値

なし

機能詳細

DBResultSetオブジェクトで一度に取得できる最大レコード数を指定します。

一度の読み込み（GetResultSetメソッド，又はPageNextメソッドの呼び出し）で，データベースから取得するレコード数の最大値を設定します。

1レコードのフィールド数は，DBResultSetMetaDataオブジェクトのGetColumnCountメソッドを呼び出して取得できます。

このメソッドは，アクセスするDBMSがSQL Anywhere，Adaptive Server Anywhereの場合だけ利用できます。

更新可能なDBResultSetオブジェクトでの扱い

DBResultSetオブジェクトが更新可能なオブジェクトとして生成された場合(SetResultSetTypeメソッドの引数swTypeでTYPE_EXCLUSIVEを指定した場合)，SetMaxRowsメソッドによる指定は無視され，常に１が仮定されます。更新可能なDBResultSetは常に1レコードだけを読み込みます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwMaxSizeに範囲外（１より小さい）が指定されています。

SetNullメソッド

機能

指定したパラメタの値にNULL（欠損値)を設定します。

形式

void SetNull(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まるIN,IN/OUTパラメタの番号を指定します。

戻り値

なし

機能詳細

指定されたパラメタにNULLを設定します。

NULLはC言語で使用するNULLポインタの意味ではなく，データベースシステムでは「値がない」ことを意味します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_FOUND

引数dwIndexの範囲が不正です。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

SetParamメソッド

機能

IN/OUT，INパラメタの値を設定します。

形式

void SetParam(UINT32 dwIndex，LPCTSTR lpctParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，INT16 sParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，INT32 lParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，UINT16 swParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，UINT32 dwParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，SINGLE sfParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，DOUBLE dfParam) throw DBSQLCA
void SetParam(UINT32 dwIndex，const DBR_DATETIME& dtParam)
                                             throw DBSQLCA
void SetParam(UINT32 dwIndex，const DBR_BINARY& blobParam)
                                             throw DBSQLCA

引数

指定されたパラメタを，データベースの型にキャストして設定します。

dwIndex

1から始まるパラメタの番号を指定します。指定するパラメタの番号は，SQL文中での出現順に割り当てられます。

xxParam（データ型：形式の第2引数を参照してください）

パラメタに設定する値を指定します。

戻り値

なし

機能詳細

指定されたパラメタの値を設定します。プロシジャの定義でIN/OUT，INで宣言したパラメタのうち，SetProcedureメソッドの引数lpctProcedureで指定した?パラメタに値を設定します。

値は指定するデータ型からデータベース固有の型に変換されます。

SetParamメソッドはSetProcedureメソッドを実行した後に実行してください。

引数lpctParamがNULL（LPCTSTR型の変数にNULLを代入して引数に渡した場合，又はNULLをLPCTSTR型にキャストした場合）の時も欠損値が設定されます。キャストしないで引数にNULLだけを指定した場合は欠損値とはみなしません。

パラメタに欠損値を設定したい場合は，SetNullメソッドを使用してください。

DBR_BINARY型を指定する場合

DBR_BINARY型の各メンバには次の値を設定します。

Length：設定するデータの長さ（単位はバイト）

RealLength：設定不要

Data：実際のデータの領域を指すポインタ

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数dwIndexの範囲が不正です。

DB_ERROR_IN_ASYNC_EXECUTE

ステートメントが非同期実行処理中です。

DB_ERROR_PROCEDURE_NOT_SET

実行するプロシジャが指定されていません。

SetProcedureメソッド

機能

引数で指定したストアドプロシジャ名をデータベースに通知します。

形式

void SetProcedure(LPCTSTR lpctProcedure，
                 UINT16 swWait = LOCK_OPT_DEFAULT)    throw DBSQLCA

引数

lpctProcedure

実行するプロシジャ名を文字列で指定します。

ORACLEの場合
OCIプログラムでプロシジャを実行する際に指定するPL/SQLブロック内の記述を指定します。ただし，プレースホルダは?に置き換えて指定してください。
PL/SQLについてはDBMSのマニュアルを参照してください。
OCIプログラムの指定とDABroker for C++の指定方法の比較を次に示します。
実行するプロシジャ名はGET_SALARY(in,out)とします。
OCIプログラム

 BEGIN
　  GET_SALARY(:id, :salary);
 END;

DABroker for C++プログラム

SetProcedure("GET_SALARY(?,?)");

HiRDBの場合
操作系SQLのCALL文に記述する内容を指定します。プロシジャの引数には?パラメタだけが指定できます。
CALL文の仕様についてはDBMSのマニュアルを参照してください。
HiRDBの埋め込みSQLの指定とDABroker for C++の指定方法の比較を次に示します。
実行するプロシジャ名はGET_SALARY(in,out)とします。
埋め込みSQL

 CALL GET_SALARY(?,?)

DABroker for C++プログラム

 SetProcedure("GET_SALARY(?,?)");

SQL Anywhereの場合
CALL文に記述する内容を指定します。動的に設定するプロシジャの引数には?パラメタだけが指定できます。
RETURN文を含むプロシジャや，ResultSetを返すプロシジャの場合も，SetProcedureメソッドの引数に指定する内容には特に変更ありません。
RETURN文で返す値はGetParamメソッドで取得します。
CALL文の仕様についてはDBMSのマニュアルを参照してください。
CALL文の指定とDABroker for C++の指定方法の比較を次に示します。
実行するプロシジャ名はGET_SALARY(in,out)とします。
CALL文の指定

 CALL GET_SALARY(id,salary)

DABroker for C++プログラム

 SetProcedure("GET_SALARY(?,?)");

CALL文の指定(RETURN文を含むプロシジャの場合)

 RETVALUE = CALL GET_SALARY_RET(id,salary)

DABroker for C++プログラム

 SetProcedure("GET_SALARY(?,?)");

Adaptive Server Anywhere，及びSQL Serverの場合
ODBCでプロシジャを実行する際に記述する内容を指定します。
動的に設定するプロシジャの引数には?パラメタだけが指定できます。
RETURN値はGetParamメソッドで取得します。
ODBCでのプロシジャの実行方法についてはDBMSのマニュアルを参照してください。
ODBCの指定とDABroker for C++の指定方法の比較を次に示します。
実行するプロシジャ名はGET_SALARY(in,out)とします。
ODBCの指定

 {?=CALL GET_SALARY(id,salary)}

DABroker for C++プログラム

 SetProcedure("GET_SALARY(?,?)");

swWait

実行するSQL単位に，処理対象のレコードがほかのトランザクションによってロックされている場合の処理を指定します。次の値のうち，どれか一つを指定します。この引数は，使用するDBMSがSQL Anywhere，Adaptive Server Anywhere の場合だけ指定できます。

LOCK_OPT_DEFAULT
DBConnectionオブジェクトの設定を引き継ぎます。（DBDriverクラスのConnectメソッドの引数swWaitに指定した値）

LOCK_OPT LOCK_OPT_NOWAIT，又は LOCK_OPT_WITH_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。HiRDB又はXDM/RDの場合は同時にロールバックを実行します。それ以外のDBMSの場合は，ロールバックは実行しません。

LOCK_OPT_WITHOUT_ROLLBACK
ロックの解除を待たないで，すぐにエラーを返します。ロールバックは実行しません。
ただし，現在のバージョンでは，XDM/RDではロールバックを実行します。また，HiRDBのDELETE,INSERT,UPDATE文では，このオプションは無効で，LOCK_OPY_WAITと同じ動作になります。

LOCK_OPT_WAIT
ロックが解除されるまで待ちます。

戻り値

なし

機能詳細

引数で指定したストアドプロシジャ名をデータベースに通知します。

使用するDBMSごとのパラメタの扱いを次に示します。

ORACLEの場合

ストアドプロシジャが実行できます。

IN，IN/OUTパラメタで動的に設定するパラメタ，又はOUTパラメタには「?」を指定します。

指定できるパラメタ数の最大値は64個です。

HiRDBの場合

ストアドプロシジャが実行できます。

IN，IN/OUT，OUTパラメタで動的に設定するパラメタかどうかにかかわらず，「?」を指定します。

指定できるパラメタ数は，データベースの仕様に従います。

SQLAnywhere，Adaptive Server Anywhereの場合

ストアドプロシジャ及びファンクションが実行できます。

IN，IN/OUTパラメタで動的に設定するパラメタには，「?」を指定します。OUTパラメタにも，?を指定します。

指定できるパラメタ数は，データベースの仕様に従います。

SQL Serverの場合

ストアドプロシジャが実行できます。

IN，IN/OUTパラメタで動的に設定するパラメタには，「?」を指定します。OUTパラメタにも，?を指定します。

指定できるパラメタ数は，データベースの仕様に従います。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行中です。

DB_ERROR_PROCEDURE_NOT_COMPLETE

プロシジャが終了していません。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

SetResultSetTypeメソッド

機能

DBResultSetオブジェクトの生成オプションを指定します。

DBResultSetオブジェクトを生成するときに，参照専用，又は更新可能のどちらで生成するか選択します。検索レコードに対するロック方法を指定します。

検索時にバッファを幾つ使うかも指定できます。

また，BLOB型データを扱う場合，その取得方法についても指定します。

形式

void SetResultSetType (UINT16 swType = TYPE_EXCLUSIVE|BUFFER_TYPE_SINGLE，
                      DBR_BLOB_TYPE nBLOBType = TYPE_BLOB_MEMORY，
                      LPCTSTR lpctBLOBFileName = NULL)
                                                   throw DBSQLCA

引数

swType

次の三つの値を指定します。

検索したレコードに対するロック方法

検索時に使用するバッファ数

VARCHARデータをDBR_BINARY型で取得した場合のLengthメンバ，RealLengthメンバの意味

指定する値は，上記三つの値の論理和になります。

このメソッドを実行しなかった場合の動作は，TYPE_EXCLUSIVE | BUFFER_TYPE_SINGLE | VARCHAR_LENGTH_DEFを指定した場合と同じになります。

検索したレコードに対するロック方法

次に示すTYPE_EXCLUSIVE，TYPE_EXCLUSIVE2，TYPE_NONE，TYPE_WAIT，TYPE_NOWAIT，TYPE_SHAREDのどれかの値で，検索したレコードに対するロック方法を指定します。

TYPE_EXCLUSIVE又はTYPE_EXCLUSIVE2
DBResultSetオブジェクトからレコードの追加，更新，削除をする場合は，このオプションを指定します。検索したレコードに排他ロックが掛かり，他のトランザクションからの参照・更新を制限できます。実際に排他ロックが掛かるのは，GetResultSetメソッドを実行した時点からです。
このオプションで生成したDBResultSetオブジェクトでは，一度に複数のレコードを読み込めないため，SetMaxRowsで指定したレコード数は無視されます。また，検索条件に一致する次のレコードをアクセスするには，Nextメソッドを使用します。TYPE_EXCLUSIVE，又はTYPE_EXCLUSIVE2で生成したオブジェクトの場合，カーソル制御のメソッドとしてはNextメソッドだけが指定できます。Nextメソッドについては，「5.7 DBResultSetクラスの詳細」を参照してください。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。なお，HiRDB以外のDBMSではTYPE_EXCLUSIVEとTYPE_EXCLUSIVE2で同じオプション文字列へ変換されて実行されます。

ORACLE：FOR UPDATE

SQL Anywhere,Adaptive Server Anywhere：オプション文字列は付加しません。

HiRDB
TYPE_EXCLUSIVE：FOR UPDATE
TYPE_EXCLUSIVE2：WITH EXCLUSIVE LOCK FOR UPDATE

XDM/RD：WITH EXCLUSIVE LOCK FOR UPDATE

SQL Server：UPDLOCK

SQL/K：FOR UPDATE
詳細については，マニュアル「SQL/K」を参照してください。

XDM/SD：LOCK SU

TYPE_NONE
参照専用のDBResultSetオブジェクトを生成します。検索するレコードに対して，参照ロックを掛けます。
このオプションで生成したDBResultSetオブジェクトでは，複数レコードを読み込めます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

ORACLE：付加しません。

SQL Anywhere，Adaptive Server Anywhere：付加しません。

HiRDB：付加しません。

XDM/RD：付加しません。

SQL Server：付加しません。

SQL/K：付加しません。

XDM/SD：付加しません(SDEXCLUSIVE値が仮定されます)。
SDEXCLUSIVE値の詳細については，マニュアル「Database Connection Server」のコントロール空間起動制御文を参照してください。

TYPE_WAIT(HiRDB，XDM/RD，SQL Server，SQL/K，XDM/SDの場合に有効です)
参照専用のDBResultSetオブジェクトを生成します。
検索したレコードに対して参照ロックを掛けますが，見終わった行から排他制御を解除します。このため，DABroker for C++では，ResultSetにレコードをすべて読み込んだ時点，つまり，GetResultSetメソッド，又はPageNextメソッドが完了した時点で，ロックが解除されています。
このオプションで生成したDBResultSetオブジェクトでは，複数レコードを読み込めます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

HiRDB：WITHOUT LOCK WAIT

XDM/RD：WITHOUT LOCK WAIT

SQL Server：HOLDLOCK

SQL/K：付加しません。

XDM/SD：LOCK SR

TYPE_NOWAIT(HiRDB，XDM/RD，SQL Server，SQL/K，XDM/SDの場合に有効です)
参照専用のDBResultSetオブジェクトを生成します。該当するレコードをほかのトランザクションが更新中だったり，TYPE_EXCLUSIVEで検索している場合でも読み込めます。排他制御を全くしません。
このオプションで生成したDBResultSetオブジェクトでは，複数レコードを読み込めます。
なお，この引数の値は，実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に，どのオプション文字列へ変換されて実行されるのかを次に示します。

HiRDB：WITHOUT LOCK NOWAIT

XDM/RD：WITHOUT LOCK NOWAIT

SQL Server：NOLOCK

SQL/K：付加しません。

XDM/SD：LOCK NR

TYPE_SHARED(HiRDB，XDM/RD，SQL/K，XDM/SDの場合だけ有効です)
検索するレコードに共有ロックを掛けます。共有ロックの掛かったレコードは，ほかのトランザクションから参照できますが，更新はできません。

HiRDB：WITH SHARE LOCK

XDM/RD：WITH SHARE LOCK

SQL/K：付加しません。

XDM/SD：LOCK SR

検索時に使用するバッファ数

次に示すBUFFER_TYPE_SINGLE，又はBUFFER_TYPE_DOUBLEのどちらかの値で，検索時に使用するバッファ数を指定します。指定を省略した場合は，BUFFER_TYPE_SINGLEが仮定されます。なお，バッファの利用方法については，「3.3.3 検索性能の向上策」を参照してください。

BUFFER_TYPE_SINGLE
検索結果を保持するバッファを一つだけ使います。

BUFFER_TYPE_DOUBLE
検索結果を保持するバッファを二つ使います。

VARCHARデータをDBR_BINARY型で取得したときのLengthメンバ，RealLengthメンバの意味

次に示す値のどれか一つを指定します。

VARCHAR_LENGTH_DEF

GetFieldメソッドの形式２を使用した場合，又は形式３を使用してもデータの切り捨てが発生しなかった場合
Length：カラムの定義長※
RealLength：0

GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合
Length：切り捨てたデータ長
RealLength：カラムの定義長※
注※　SetMaxFieldSizeメソッドで取得データ長を指定している場合は，「カラムの定義長」ではなく「SetMaxFieldSizeメソッドで指定したサイズ」となります。

VARCHAR_LENGTH_REAL

GetFieldメソッドの形式2を使用した場合，又は形式3を使用してもデータの切り捨てが発生しなかった場合
Length：実際のデータ長※
RealLength：0

GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合
Length：切り捨てたデータ長
RealLength：実際のデータ長※
注※　SetMaxFieldSizeメソッドでカラムの定義長よりも小さいサイズを指定している場合は，データベースから取得したデータは実際のデータよりも小さい場合があるため，「実際のデータ長」ではなく「取得データ長」となります。

nBLOBType

BLOB型データを取得するときは次の方法を使います。

TYPE_BLOB_MEMORY
メモリ上に一括して取得します。
ResultSetのレコード数が1の場合，BLOB型データをすべて取得します。
ResultSetのレコード数が複数の場合，先頭から32Kバイトまでを取得します。

戻り値

なし

機能詳細

検索レコードに対するロック方法，検索時にバッファを幾つ使うか，及びBLOB型データの取得方法について指定します。

指定した各引数の値は，次にGetResultSetメソッドを実行したときから有効になります。

このメソッドは，アクセスするDBMSがSQL Anywhere，Adaptive Server Anywhereの場合だけ利用できます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

WaitForDataSourceメソッド

機能

DBCallableStatementオブジェクトで要求した実行待ち，及び実行中の非同期処理が終了するまで待ちます。非同期処理中に同期を取りたい場合に利用できます。

形式

BOOLEAN WaitForDataSource(UINT16 swWaitTime = DBR_INFINITE)

引数

swWaitTime

非同期処理の終了を待つための最大時間（単位：ミリ秒），又はDBR_INFINITEを指定します。

指定した時間内に非同期処理が終了した場合，TRUEが返ります。指定した時間を経過しても非同期処理が終了しない場合，FALSEが返ります。非同期実行中のSQLがない場合は，TRUEが返ります。

DBR_INFINITEを指定した場合はタイムアウト時間を設定しません。非同期処理が終了するまで待ち続けます。

同期実行時はすぐにTRUEを返します。

戻り値

データ型：BOOLEAN

TRUE：すべての非同期処理が終了しました。

FALSE：タイムアウト時間が経過しました。

機能詳細

DBCallableStatementオブジェクトで要求した実行待ち，及び実行中の非同期処理(SQL)が，終了するのを待ちます。

DBConnectionクラスのWaitForDataSourceメソッドとの違い

DBCallableStatementオブジェクトのWaitForDataSourceメソッドでは，WaitForDataSourceメソッドを実行したDBCallableStatementオブジェクトの非同期実行処理が終了するまで待ちます。ほかのオブジェクトの非同期実行処理については待ちません。そのため，ほかのオブジェクトの非同期実行処理が実行中でも，WaitForDataSourceメソッドを呼び出したオブジェクトの非同期実行処理が終了すれば，WaitForDataSourceメソッドはTRUEを返します。

同じDBConnectionオブジェクトで実行しているすべての非同期実行処理が終了するのを待ちたい場合は，DBConnectionクラスのWaitForDataSourceメソッドを実行してください。

発生する例外

なし

5.11　DBDatabaseMetaDataクラスの詳細

データベース情報を取得します。このクラスは，次に示すようなデータベース情報を取得するメソッドを提供するクラスです。

フィールド一覧

プライマリキー一覧

ストアドプロシジャの一覧

ストアドプロシジャのパラメタ一覧

テーブル一覧

なお，使用するDBMSによっては，取得できない一覧情報があります。このような情報を取得しようとした場合,０件のオブジェクトが返ります。次に，DBMSごとの取得できない一覧を示します。

HiRDBの場合

プライマリキー一覧（GetPrimaryKeysメソッド）

XDM/RDの場合

ストアドプロシジャ一覧（GetProceduresメソッド）

ストアドプロシジャのパラメタ一覧（GetProcedureColumnsメソッド）

プライマリキー一覧（GetPrimaryKeysメソッド）

機 能 | メソッド名
フィールド名一覧を取得します。 | GetColumns
SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトのポインタ取得します。 | GetErrorStatus
プライマリキー一覧を取得します。 | GetPrimaryKeys
ストアドプロシジャの一覧を取得します。 | GetProcedures
ストアドプロシジャのパラメタ一覧を取得します。 | GetProcedureColumns
テーブル一覧を取得します。 | GetTables
DBDatabaseMetaDataオブジェクトに非同期実行中（又は実行待ち）のステートメントがあるかどうかを確認します。 | InExecute
対象となるDBDatabaseMetaDataオブジェクトを生成したDBConnectionオブジェクトのポインタを取得します。 | Parent

＜この節の構成＞

GetColumnsメソッド

GetErrorStatusメソッド

GetPrimaryKeysメソッド

GetProceduresメソッド

GetProcedureColumnsメソッド

GetTablesメソッド

InExecuteメソッド

Parentメソッド

GetColumnsメソッド

機能

フィールド名一覧を取得するために，classListColumnsオブジェクトへのポインタを取得します。

形式

classListColumns *GetColumns(LPCTSTR lpctOwner，
                            LPCTSTR lpctTableName，
                            UINT32 dwMaxSize=0，
                            LPCTSTR lpctCondition = NULL，
                            LPCTSTR lpctEscChar = NULL)
                                            throw DBSQLCA

引数

lpctOwner

テーブルの所有者名を指定します。

lpctTableName

テーブル名を指定します。

dwMaxSize

取得するフィールド数の最大値を指定します。

0を指定した場合は，対象のすべてのフィールドを検索します。

lpctCondition

一覧に含むフィールドのフィールド名をワイルドカードを使用して指定します。この指定は，SQLのLIKE演算子に指定する文字列の形式を使用してください。

XDM/SDの場合，ワイルドカードの指定は無効です。ワイルドカードを指定しても，テーブルに含まれるすべてのフィールドが取得されます。

lpctEscChar

ワイルドカード文字列中に含むエスケープ文字を1文字指定します。2文字以上指定した場合は先頭の文字を使用します。

次のデータベースの場合，この引数は指定できません。

SQL Anywhere

Adaptive Server Anywhere

SQL Server

SQL/K

XDM/SD

戻り値

データ型：classListColumns*

classListColumnsオブジェクトへのポインタ。

機能詳細

フィールド名の一覧を取得するために，classListColumnsオブジェクトへのポインタを取得します。

フィールドを定義した順番をキーにして，昇順にソートして取得します。ただし，次のデータベースの場合，順序はDBMSに依存するため，ソートされません。

SQL Anywhere

Adaptive Server Anywhere

SQL/K

XDM/SD

このメソッドは，非同期実行可能なメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_CANNOT_BE_NULL

所有者名又はテーブル名にNULLを指定しています。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

最大件数の指定が範囲内ではありません。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しています。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_ILLEGAL_VALUE

指定した引数が不正です。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

GetErrorStatusメソッド

機能

SQL文の非同期実行時のエラー情報を得るために，DBSQLCAオブジェクトのポインタ取得します。

形式

DBSQLCA *GetErrorStatus(void)

引数

なし

戻り値

データ型：DBSQLCA *

DBSQLCAオブジェクトへのポインタ。

機能詳細

DBSQLCAオブジェクトへのポインタを取得します。

非同期処理のときは，エラーが発生しても直にエラーを取得できません。このため，ユーザは任意の時点でエラーを確認する必要があります。

非同期実行時にエラーが発生した場合，DBSQLCAオブジェクトにエラー情報が設定されます。

DBSQLCAオブジェクトでは，非同期実行中に発生したエラー情報を最大100回分保存できます。エラー情報は，新しいエラー情報から100回分保存されるため，エラー情報を確認したあとはDBSQLCAクラスのDeleteメソッドを呼び出して，不要なエラー情報をクリアしておいてください。

発生する例外

なし

GetPrimaryKeysメソッド

機能

プライマリキー一覧を取得するために，classListPrimaryKeysオブジェクトへのポインタを取得します。

形式

classListPrimaryKeys *GetPrimaryKeys(LPCTSTR lpctOwner，
                                 LPCTSTR lpctTableName，
                                 LPCTSTR lpctCondition = NULL，
                                 LPCTSTR lpctEscChar = NULL)
                                                 throw DBSQLCA

引数

lpctOwner

テーブルの所有者名を指定します。

lpctTableName

テーブル名を指定します。

lpctCondition

一覧に含むプライマリキーのフィールド名をワイルドカードで指定します。この指定には，SQLのLIKE演算子に指定する文字列の形式を使用してください。SQL Anywhere,Adaptive Server Anywhere,SQL Serverの場合，この引数は指定できません。

lpctEscChar

ワイルドカード文字列中に含むエスケープ文字を1文字指定します。2文字以上を指定した場合は先頭の文字を使用します。SQL Anywhere,Adaptive Server Anywhere,SQL Serverの場合，この引数は指定できません。

戻り値

データ型：classListPrimaryKeys*

classListPrimaryKeysオブジェクトへのポインタ。

機能詳細

指定したテーブルのプライマリキーを構成するフィールドの一覧情報を持つclassListPrimaryKeysオブジェクトへのポインタを取得します。

プライマリキーの優先順位をキーにして，昇順にソートして取得します。ただし，SQL Anywhere，Adaptive Server Anywhereの場合は，順序はDBMSに依存するため，ソートされません。

使用しているDBMSがHiRDB，又はXDM/RDの場合，プライマリキーの一覧は取得できません。

このメソッドは，非同期実行可能なメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_CANNOT_BE_NULL

所有者名，又はテーブル名にNULLを指定しています。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_ILLEGAL_VALUE

指定した引数が不正です。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

GetProceduresメソッド

機能

ストアドプロシジャの一覧を取得するために，classListProceduresオブジェクトへのポインタを取得します。

形式

classListProcedures *GetProcedures(LPCTSTR lpctOwner = NULL，
                                UINT32 dwMaxSize=0，
                                LPCTSTR lpctCondition = NULL，
                                LPCTSTR lpctEscChar = NULL)
                                                throw DBSQLCA

引数

lpctOwner

プロシジャの所有者名，又はNULLを指定します。

NULLを指定した場合，参照できるすべてのストアドプロシジャを検索します。

dwMaxSize

取得するプロシジャの数の最大値を指定します。

0を指定した場合は，対象になるすべてのプロシジャを検索します。

lpctCondition

一覧に含むプロシジャのプロシジャ名を，ワイルドカードを使用して指定します。この指定には，SQLのLIKE演算子に指定する文字列の形式を使用してください。

lpctEscChar

ワイルドカード文字列中に含むエスケープ文字を1文字指定します。2文字以上を指定した場合は先頭の文字を使用します。SQL Anywhere,Adaptive Server Anywhere,SQL Serverの場合，この引数は指定できません。

戻り値

データ型：classListProcedures*

classListProceduresオブジェクトへのポインタ。

機能詳細

ストアドプロシジャの一覧を取得するために，classListProceduresオブジェクトへのポインタを取得します。

SQL Anywhereでは，ストアドプロシジャとファンクションの一覧を取得できます。

ストアドプロシジャ名をキーにして，昇順にソートして取得します。ただし，SQL Anywhere,Adaptive Server Anywhereの場合は，順序はDBMSに依存するため，ソートされません。

このメソッドは，非同期実行可能なメソッドです。

XDM/RDでは取得できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

最大件数の指定が範囲内ではありません。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_ILLEGAL_VALUE

指定した引数が不正です。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

GetProcedureColumnsメソッド

機能

ストアドプロシジャのパラメタ一覧を取得するために，classListProcedureColumnsオブジェクトへのポインタを取得します。

形式

classListProcedureColumns *GetProcedureColumns
                                (LPCTSTR lpctOwner，
                                 LPCTSTR lpctProcedureName，
                                 UINT32 dwMaxSize=0，
                                 LPCTSTR lpctCondition = NULL，
                                 LPCTSTR lpctEscChar = NULL)
                                                 throw DBSQLCA

引数

lpctOwner

プロシジャの所有者名を指定します。

lpctProcedureName

プロシジャ名を指定します。

dwMaxSize

取得するパラメタの数の最大値を指定します。

0を指定した場合は，対象になるすべてのパラメタを検索します。

lpctCondition

一覧に含むプロシジャのパラメタ名を，ワイルドカードを使用して指定します。この指定には，SQLのLIKE演算子に指定する文字列の形式を使用してください。

lpctEscChar

ワイルドカード文字列中に含むエスケープ文字を1文字指定します。2文字以上を指定した場合は先頭の文字を使用します。SQL Anywhere,Adaptive Server Anywhere,SQL Serverの場合，この引数は指定できません。

戻り値

データ型：classListProcedureColumns*

classListProcedureColumnsオブジェクトへのポインタ。

機能詳細

ストアドプロシジャのパラメタ一覧を取得するために，classListProcedureColumnsオブジェクトへのポインタを取得します。

ストアドプロシジャで定義した順番をキーにして，昇順にソートして取得します。ただし，SQL Anywhere，Adaptive Server Anywhereの場合は，順序はDBMSに依存するため，ソートされません。

このメソッドは，非同期実行可能なメソッドです。

XDM/RDの場合

ストアドプロシジャのパラメタ一覧は取得できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_CANNOT_BE_NULL

所有者名，又はプロシジャ名にNULLを指定しています。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

最大件数の指定が範囲内ではありません。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_ILLEGAL_VALUE

指定した引数が不正です。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

GetTablesメソッド

機能

テーブル一覧を取得するために，classListTablesオブジェクトへのポインタを取得します。

形式

classListTables *GetTables(LPCTSTR lpctOwner=NULL，
                          UINT16 swType = TBL_TYPE_TABLE
                                          | TBL_TYPE_VIEW
                                          | TBL_TYPE_SYNONYM
                                          | TBL_TYPE_SYSTEM ，
                          UINT32 dwMaxSize=0，
                          LPCTSTR lpctCondition = NULL，
                          LPCTSTR lpctEscChar = NULL)
                                               throw DBSQLCA

引数

lpctOwner

テーブルの所有者名，又はNULLを指定します。

NULLを指定した場合は，参照できるすべてのテーブルを検索します。

XDM/SDの場合，指定できる所有者名は常に8バイトです。8バイト未満の所有者名を指定すると，後ろに空白が付加されます。

swType

検索するテーブルの種別を指定します。

TBL_TYPE_TABLE：実テーブル（システム所有のテーブルを除く）
XDM/SDを使用しているときは，TBL_TYPE_TABLEだけが指定できます。TBL_TYPE_TABLEを含まない指定をすると，エラーをスローします。ほかの種別と一緒に指定しても，TBL_TYPE_TABLEだけが有効になります。

TBL_TYPE_VIEW：ビュー（システム所有のビューを除く）

TBL_TYPE_SYNONYM：シノニム（システム所有のシノニムを除く）
シノニムの一覧はOracle7を使用しているときだけ取得できます。SQL Anywhere，HiRDB，XDM/RDを使用しているときにTBL_TYPE_SYNONYMだけを指定するとエラーをスローします。ほかの種別と一緒に指定した場合は無視します。

TBL_TYPE_SYSTEM：システム所有のオブジェクト
TBL_TYPE_SYSTEMを指定した場合は，引数lpctOwnerの指定がシステムのものでなくてもシステムディクショナリを取得します。
HiRDBを使用している場合，TBL_TYPE_SYSTEMを指定しても所有者が"HiRDB"の実表については取得できません。
SQL/Kを使用している場合，TBL_TYPE_SYSTEMを指定しても一覧は取得できません。システム所有のオブジェクト件数は0件になります。

dwMaxSize

取得するテーブル数の最大値を指定します。

0を指定した場合は，対象になるすべてのテーブルを検索します。

lpctCondition

一覧に含むテーブルのテーブル名をワイルドカードを使って指定します。この指定には，SQLのLIKE演算子に指定する文字列の形式を使ってください。

lpctEscChar

ワイルドカード文字列中に含むエスケープ文字を1文字指定します。2文字以上を指定した場合は先頭の文字を使用します。

次のデータベースの場合，この引数は指定できません。

SQL Anywhere

Adaptive Server Anywhere

SQL Server

SQL/K

XDM/SD

戻り値

データ型：classListTables*

classListTablesオブジェクトへのポインタ。

機能詳細

テーブル一覧を取得するために，classListTablesオブジェクトへのポインタを取得します。

所有者名，テーブル名の順で，それぞれを昇順にソートして取得します。ただし，次のデータベースの場合，順序はDBMSに依存するため，ソートされません。

SQL Anywhere

Adaptive Server Anywhere

SQL/K

XDM/SD

Adaptive Server Anywhereの場合は，順序はDBMSに依存するため，ソートされません。

このメソッドは，非同期実行可能なメソッドです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

最大件数の指定が範囲内ではありません。

DB_DRV_ERROR_INVALID_TABLELIST_TYPE

実テーブル(システム所有のテーブルを除く)以外の一覧取得はサポートしていません（XDM/SDの場合）。

DB_DRV_ERROR_NOT_SUPPORT_TABLE_LIST

シノニムの一覧表示はサポートしていません（HiRDB，XDM/RD，SQL/K，XDM/SDの場合）。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_ILLEGAL_VALUE

指定した引数が不正です。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

InExecuteメソッド

機能

DBDatabaseMetaDataオブジェクトに非同期実行中（又は実行待ち）のステートメントがあるかどうかを確認します。

形式

BOOLEAN  InExecute(void)

引数

なし

戻り値

データ型：BOOLEAN

TRUE：一覧取得処理が非同期実行中(又は実行待ち)です。

FALSE：非同期実行中(又は実行待ち)ではありません。

機能詳細

InExecuteメソッドを実行したオブジェクト内のステートメントが非同期実行中(又は実行待ち）かどうかを確認します。

非同期実行中(又は実行待ち）の場合はTRUEを，非同期実行中(又は実行待ち）でない場合はFALSEを返します。

同期実行接続時はFALSEを返します。

コネクション内のすべてのステートメントを対象に非同期実行中かどうかを確認するには，InWaitForDataSourceメソッドを呼び出します(DBConnectionクラス)。

発生する例外

なし

Parentメソッド

機能

対象となるDBDatabaseMetaDataオブジェクトを生成したDBConnectionオブジェクトのポインタを取得します。

形式

LPOBJECT Parent(void)

引数

なし

戻り値

データ型：LPOBJECT

対象となるDBDatabaseMetaDataオブジェクトを生成したDBConnectionオブジェクトのポインタ。

機能詳細

なし

発生する例外

なし

5.12　DBTransactionクラスの詳細

トランザクションを管理するクラスです。

トランザクションを制御する，BeginTrans,Commit,Rollbackなどのメソッドや，トランザクションの処理中かどうかを確認するメソッドなどを提供します。

更新処理をするアプリケーションの作成では，できるだけデータベースアクセスにトランザクションを使用してください。もし，トランザクション管理をしなかった場合，コミットは次のように実行されます。

データベースを更新するSQL文を一文実行するごとにコミットされます。これを，自動コミットといいます。自動コミットをするかしないかは，SetAutoCommitメソッドで指定します。

自動コミットは，SELECT文以外のSQLを実行した直後にコミットします。

具体的には，DBConnectionクラスのExecuteDirectメソッド，DBStatementクラスのExecuteメソッド，DBPreparedStatementクラスのExecuteUpdateメソッドでSQL文を実行した後，又はDBResultSetクラスのUpdate，Deleteメソッドを実行した後にコミットします。

ただし，自動コミットを設定すると，更新処理では，そのたびに更新されてしまい，ロールバックなどが有効になりません。アプリケーションを作成する場合は，自動コミットではなく，トランザクションを使用することをお勧めします。

なお，SQL Anywhereの場合，自動コミットを設定していると，SQL文の実行が成功するとコミット，失敗するとロールバックします。

TPBrokerのOTSインタフェースでトランザクションを制御している場合

登録されているDBConnectionオブジェクトがOTSインタフェースを使用している場合でもこのクラスの各メソッドは呼び出せますが，このような場合，DBTransactionオブジェクトではトランザクション制御はしないため，各メソッドの機能は無効になります。

機 能 | メソッド名
トランザクションを開始します。 | BeginTrans
トランザクションをコミットします。 | Commit
DBTransactionオブジェクトの名前を取得します。 | GetName
トランザクションの実行中かどうかを確認します。 | InTransact
対象となるオブジェクトを生成したDBDriverManagerオブジェクトのポインタを取得します。 | Parent
DBTransactionオブジェクト(自分自身)を破棄します。 | Remove
トランザクションをロールバックします。 | Rollback
自動コミットを制御します。 | SetAutoCommit

＜この節の構成＞

BeginTransメソッド

Commitメソッド

GetNameメソッド

InTransactメソッド

Parentメソッド

Removeメソッド

Rollbackメソッド

SetAutoCommitメソッド

BeginTransメソッド

機能

トランザクションを開始します。

形式

void BeginTrans (void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

トランザクションを開始します。SetAutoCommitメソッドでTRUEが設定されていた場合（自動コミット設定）は，FALSEに変更されます。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NO_CONNECTION_OBJECT

DBConnectionオブジェクトが登録されていません。

DB_ERROR_IN_TRANSACTION

トランザクション処理中です。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

Commitメソッド

機能

トランザクションをコミットします。

形式

void Commit(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

BeginTransメソッドによって開始されたトランザクションをコミットします。

対象とするDBConnectionオブジェクトが非同期実行時，実行中，又は実行待ちのステートメントがある場合はコミットできません。コミットする前に，InWaitForDataSourceメソッドを呼び出して，非同期実行中の処理がないことを確認してください。

コミットが成功すると，その時点から次のトランザクションが開始されます。あらためてBeginTransメソッドを呼び出す必要はありません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NO_CONNECTION_OBJECT

DBConnectionオブジェクトが登録されていません。

DB_ERROR_NOT_IN_TRANSACTION

トランザクションが開始されていません。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中のステートメントがあります。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

GetNameメソッド

機能

DBTransactionオブジェクトの名前を取得します。

形式

LPCTSTR GetName(void)

引数

なし

戻り値

データ型：LPCTSTR

DBTransactionオブジェクトの名前。

機能詳細

DBTransactionオブジェクトの名前を取得します。DBTransactionオブジェクトの名前は，DBDriverManagerクラスのTransactionメソッドの引数から生成されます。

発生する例外

なし

InTransactメソッド

機能

トランザクションの実行中かどうかを確認します。

形式

BOOLEAN InTransact(void)

引数

なし

戻り値

データ型：BOOLEAN

TRUE：トランザクション実行中です。

FALSE：自動コミットが設定されています。

機能詳細

現在トランザクションが実行されているかどうかを示します。

BeginTransメソッド発行済み，又はSetAutoCommitメソッドでFALSEに設定している場合で，トランザクションが実行されている場合はTRUEが返されます。

SetAutoCommitメソッドでTRUEに設定し，ステートメントごとの自動コミットが実行されている場合はFALSEが返されます。

発生する例外

なし

Parentメソッド

機能

対象となるオブジェクトを生成したDBDriverManagerオブジェクトのポインタを取得します。

形式

LPOBJECT Parent(void)

引数

なし

戻り値

データ型：LPOBJECT

対象となるオブジェクトを生成したDBDriverManagerオブジェクトへのポインタ。

機能詳細

なし

発生する例外

なし

Removeメソッド

機能

DBTransactionオブジェクト（自分自身）を削除します。

形式

void Remove(void)

引数

なし

戻り値

なし

機能詳細

DBConnectionオブジェクトと関連付けられている場合，ロールバックしてDBConnectionオブジェクトとの関連付けを解消した後，自分自身を削除します。

非同期処理を実行している場合は，実行待ちの処理をすべてキャンセルして，実行中の処理が終了するまで待ってから上記の処理を実行します。

発生する例外

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中ステートメントがあります。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

Rollbackメソッド

機能

トランザクションをロールバックします。

形式

void Rollback(void) throw DBSQLCA

引数

なし

戻り値

なし

機能詳細

BeginTransメソッドによって開始されたトランザクションをロールバックします。

対象とするDBConnectionオブジェクトで非同期処理を実行している場合，実行中又は実行待ちの処理があるとロールバックできません。ロールバックする前に，InWaitForDataSourceメソッドを呼び出して，非同期実行中の処理がないことを確認してください。

ロールバックが成功すると，その時点から次のトランザクションが開始されます。あらためてBeginTransメソッドを呼び出す必要はありません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NO_CONNECTION_OBJECT

DBConnectionオブジェクトが登録されていません。

DB_ERROR_NOT_IN_TRANSACTION

トランザクションが開始されていません。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中ステートメントがあります。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

SetAutoCommitメソッド

機能

自動コミットを制御します。

形式

void SetAutoCommit(BOOLEAN bAutoCommit = TRUE) throw DBSQLCA

引数

bAutoCommit

自動コミットの制御を指定します。

TRUE：ステートメントごとに自動コミットをします。

FALSE：ステートメントごとの自動コミットをやめて，トランザクションを開始します。

戻り値

なし

機能詳細

トランザクションの開始を明示的に宣言しない場合， SQL文が1文実行されるごとに自動的にコミットされます。この自動コミットを制御します。デフォルトでは自動コミットをする（TRUE）になっています。

SetAutoCommitメソッドでFALSEを指定するか，又はBeginTransメソッドを呼び出すと，トランザクションを開始します。設定を変更しただけの場合は，それまでのトランザクションが継続されます。次のSQL実行時から有効になります。

SetAutoCommitメソッドを引数bAutoCommitにTRUEを指定して呼び出すと，自動コミットされるようになります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NO_CONNECTION_OBJECT

DBConnectionオブジェクトが登録されていません。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中ステートメントがあります。

DB_ERROR_DRIVER_ERROR

DBMSでエラーが発生しました。

DB_ERROR_DAB_ACCESS_ERROR

DABrokerでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_DAB_SYSTEMCALL_ERROR

システムコールでエラーが発生しました。

DBSQLCAクラスで詳細コードを確認してください。

DB_ERROR_TIMEOUT

タイムアウトが発生したため制御を戻します。

5.13　classListTablesクラスの詳細

テーブル一覧情報を管理します。

このクラスは，テーブル一覧情報として，所有者名及びテーブル名などを取得するメソッドを提供するクラスです。

機 能 | プロパティ名
テーブル一覧のデータ数を取得します。 | Count

機 能 | メソッド名
テーブルの所有者名を取得します。 | OwnerName
テーブルのデータベース名などの識別子を取得します。 | Qualifier
テーブルのコメントを取得します。 | Remarks
テーブル名を取得します。 | TableName
テーブルの種別（テーブル，ビュー，シノニム，システムディクショナリ）を取得します。 | Type

＜この節の構成＞

Countプロパティ

OwnerNameメソッド

Qualifierメソッド

Remarksメソッド

TableNameメソッド

Typeメソッド

Countプロパティ

引数

なし

機能

テーブル一覧のデータ数を取得します。

非同期実行時に一覧の取得が完了していない場合は0を返します。

データ型

UINT32

データ値

0～4294967295の整数値

OwnerNameメソッド

機能

インデクスで指定したテーブルの所有者名を返します。

形式

LPCTSTR OwnerName(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

所有者名を文字列で返します。

機能詳細

インデクスで指定したテーブルの所有者名を返します。

ORACLEの場合，システム所有のシノニムの場合には所有者名は取得できません。空文字列（長さ0の文字列）を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Qualifierメソッド

機能

インデクスで指定したテーブルのデータベース名などの識別子を返します。

形式

LPCTSTR Qualifier(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

識別子を文字列で返します。

機能詳細

インデクスで指定したテーブルのデータベース名などの識別子を返します。

なお，現在のバージョンでは，常に空文字列（長さ0の文字列）を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Remarksメソッド

機能

インデクスで指定したテーブルのコメントを返します。

形式

LPCTSTR Remarks(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

コメントを文字列で返します。

機能詳細

コメントが設定されていればインデクスで指定したテーブルのコメントを返します。

コメントが設定されていなければ空文字列を返します。

ORACLEの場合，SYNONYM（システム所有のものを含む）はコメントを取得できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

TableNameメソッド

機能

インデクスで指定したテーブルのテーブル名を取得します。

形式

LPCTSTR TableName(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

フィールド名を文字列で返します。

機能詳細

インデクスで指定したテーブルのテーブル名を取得します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Typeメソッド

機能

テーブルの種別（テーブル，ビュー，シノニム，システムディクショナリ）を取得します。

形式

UINT16 Type(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：UINT32

識別子を文字列で返します。

機能詳細

インデクスで指定したテーブルの種別を返します。

次の四つのマクロのうちのどれかが返ります。

TBL_TYPE_TABLE（システム所有のテーブルを除く）

TBL_TYPE_VIEW（システム所有のビューを除く）

TBL_TYPE_SYNONYM（システム所有のシノニムを除く）

TBL_TYPE_SYSTEM （システム所有のオブジェクトすべて）

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

5.14　classListColumnsクラスの詳細

フィールド一覧情報を管理します。

このクラスは，フィールド一覧情報として，フィールド名や属性値などを取得するメソッドを提供するクラスです。

機 能 | プロパティ名
フィールド一覧のデータ数を取得します。 | Count

機 能 | メソッド名
繰り返し列の要素の数を取得します。 | ArraySize
フィールド名を取得します。 | ColumnName
フィールドのデータ型をC++の型で取得します。 | CType
フィールドのデータ型をDBMSの型で取得します。 | DBType
NULLを許すかどうかを確認します。 | Nullable
フィールドの最大長を取得します。TypeがCOL_TYPE_NUMERICの場合，小数点以下を含めた数値の有効桁数です。 | Precision
フィールドのコメントを取得します。 | Remarks
Typeメソッドで返すフィールドの型がCOL_TYPE_NUMERICの場合，小数点位置を取得します。 | Scale
フィールドのデータ型を取得します。 | Type
値の重複を許すかどうかを確認します。 | Uniqueness

＜この節の構成＞

Countプロパティ

ArraySizeメソッド

ColumnNameメソッド

CTypeメソッド

DBTypeメソッド

Nullableメソッド

Precisionメソッド

Remarksメソッド

Scaleメソッド

Typeメソッド

Uniquenessメソッド

Countプロパティ

引数

なし

機能

フィールド一覧のデータ数を取得します。

非同期実行時に一覧の取得が完了していない場合は0を返します。

データ型

UINT32

データ値

0～4294967295の整数値

ArraySizeメソッド

機能

繰り返し列の要素の数を取得します。

形式

UINT32 ArraySize(UINT32 ui32Index) throw DBSQLCA

引数

ui32Index

フィールド番号を，１～フィールド数の範囲の値で指定します。

戻り値

データ型：UINT32

繰り返し列の要素の数を返します。

機能詳細

フィールド番号によって特定した繰り返し列の，要素の数を返します。

指定したフィールドが繰り返し列でない場合は，0が返ります。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数ui32Indexで0が指定されています。

ColumnNameメソッド

機能

インデクスで指定したフィールドのフィールド名を取得します。

形式

LPCTSTR ColumnName(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

フィールド名を文字列で返します。

機能詳細

インデクスで指定したフィールドのフィールド名を取得します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

CTypeメソッド

機能

フィールドのデータ型をC++の型で取得します。

形式

DBR_CTYPE CType(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：DBR_CTYPE

インデクスで指定したフィールドのC++データ型を返します。

機能詳細

インデクスで指定したフィールドのC++データ型を取得します。

戻り値として返る値については，「7.1 クラスライブラリで扱うデータ型と変換規則」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

DBTypeメソッド

機能

フィールドのデータ型をDBMSの型で取得します。

形式

UINT16 DBType(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：UINT16

インデクスで指定したフィールドのDBMSのデータ型を返します。

機能詳細

インデクスで指定したフィールドのDBMSのデータ型を返します。

データ型の詳細については，使用するDBMSのマニュアルを参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Nullableメソッド

機能

インデクスで指定したフィールドでNULL値を許すかどうかを確認します。

形式

BOOLEAN Nullable(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：BOOLEAN

TRUE：NULLを許します。

FALSE：NULLを許しません。

機能詳細

インデクスで指定したフィールドがNULLを許すかどうかをBOOLEAN値で返します。

XDM/SDの場合の戻り値は常にFALSEです。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Precisionメソッド

機能

インデクスで指定したフィールドの最大長を取得します。

形式

UINT32 Precision(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：UINT32

インデクスで指定したフィールドの最大長を返します。

機能詳細

インデクスで指定したフィールドの最大長を取得します。

Typeメソッドで返すフィールドの型がCOL_TYPE_NUMERICの場合，小数点以下を含めた数値の有効桁数を返します。

Typeメソッドの戻り値が以下に示す値の場合はフィールドの定義長を返します。

COL_TYPE_CHAR

COL_TYPE_VARCHAR

COL_TYPE_LONGVARCHAR

COL_TYPE_BINARY

COL_TYPE_VARBINARY

COL_TYPE_LONGVARBINARY

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Remarksメソッド

機能

インデクスで指定したフィールドのコメントを取得します。

形式

LPCTSTR Remarks(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

コメントを文字列で返します。

機能詳細

コメントが設定されている場合，インデクスで指定したフィールドのコメントを文字列で取得します。

コメントが設定されていない場合，空文字列を返します。

フィールドのコメントを取得できるのはSQL Anywhere，Adaptive Server Anywhere，SQL Server及びHiRDBです。他のDBMSの場合は常に空文字列（長さ0の文字列）を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Scaleメソッド

機能

Typeメソッドで返すフィールドの型がCOL_TYPE_NUMERICの場合，小数点位置を取得します。

形式

INT32 Scale(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：INT32

インデクスで指定したフィールドの小数点位置を返します。

機能詳細

インデクスで指定したフィールドの，Typeメソッドで取得したフィールドの型がCOL_TYPE_NUMERICの場合，小数点位置を取得します。

この値が0のとき整数となります。また，マイナスの場合桁上がりとなります。

ただし，Typeメソッドで取得したフィールドの型が次に示す値の場合，Scaleメソッドは常に0を返します。

COL_TYPE_CHAR

COL_TYPE_VARCHAR

COL_TYPE_LONGVARCHAR

COL_TYPE_BINARY

COL_TYPE_VARBINARY

COL_TYPE_LONGVARBINARY

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Typeメソッド

機能

インデクスで指定したフィールドのデータ型を取得します。

形式

UINT16 Type(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：UINT16

「7.1　クラスライブラリで扱うデータ型と変換規則」のデータ型対応表を参照してください。

現バージョンでサポートしていないデータ型のフィールドの場合，Typeメソッドの戻り値はCOL_TYPE_NULLとなります。

機能詳細

インデクスで指定したフィールドのデータ型を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Uniquenessメソッド

機能

インデクスで指定したフィールドが値の重複を許すかどうかを確認します。

形式

BOOLEAN Uniqueness(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：BOOLEAN

インデクスで指定したフィールドが重複した値を許すかどうかを返します。

TRUE：重複した値を許しません。

FALSE：重複した値を許します。

機能詳細

使用するDBMSがORACLEの場合，インデクスで指定したフィールドが重複した値を許すかどうかをBOOLEAN値で返します。

使用するDBMSがORACLE以外の場合は，常にFALSEを返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

5.15　classListProceduresクラスの詳細

ストアドプロシジャの一覧情報を管理します。

このクラスは，プロシジャ一覧情報として，プロシジャ名，その定義などを取得するメソッドを提供するクラスです。

使用しているDBMSがXDM/RD，XDM/SD，又はSQL/Kの場合はどの一覧も取得できません。取得した場合,常に０件が返ります。

機 能 | プロパティ名
プロシジャ一覧のデータ数を取得します。 | Count

機 能 | メソッド名
プロシジャの定義を取得します。 | Define
所有者名を取得します。 | OwnerName
プロシジャ名を取得します。 | ProcedureName
データベース名などの識別子を取得します。 | Qualifier
コメントを取得します。 | Remarks

＜この節の構成＞

Countプロパティ

Defineメソッド

OwnerNameメソッド

ProcedureNameメソッド

Qualifierメソッド

Remarksメソッド

Countプロパティ

引数

なし

機能

プロシジャ一覧のデータ数を取得します。

非同期実行時に一覧の取得が完了していない場合は0を返します。

データ型

UINT32

データ値

0～4294967295の整数値

Defineメソッド

機能

インデクスで指定したプロシジャの定義を返します。

形式

LPCTSTR Define(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

プロシジャの定義を文字列で返します。

機能詳細

インデクスで指定したプロシジャの定義を返します。

SQL Anywhere，Adaptive Server Anywhere，SQL Serverの場合は，このメソッドは利用できません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

OwnerNameメソッド

機能

インデクスで指定したプロシジャの所有者名を返します。

形式

LPCTSTR OwnerName(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

所有者名を文字列で返します。

機能詳細

インデクスで指定したプロシジャの所有者名を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

ProcedureNameメソッド

機能

インデクスで指定したプロシジャのプロシジャ名を返します。

形式

LPCTSTR ProcedureName(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

プロシジャ名を文字列で返します。

機能詳細

インデクスで指定したプロシジャのプロシジャ名を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Qualifierメソッド

機能

インデクスで指定したプロシジャのデータベース名などの識別子を返します。

形式

LPCTSTR Qualifier(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

識別子を返します。

機能詳細

インデクスで指定したプロシジャのデータベース名などの識別子を返します。

なお，この指定は常に空文字列（長さ0の文字列）を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Remarksメソッド

機能

インデクスで指定したプロシジャのコメントを返します。

形式

LPCTSTR Remarks(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

コメントを文字列で返します。

機能詳細

インデクスで指定したプロシジャのコメントを文字列で返します。

なお，コメントを取得できるのはSQL Anywhere,Adaptive Server Anywhere,SQL Serverの場合だけで，これ以外のDBMSでは常に空文字列（長さ0の文字列）を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

5.16　classListProcedureColumnsクラスの詳細

ストアドプロシジャのパラメタ一覧情報を管理します。

このクラスは，パラメタ名や属性，及びパラメタの用途などを取得するメソッドを提供するクラスです。

使用しているDBMSがXDM/RD，XDM/SD，又はSQL/Kの場合は，このクラスは利用できません。

機 能 | プロパティ名
プロシジャのパラメタ一覧のデータ数を取得します。 | Count

機 能 | メソッド名
パラメタ名を取得します。 | ColumnName
パラメタの用途を取得します。 | ColumnType
パラメタのデータ型をC++の型で取得します。 | CType
パラメタのデータ型をDBMSの型で取得します。 | DBType
パラメタでNULL値を許すかどうかを確認します。 | Nullable
パラメタの長さの最大値を取得します。 | Precision
コメントを取得します。 | Remarks
Typeメソッドで返すパラメタの型がCOL_TYPE_NUMERICの場合，小数点位置を取得します。 | Scale
パラメタのデータ型を取得します。 | Type

＜この節の構成＞

Countプロパティ

ColumnNameメソッド

ColumnTypeメソッド

CTypeメソッド

DBTypeメソッド

Nullableメソッド

Precisionメソッド

Remarksメソッド

Scaleメソッド

Typeメソッド

Countプロパティ

引数

なし

機能

ストアドプロシジャのパラメタ一覧のデータ数を取得します。

非同期実行時に一覧の取得が完了していない場合は0を返します。

データ型

UINT32

データ値

0～4294967295の整数値

ColumnNameメソッド

機能

ストアドプロシジャのパラメタ名を取得します。

形式

LPCTSTR ColumnName(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

パラメタ名を文字列で返します。

機能詳細

インデクスで指定したプロシジャのパラメタ名を取得します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

ColumnTypeメソッド

機能

ストアドプロシジャのパラメタの用途を取得します。

形式

UINT16 ColumnType(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。範囲外のインデクスを指定しないようにしてください。

戻り値

データ型：UINT16

次の三つのマクロの値のうちどれか一つを返します。

PARAM_TYPE_INPUT

PARAM_TYPE_OUTPUT

PARAM_TYPE_INOUT

機能詳細

インデクスで指定したプロシジャのパラメタの用途を取得します。

PARAM_TYPE_INPUT：入力用のパラメタ

PARAM_TYPE_OUTPUT：出力用のパラメタ

PARAM_TYPE_INOUT：入出力用のパラメタ

非同期実行時で一覧の取得が完了する前に，このメソッドは呼び出せません。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

CTypeメソッド

機能

パラメタのデータ型をC++の型で取得します。

形式

DBR_CTYPE CType(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：DBR_CTYPE

インデクスで指定したプロシジャのパラメタのデータ型をC++データ型で返します。

機能詳細

インデクスで指定したプロシジャのパラメタのC++データ型を返します。

返す値については，「7.1　クラスライブラリで扱うデータ型と変換規則」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

DBTypeメソッド

機能

パラメタのデータ型をDBMSの型で取得します。

形式

UINT16 DBType(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：UINT16

インデクスで指定したプロシジャのパラメタのDBMSのデータ型を返します。詳細については，「7.1　クラスライブラリで扱うデータ型と変換規則」のデータ型対応表を参照してください。

機能詳細

インデクスで指定したプロシジャのパラメタのDBMSのデータ型を返します。

データ型の詳細については，使用するDBMSのマニュアルを参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Nullableメソッド

機能

パラメタでNULL値を許すかどうかを確認します。

形式

BOOLEAN Nullable(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：BOOLEAN

TRUE：NULLを許します。

FALSE：NULLを許しません。

機能詳細

インデクスで指定したプロシジャのパラメタでNULLを許すかどうかを，BOOLEAN型の値で取得します。

NULLを許す場合TRUEを，NULLを許さない場合FALSEを返します。

HiRDBを使用している場合は常にTRUEを返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Precisionメソッド

機能

プロシジャで使用するパラメタの長さの最大値を取得します。

形式

UINT32 Precision(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：UINT32

インデクスで指定したプロシジャのパラメタ長の最大値を返します。

機能詳細

インデクスで指定したプロシジャのパラメタ長の最大値を取得します。

Typeメソッドで取得したパラメタの型がCOL_TYPE_NUMERICの場合，小数点以下を含めた数値の有効桁数を返します。

ただし，Typeメソッドで取得したパラメタの型が以下に示す値の場合はパラメタの定義長を返します。

COL_TYPE_CHAR

COL_TYPE_VARCHAR

COL_TYPE_LONGVARCHAR

COL_TYPE_BINARY

COL_TYPE_VARBINARY

COL_TYPE_LONGVARBINARY

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Remarksメソッド

機能

パラメタにコメントがある場合，そのコメントを取得します。

形式

LPCTSTR Remarks(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

コメントを文字列で返します。

機能詳細

インデクスで指定したプロシジャのパラメタのコメントを文字列で取得します。

なお，SQL Anywhere，Adaptive Server Anywhere,SQL Serverの場合だけ指定できます。これ以外のDBMSの場合は，常に空文字列（長さ０の文字列）を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Scaleメソッド

機能

Typeメソッドで返すパラメタの型がCOL_TYPE_NUMERICの場合，小数点位置を取得します。

形式

INT32 Scale(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：INT32

インデクスで指定したプロシジャのパラメタの小数点位置を返します。

機能詳細

インデクスで指定したプロシジャの，パラメタの小数点位置を取得します。

Typeメソッドで取得したパラメタの型がCOL_TYPE_NUMERICの場合，小数点位置を返します。この値が0のとき整数となります。また，マイナスの場合桁上がりとなります。

そのほかの型については，Precisionメソッドを参照してください。

ただし，Typeメソッドで取得したパラメタの型が以下に示す値の場合，Scaleメソッドは常に0を返します。

COL_TYPE_CHAR

COL_TYPE_VARCHAR

COL_TYPE_LONGVARCHAR

COL_TYPE_BINARY

COL_TYPE_VARBINARY

COL_TYPE_LONGVARBINARY

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Typeメソッド

機能

プロシジャのパラメタのデータ型を取得します。

形式

UINT16 Type(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：UINT16

「7.1　クラスライブラリで扱うデータ型と変換規則」のデータ型対応表を参照してください。

現在のバージョンでサポートしていないデータ型のパラメタの場合，Typeメソッドの戻り値はCOL_TYPE_NULLとなります。

機能詳細

インデクスで指定したプロシジャのパラメタのデータ型を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

5.17　classListPrimaryKeysクラスの詳細

テーブル中のプライマリキーを構成するフィールドの一覧情報を管理します。

このクラスは，フィールド名，プライマリーキー名，テーブル名，などを取得するメソッドを提供するクラスです。

使用しているDBMSがXDM/RD，XDM/SD，又はSQL/Kの場合は，このクラスは利用できません。

機 能 | プロパティ名
プライマリキーを構成するフィールドの一覧のデータ数を取得します。 | Count

機 能 | メソッド名
フィールド名を取得します。 | ColumnName
プライマリキー名を取得します。 | KeyName
所有者名を取得します。 | OwnerName
フィールドのプライマリキー中の優先順位を取得します。 | Sequence
テーブル名を取得します。 | TableName

＜この節の構成＞

Countプロパティ

ColumnNameメソッド

KeyNameメソッド

OwnerNameメソッド

Sequenceメソッド

TableNameメソッド

Countプロパティ

引数

なし

機能

プライマリキーを構成するフィールドの一覧のデータ数を取得します。

非同期実行時に一覧の取得が完了していない場合は0を返します。

HiRDB，又はXDM/RDを使用している場合は常に0を返します。

データ型

UINT32

データ値

0～4294967295の整数値

ColumnNameメソッド

機能

プライマリキー一覧中のインデクスで指定したフィールドのフィールド名を返します。

形式

LPCTSTR ColumnName(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

NULL文字で終了する文字列を返します。

機能詳細

プライマリキー一覧中のインデクスで指定したフィールドのフィールド名を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

KeyNameメソッド

機能

プライマリキー一覧中のインデクスで指定したフィールドのプライマリキーの名称を返します。

形式

LPCTSTR KeyName(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

プライマリキーの名称を返します。

機能詳細

プライマリキーのインデクスで指定したフィールドのキーの名称を文字列で返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

OwnerNameメソッド

機能

プライマリキー一覧中のインデクスで指定したフィールドの所有者名を返します。

形式

LPCTSTR OwnerName(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

所有者名を文字列で返します。

機能詳細

プライマリキー一覧中のインデクスで指定したフィールドの所有者名を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

Sequenceメソッド

機能

プライマリキー一覧中のインデクスで指定したフィールドのプライマリキー中の優先順位を取得します。

形式

UINT32 Sequence(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：UINT32

プライマリキー一覧中のインデクスで指定したフィールドのプライマリキー中の優先順位を返します。

機能詳細

プライマリキー一覧中のインデクスで指定したフィールドのプライマリキー中の優先順位を取得します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

TableNameメソッド

機能

プライマリキー一覧中のインデクスで指定したフィールドがあるテーブル名を返します。

形式

LPCTSTR TableName(UINT32 dwIndex) throw DBSQLCA

引数

dwIndex

1から始まる一覧中のインデクスを指定します。

戻り値

データ型：LPCTSTR

テーブル名を文字列で返します。

機能詳細

プライマリキー一覧中のインデクスで指定したフィールドがあるテーブル名を返します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

DB_ERROR_IN_ASYNC_EXECUTE

非同期実行処理中です。

6.　共通関数詳細

DABrokerでは，C++による開発向けのプログラミングインタフェースとして，C++クラスライブラリを提供します。ここでは，エラー処理に使うクラスライブラリ及び繰り返し列に関するプロパティやメソッドの詳細について説明します。

＜この章の構成＞

6.1　DBSQLCAクラスの詳細

6.2　DBRArrayDataFactoryクラス

6.3　DBRArrayDataクラス

6.4　DBRArrayDataPtrクラス

6.5　DBRArrayDataConstPtrクラス

6.1　DBSQLCAクラスの詳細

エラー情報を管理します。

このクラスは，エラー情報やその数などを取得するメソッドを提供するクラスです。

同期処理を実行している場合，スローされた例外をキャッチします。非同期処理を実行している場合は，最大100個までのエラーを保存できます。各種のエラー情報を保存するプロパティを持ち，各プロパティ値を参照するメソッドや，保存されているエラーを削除するメソッドを提供します。

DBMS非依存エラーコードについて

DBMS非依存エラーコードとは，DABrokerが，DBMSごとに異なるエラーコードの違いを吸収し，アプリケーションでDBMSを意識しないでエラー処理を記述するためのものです。

e_USERCODEプロパティとe_USERERRORプロパティには,DBMS非依存エラーコードが設定されます。内容については「2.4 エラー処理」を参照してください。

エラー情報の参照

同期処理実行の場合

アプリケーションで同期処理を実行している場合は，一度に一つのエラーがDBSQLCAオブジェクトにスローされます。

エラー情報を取得するためには，オブジェクトのプロパティ値を参照します。

（例１）

catch (DBSQLCA ca)
{
  code=ca.e_USERCODE   // codeにエラーコードを取得
}

非同期処理実行の場合

非同期処理を実行している場合に発生したエラーは，DBSQLCAオブジェクトに複数保存されています。このDBSQLCAオブジェクトへのポインタは，各クラスのGetErrorStatusメソッドで取得できます。

（例２）

DBSQLCA     *pError;
pError = pStatement->GetErrorStatus();
        // pErrorにDBSQLCAオブジェクトのポインタを取得

DBSQLCAオブジェクトに保存される複数のエラーには，発生した順番に１から始まるインデクス番号が割り当てられます。また，ある時点までに取得したエラーの個数が，Countプロパティに設定されます。エラー情報は最大100個まで保存しますが，それ以降は古いエラー情報からエラーが発生するたびに削除されます。

現在エラー情報が幾つ保存されているかを知るには，Countプロパティの値を参照します。例えば，Countプロパティの値が「3」の場合は，現在3個のエラーが保存されています。

エラー情報を取得するには，DBSQLCAオブジェクトのGet～メソッドを使います。これらのメソッドでは，取得したいエラーのインデクス番号を指定できます。例えば， Countプロパティの値が「3」の場合に，最新のエラー情報を取得するためには， Get～メソッドのインデクスに「3」を設定します。過去のエラー情報を参照したい場合は，「3」より小さい数を指定します。

過去のエラー情報をすべて削除したい場合はDeleteメソッドを呼び出します。Deleteメソッドでエラー情報を削除すると，その後はまた発生した順番に，１から始まるインデクス番号が割り当てられて，複数のエラーが保存されます。

機 能 | プロパティ名
DBSQLCAオブジェクトが保存しているエラーの総数が設定されます。 | Count
最新のエラーの，DABrokerメッセージテキストが設定されます。 | ErrorMessage
最新のエラーの，DABrokerエラーコードが設定されます。 | RetCode
最新のエラーの，データベース固有のエラーコードが設定されます。 | e_SQLCODE
最新のUPDATE/INSERT/DELETE操作で実際に処理されたレコード数が設定されます。 | e_SQLCOUNT
最新のエラーの，データベース固有のエラーメッセージが設定されます。 | e_SQLERROR
最新のエラーの，データベース固有のSQLSTATE値が設定されます。 | e_SQLSTATE
最新のエラーの， DBMS非依存エラーコードが設定されます。 | e_USERCODE
最新のエラーの， DBMS非依存エラーコードのエラーメッセージが設定されます。 | e_USERERROR

機 能 | メソッド名
DBSQLCAオブジェクトを削除します。 | Delete
指定されたエラーの，DABrokerメッセージテキストを取得します。 | GetErrorMessage
指定されたエラーの，DABrokerエラーコードを取得します。 | GetRetCode
指定されたエラーの，データベース固有のエラーコードを取得します。 | GetSQLCODE
指定されたUPDATE/INSERT/DELETE操作で実際に処理されたレコード数を取得します。 | GetSQLCOUNT
指定されたエラーの，データベース固有のエラーメッセージを取得します。 | GetSQLERROR
指定されたエラーの，データベース固有のSQLSTATE値を取得します。 | GetSQLSTATE
指定されたエラーの，DBMS非依存エラーコードを取得します。 | GetUSERCODE
指定されたエラーの，DBMS非依存エラーコードのエラーメッセージを取得します。 | GetUSERERROR

＜この節の構成＞

Countプロパティ

ErrorMessageプロパティ

e_SQLCODEプロパティ

e_SQLCOUNTプロパティ

e_SQLERRORプロパティ

e_SQLSTATEプロパティ

e_USERCODEプロパティ

e_USERERRORプロパティ

RetCodeプロパティ

Deleteメソッド

GetErrorMessageメソッド

GetRetCodeメソッド

GetSQLCODEメソッド

GetSQLCOUNTメソッド

GetSQLERRORメソッド

GetSQLSTATEメソッド

GetUSERCODEメソッド

GetUSERERRORメソッド

Countプロパティ

引数

なし

機能

DBSQLCAオブジェクトに保存しているエラーの個数が設定されます。

同期処理中のDBSQLCAオブジェクトでは，常に１となります。

非同期処理のDBSQLCAオブジェクトの場合，エラーが発生していなければ0となります。複数のエラーを保存している場合，保存しているエラーの個数が設定されます。なお， DBSQLCAオブジェクトでは，新しいエラーから最大100個までのエラーを保存できます。

データ型

INT16

データ値

0～100

ErrorMessageプロパティ

引数

なし

機能

C++クラスライブラリで発生したエラーのメッセージテキストが設定されます。DBDriverManagerクラスのInitializeMessageメソッドを実行していない場合は，このプロパティにはNULLが設定されます。

非同期処理のDBSQLCAオブジェクトの場合，エラーが発生していなければNULLが設定されます。複数のエラーを保存している場合は，最新のメッセージテキストが設定されます。

Red Hat Linux版では，エラーメッセージは英語で出力されます（ロケールや環境ファイルにも依存しません）。

データ型

LPCTSTR

データ値

NULL文字で終了する文字列

e_SQLCODEプロパティ

引数

なし

機能

DBMSのエラー，DABroker本体のエラー，システムコール（OSのエラー），又はC++クラスライブラリのエラーが発生した場合の詳細コードが設定されます。

エラーの内容が上記以外の場合は0が返されます。

非同期処理のDBSQLCAオブジェクトの場合，エラーが発生していなければ0が設定されます。複数のエラーを保存している場合は，最新の詳細コードが設定されます。

データ型

INT32

データ値

機能に示したエラーの発生元のエラーコードに依存します。内容は，それぞれについて説明したドキュメントを参照してください。

e_SQLCOUNTプロパティ

引数

なし

機能

UPDATE，INSERT，DELETE文の実行中にエラーが発生した場合，その発生までに処理されたレコード数が設定されます。

非同期処理のDBSQLCAオブジェクトの場合，エラーが発生していなければ0が設定されます。複数のエラーを保存している場合は，最新のエラーでの処理済みレコード数が設定されます。

データ型

UINT32

データ値

0～4294967295の整数値

e_SQLERRORプロパティ

引数

なし

機能

DBMSのエラー，DABroker本体のエラー，システムコール（OSのエラー），又はC++クラスライブラリのエラーが発生した場合のエラーメッセージが設定されます。

エラーの内容が上記以外の場合は0が返されます。

このプロパティはDBDriverManagerクラスのInitializeMessageメソッドを実行していても，していなくても，エラーメッセージを取得します。

非同期処理のDBSQLCAオブジェクトの場合，エラーが発生していなければ0が設定されます。複数のエラーを保存している場合は，最新のエラーメッセージが設定されます。

データ型

LPCTSTR

データ値

機能に示したエラーの発生元のエラーコードに依存します。内容は，それぞれについて説明したドキュメントを参照してください。

e_SQLSTATEプロパティ

引数

なし

機能

データベース固有のSQLSTATE値が設定されます。ただし，接続先DBMSとしてORACLE7を使用している場合は空文字列が設定されます。

エラーの発生場所がデータベースでなくC++クラスライブラリの場合はNULLが設定されます。

非同期処理のDBSQLCAオブジェクトの場合，エラーが発生していなければ0が設定されます。複数のエラーを保存している場合は，最新のエラーメッセージが設定されます。

データ型

DBR_SQLSTATE

データ値

DBMSのマニュアルを参照してください。

e_USERCODEプロパティ

引数

なし

機能

DBMS非依存エラーコードが設定されます。

DBMS非依存エラーコードについては，「2.4 エラー処理」を参照してください。

DBMSのエラーコードに対応したDBMS非依存エラーコードがない場合は0が設定されます。

データ型

INT32

データ値

-2147483648～2147483647の整数値

e_USERERRORプロパティ

引数

なし

機能

DBMS非依存エラーコードに対応したメッセージが設定されます。このプロパティは， e_USERCODEと対になっています。

DBMS非依存エラーコードについては，「2.4 エラー処理」を参照してください。

DBMSのエラーコードに対応したDBMS非依存エラーコードがない場合は0が設定されます。

Red Hat Linux版では，エラーメッセージは英語で出力されます（ロケールや環境ファイルにも依存しません）。

データ型

LPCTSTR

データ値

NULL文字で終了する文字列

RetCodeプロパティ

引数

なし

機能

C++クラスライブラリで発生した最新のエラーコードが設定されます。

RetCodeプロパティに次の値が返された場合，その詳細については，e_SQLERROR，又はe_SQLCODEプロパティの値を参照してください。

DB_ERROR_DRIVER_ERROR

DB_ERROR_DAB_ACCESS_ERROR

DB_ERROR_DAB_SYSTEMCALL_ERROR

DB_ERROR_DAB_ILLEGAL_VALUE

DB_ERROR_DRIVER_ERROR（データベースで発生したエラー)の場合，e_SQLSTATEプロパティにも値が返されることがあります。

非同期処理のDBSQLCAオブジェクトの場合，エラーが発生していなければ0が設定されます。複数のエラーを保存している場合は，最新のエラーコードが設定されます。

データ型

DBR_RETCODE

データ値

「8.2　C++クラスライブラリのエラー情報」を参照してください。

Deleteメソッド

機能

DBSQLCAオブジェクトに保存されているエラー情報を削除します。

形式

void Delete(void)

引数

なし

戻り値

データ型：void

複数のエラーが保存されている場合，保存されているエラーを削除します。

機能詳細

非同期実行の場合，DBSQLCAオブジェクトには最大100個のエラーが保存されます。

Deleteメソッドを呼び出すと，保存されているエラー情報を一度に削除できます。

GetErrorMessageメソッド

機能

指定されたエラーに設定されている，DABroker C++クラスライブラリのエラーメッセージを取得します。

形式

LPCTSTR GetErrorMessage(INT16 nIndex) throw DBSQLCA

引数

nIndex

複数のエラーが保存されている場合，エラーのインデクス番号を指定します。

戻り値

データ型：LPCTSTR

インデクスで指定されたエラーに設定されている，C++クラスライブラリのエラーメッセージを取得します。

機能詳細

非同期実行などで複数のエラーが返った場合，インデクスで指定したエラーに設定されている，DABrokerのエラーメッセージを取得します。最新のエラーメッセージを知りたい場合は，ErrorMessageプロパティの値を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

GetRetCodeメソッド

機能

指定されたエラーに設定されている，DABroker C++クラスライブラリのエラーコードを取得します。

形式

LPCTSTR GetRetCode(INT16 nIndex) throw DBSQLCA

引数

nIndex

複数のエラーが保存されている場合，エラーのインデクス番号を指定します。

戻り値

データ型：LPCTSTR

インデクスで指定されたエラーに設定されている，DABrokerエラーコードを取得します。

機能詳細

非同期実行などで複数のエラーが返った場合，インデクスで指定したエラーに設定されている，DABrokerのエラーコードを取得します。最新のエラーコードを知りたい場合は，RetCodeプロパティの値を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

GetSQLCODEメソッド

機能

指定されたエラーに設定されている，データベース固有のエラーコードを取得します。

形式

LPCTSTR GetSQLCODE(INT16 nIndex) throw DBSQLCA

引数

nIndex

複数のエラーが保存されている場合，エラーのインデクス番号を指定します。

戻り値

データ型：LPCTSTR

インデクスで指定されたエラーに設定されている，データベース固有のエラーコードを取得します。

機能詳細

非同期実行などで複数のエラーが戻された場合，インデクスで指定したエラーに設定されている，データべース固有のエラーコードを取得します。最新のエラーコードを知りたい場合は，e_SQLCODEプロパティの値を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

GetSQLCOUNTメソッド

機能

UPDATE，INSERT，DELETE文の実行中にエラーが発生した場合，その発生までに処理されたレコード数を取得します。

形式

LPCTSTR GetSQLCOUNT(INT16 nIndex) throw DBSQLCA

引数

nIndex

複数のエラーが保存されている場合，エラーのインデクス番号を指定します。

戻り値

データ型：LPCTSTR

インデクスで指定されたエラーが発生する前に，UPDATE，INSERT，DELETE操作で実際に処理されたレコード数。

機能詳細

非同期実行などで複数のエラーが戻された場合，インデクスで指定されたエラーが発生する前に，UPDATE，INSERT，DELETE操作で処理されたレコード数を取得します。最新のレコード数を知りたい場合は，e_SQLCOUNTプロパティの値を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

GetSQLERRORメソッド

機能

指定されたエラーに設定されている，データべース固有エラーメッセージを取得します。

形式

LPCTSTR GetSQLERROR(INT16 nIndex) throw DBSQLCA

引数

nIndex

複数のエラーが保存されている場合，エラーのインデクス番号を指定します。

戻り値

データ型：LPCTSTR

インデクスで指定されたエラーに設定されている，データべース固有エラーメッセージを取得します。

機能詳細

非同期実行などで複数のエラーが戻された場合，インデクスで指定されたエラーに設定されている，データベース固有のエラーメッセージを取得します。最新のエラーメッセージを知りたい場合は，e_SQLERRORプロパティの値を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

GetSQLSTATEメソッド

機能

指定されたエラーに設定されている，データべース固有のSQLSTATE値を取得します。

形式

LPCTSTR GetSQLSTATE(INT16 nIndex) throw DBSQLCA

引数

nIndex

複数のエラーが保存されている場合，エラーのインデクス番号を指定します。

戻り値

データ型：LPCTSTR

インデクスで指定されたエラーに設定されている，データベース固有のSQLSTATE値を取得します。

機能詳細

非同期実行処理で複数のエラーが戻された場合，インデクスで指定されたエラーに設定されている，データべース固有のSQLSTATE値を取得します。最新のエラーのSQLSTATE値を知りたい場合は，e_SQLSTATEプロパティの値を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

GetUSERCODEメソッド

機能

指定されたエラーに設定されている，DBMS非依存エラーコードを取得します。

形式

LPCTSTR GetSQLUSERCODE(INT16 nIndex) throw DBSQLCA

引数

nIndex

複数のエラーが保存されている場合，エラーのインデクス番号を指定します。

戻り値

データ型：LPCTSTR

インデクスで指定されたエラーに設定されている，DBMS非依存エラーコードを取得します。

機能詳細

非同期実行などで複数のエラーが戻された場合，インデクスで指定されたエラーに設定されている，DBMS非依存エラーコードを取得します。最新のエラーコードを知りたい場合は，e_USERCODEプロパティの値を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

GetUSERERRORメソッド

機能

指定されたエラーに設定されている，DBMS非依存エラーコードのエラーメッセージを取得します。

形式

LPCTSTR GetSQLUSERERROR(INT16 nIndex) throw DBSQLCA

引数

nIndex

複数のエラーが保存されている場合，エラーのインデクス番号を指定します。

戻り値

データ型：LPCTSTR

インデクスで指定されたエラーに設定されている，DBMS非依存エラーコードのエラーメッセージを取得します。

機能詳細

非同期実行などで複数のエラーが戻された場合，インデクスで指定されたエラーに設定されている，DBMS非依存エラーコードのエラーメッセージを取得します。最新のエラーを知りたい場合は，e_USERERRORプロパティの値を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数が指定できる範囲を超えています。

6.2　DBRArrayDataFactoryクラス

繰り返し列を扱うDBArrayDataクラスを管理します。DBRArrayDataFactoryクラスは，DBRArrayDataオブジェクトを生成するメソッドを提供するクラスです。

なお，このクラスの派生クラスは生成できません。

機 能 | メソッド名
DBRArrayDataオブジェクトを生成します。 | CreateArrayData

DBRArrayDataオブジェクトは，繰り返し列のデータを格納するオブジェクトです。

＜この節の構成＞

CreateArrayDataメソッド

CreateArrayDataメソッド

機能

更新のためのDBRArrayDataオブジェクトを生成し，DBRArrayDataPtrオブジェクトのポインタを取得します。

形式1 繰り返し列の要素を一括して更新する場合

virtual DBRArrayDataPtr CreateArrayData
                    (INT32 i32Type,
                     INT32 i32MaxSize = 1,
                     INT32 i32Scale = DBR_ARRAYSCALE_DEFAULT)
                                                throw DBSQLCA

形式2 既存のオブジェクトを基に更新用オブジェクトを作成する場合

virtual DBRArrayDataPtr CreateArrayData
          (const DBRArrayDataConstPtr& cpArray) throw DBSQLCA

引数

i32Type

繰り返し列のデータ型を，次に示すどれかで指定します。

COL_TYPE_INT16：2バイト長符号付き2進整数。

COL_TYPE_INT32：4バイト長符号付き2進整数。

COL_TYPE_SINGLE：4バイト長浮動小数点数。

COL_TYPE_DOUBLE：8バイト長浮動小数点数。

COL_TYPE_NUMERIC：符号付き10進数。(DECIMAL型)

COL_TYPE_CHAR：固定長文字列。

COL_TYPE_VARCHAR：可変長文字列。最大長指定あり。

COL_TYPE_DATE：日付型。

COL_TYPE_TIME：時間型。

COL_TYPE_INTERVAL_YEAR：年間隔型。

COL_TYPE_INTERVAL_HOUR：時間間隔型。

i32MaxSize

引数i32Typeで指定したデータ型によって，指定する値が異なります。

COL_TYPE_CHAR，又はCOL_TYPE_VARCHARの場合
繰り返し列の要素長の最大値を1～2147483647の範囲のバイト数で指定します。指定する長さに終端文字分は含みません。

COL_TYPE_NUMERICの場合
DBRArrayDataクラスのSetDataメソッドで設定する要素の値に合わせて，要素の精度（最大桁数）を1～28の範囲の値で指定します。

その他のデータ型の場合
この引数の値は無視されます。

i32Scale

COL_TYPE_CHAR，又はCOL_TYPE_VARCHARの場合
文字列データの1文字のバイト数を指定します。

1
1文字の長さを１バイトとして扱います。
HiRDBでのデータ型がCHAR型，VARCHAR型の場合に指定します。

2
１文字の長さを２バイトとして扱います。
HiRDBでのデータ型がNCHAR型，及びNVARCHAR型の場合に指定します。引数i32MaxSizeの値が奇数の時は，この引数に2は指定できません。

COL_TYPE_NUMERICの場合
DBRArrayDataクラスのSetDataメソッドで設定する要素の値に合わせて，要素の小数点以下桁数を1～28の範囲の値で指定します。

その他のデータ型の場合
この引数の値は無視されます。

cpArray

繰り返し列の要素を更新するときに指定します。インスタンスを持たないオブジェクトは指定できません。また，引数は省略できません。

この引数に指定したオブジェクトが保持するDBRArrayDataクラスのインスタンスと同じ状態のDBRArrayDataオブジェクトを生成し，そのポインタを保持するDBRArrayDataConstPtrオブジェクトを返します。

参照用DBArrayDataオブジェクトから更新用DBArrayDataオブジェクトを生成する場合
コピー元のDBRArrayDataConstPtrオブジェクトのポインタを指定します。

更新用DBRArrayDataオブジェクトが既にあり，その複製を作成する場合
コピー元のDBRArrayDataPtrオブジェクトのポインタを指定します。

戻り値

データ型：DBRArrayDataPtr

DBRArrayDataPtrオブジェクトを返します。

機能詳細

DBRArrayDataオブジェクトを生成し，DBRArrayDataPtrオブジェクトのポインタを取得します。

形式1

ResultSetの内容を参照する必要のない場合，例えば繰り返し列の要素を新規作成する場合や要素全体を一括して更新する場合に，ResultSetに格納する繰り返し列を定義する必要があります。このような場合に，形式1を使ってデータ属性を定義し，DBRArrayDataオブジェクトのCreateメソッドを使って，設定する要素分の領域を確保します。

形式2

既にあるDBRArrayDataオブジェクトを基に，その複製を更新用として生成する場合に指定します。ResultSetの繰り返し列を取得するときにGetFieldメソッドを呼び出しますが，このとき生成されるDBRArrayDataオブジェクトは参照だけができます。このような場合に，形式2の引数pArrayに参照元のオブジェクトを指定し，更新用のDBRArrayDataオブジェクト生成します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_SUPPORTED

引数i32Typeに，指定できないデータ型で値が指定されました。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

指定できない範囲の値が指定されています。

DB_ERROR_MAXSIZE_NOT_EVEN

引数i32MaxSizeの値が奇数の時に引数i32Scaleに2を指定しています。

DB_ERROR_NO_INSTANCE

指定されたcpArrayオブジェクトがインスタンスを持っていません。

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

6.3　DBRArrayDataクラス

繰り返し列のデータを操作するために，データ領域の確保，要素へのデータの設定，及び定義情報の参照などのメソッドを提供します。

このクラスのArrayDataオブジェクトはスマートポインタで管理されるため，ArrayDataPtrオブジェクトからArrayDataオブジェクトのポインタを取得し，メソッドを利用します。

このクラスは，newやdelete演算子を使って直接オブジェクトを生成したり，削除したりできません（スマートポインタクラスで管理するための参照カウンタを持ちます）。また，派生クラスは定義できません。

機 能 | メソッド名
繰り返し列の要素を扱うArrayDataオブジェクト(データ領域)を確保します。 | Create
フィールド数，又は要素の数を取得します。 | GetArrayCount
指定した番号の要素の値を取得します。 | GetData
要素のデータの型を取得します。 | GetDataType
繰り返し列の要素の最大長又は精度を取得します。 | GetPrecision
位取り又は1文字の長さ（バイト数）を取得します。 | GetScale
指定された番号の要素に値を設定します。 | SetData
要素に欠損値を設定します。 | SetNull

＜この節の構成＞

Createメソッド

GetArrayCountメソッド

GetDataメソッド

GetDataTypeメソッド

GetPrecisionメソッド

GetScaleメソッド

SetDataメソッド

SetNullメソッド

Createメソッド

機能

DBRArrayDataFactoryのCreateArrayDataメソッドで繰り返し列のデータ属性が定義されている場合に，実際に設定する要素分の領域（ArrayDataオブジェクト）を確保します。

形式

virtual void Create(INT32 i32ArrayCount) throw DBSQLCA

引数

i32ArrayCount

確保する要素数を，1から30,000の範囲の値で指定します。ただし，データベースのテーブル定義で設定されている最大要素数以下の値で設定してください。

戻り値

なし

機能詳細

引数i32ArrayCountで指定した要素数分のデータ領域を持つ，ArrayDataオブジェクトを生成します。要素数は次のメソッドで取得できます。

簡易版：DBRResultSetクラスのGetArraySizeメソッド。

詳細版：DBResultSetMetaDataクラスのGetArraySizeメソッド

ArrayDataオブジェクトに要素の値を設定するには，SetDataメソッドを呼び出します。

既にCreateメソッドが呼び出されている場合，要素数は再設定されるため，それまで設定されていたデータ領域の値は初期化されます。

なお，DBPreparedStatementオブジェクトの実行中に，Createメソッドは呼び出せません。

HiRDBでは，?パラメタに対して1要素だけの値を使えません。このため，1を指定すると，実行時にHiRDBのエラーになります。HiRDB使用時は，Createメソッドでは必ず2以上の値を指定してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_CANNOT_ACCESS_WHILE_EXECUTED

DBPreparedStatementオブジェクトの実行中に，Createメソッドを呼び出しました。

DB_ERROR_NOT_ENOUGH_MEMORY

メモリ容量が不足しています。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数i32ArrayCountで範囲外の値を指定しました。

GetArrayCountメソッド

機能

Createメソッドで指定された要素の数を取得します。

形式

virtual INT32 GetArrayCount(void) const

引数

なし

戻り値

データ型：INT32

要素の数を取得します。

機能詳細

Createメソッドで確保したデータ領域の要素数を返します。

発生する例外

なし

GetDataメソッド

機能

指定した番号の要素の値を取得します。

形式

virtual BOOLEAN GetData(INT32 i32Index, INT32 * pi32Data)
                                           const throw DBSQLCA
virtual BOOLEAN GetData(INT32 i32Index, INT16 * pi16Data)
                                           const throw DBSQLCA
virtual BOOLEAN GetData(INT32 i32Index, SINGLE * psfData)
                                           const throw DBSQLCA
virtual BOOLEAN GetData(INT32 i32Index, DOUBLE * pdfData)
                                           const throw DBSQLCA
virtual BOOLEAN GetData(INT32 i32Index, LPTSTR * lptData)
                                           const throw DBSQLCA
virtual BOOLEAN GetData(INT32 i32Index, DBR_DATETIME * pdtData)
                                           const throw DBSQLCA
virtual BOOLEAN GetData(INT32 i32Index,
                    DBR_BINARY * pbinData) const throw DBSQLCA

引数

i32Index

取得する値の要素番号を，1からフィールドの最大要素数以下の値で指定します。

* xxData

取得するデータ型の領域を指すポインタを指定します。

戻り値

データ型：BOOLEAN

TRUE：取得しようとした値は欠損値ではありません。

FALSE：取得しようとした値は欠損値です。

機能詳細

指定した要素番号の値を取得します。取得できるデータ型については，SetDataメソッドを参照してください。

GetDataメソッドは，DBRArrayDataオブジェクトに要素の値が設定されている場合に呼び出せます。

日付・時間関連のデータ型の場合にデータを取得するメンバ変数を以下に示します。その他のメンバ変数には0が設定されます。

COL_TYPE_DATE：Year, Month, Day, (Signは1)

COL_TYPE_TIME：Hour, Minute, Second, (Signは1)

COL_TYPE_INTERVAL_YEAR：Year, Month, Day, Sign

COL_TYPE_INTERVAL_HOUR：Hour, Minute, Second, Sign

発生する例外

DBSQLCA(RetCode)

DB_ERROR_CANNOT_ACCESS_WHILE_EXECUTED

DBPreparedStatementオブジェクトのExecuteUpdateメソッドを実行中に呼び出しました。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数i32Indexに範囲外の値を指定しています。

DB_ERROR_NO_DATA_AREA

Createメソッドでデータ領域を生成する前に，このメソッドが呼び出されました。

DB_ERROR_INVALID_ARGUMENT

メソッドの引数に誤りがあります。

DB_ERROR_CANNOT_BE_NULL

引数*xxDataでNULLを指定しました。

GetDataTypeメソッド

機能

要素のデータの型を取得します。

形式

virtual INT32 GetDataType(void) const

引数

なし

戻り値

データ型：INT32

DBRArrayDataオブジェクトの保持するデータの型(COL_TYPE_～)を返します。

機能詳細

DBRArrayDataオブジェクトの保持するデータの型を返します。DBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドで指定されたデータのデータ型を返します。

発生する例外

なし

GetPrecisionメソッド

機能

ArrayDataオブジェクト中の要素の最大長，又は精度を取得します。

形式

virtual INT32 GetPrecision(void) const

引数

なし

戻り値

データ型：INT32

ArrayDataオブジェクト中の要素の最大長（バイト数），又は精度を返します。

機能詳細

要素のデータ型によって，繰り返し列中の要素の最大長（バイト数），又は精度(COL_TYPE_NUMERICの場合だけ)を取得します。表6-1にデータ型ごとの戻り値を示します。

表6-1　データ型ごとの戻り値

データ型 | 戻り値（バイト数）
COL_TYPE_INT16 | 2
COL_TYPE_INT32 | 4
COL_TYPE_SINGLE | 4
COL_TYPE_DOUBLE | 8
COL_TYPE_NUMERIC | 精度として指定した値
COL_TYPE_CHAR | 文字列長（バイト数です。文字数ではありません）
COL_TYPE_VARCHAR | 文字列長（バイト数です。文字数ではありません）
COL_TYPE_DATE | 11
COL_TYPE_TIME | 9
COL_TYPE_INTERVAL_YEAR | 5
COL_TYPE_INTERVAL_HOUR | 4

GetScaleメソッド

機能

小数点以下の桁数，又は1文字の長さ(バイト数)を取得します。

形式

virtual INT32 GetScale(void) const

引数

なし

戻り値

データ型：INT32

小数点以下の桁数，又は1文字の長さ(バイト数)を返します。

機能詳細

データ型がCOL_TYPE_NUMERICの場合は小数点以下の桁数を，COL_TYPE_CHAR，COL_TYPE_VARCHARの場合は1文字の長さ（バイト数（1又は2））を取得します。

発生する例外

なし

SetDataメソッド

機能

指定された番号の要素に，値を設定します。

形式

virtual void SetData(INT32 i32Index, INT32 i32Data) throw DBSQLCA
virtual void SetData(INT32 i32Index, INT16 i16Data) throw DBSQLCA
virtual void SetData(INT32 i32Index, SINGLE sfData) throw DBSQLCA
virtual void SetData(INT32 i32Index, DOUBLE dfData) throw DBSQLCA
virtual void SetData(INT32 i32Index, LPCTSTR lpctData)
                                                   throw DBSQLCA
virtual void SetData(INT32 i32Index, const DBR_DATETIME&
                                           dtData) throw DBSQLCA
virtual void SetData(INT32 i32Index, const DBR_BINARY & binData)
                                                   throw DBSQLCA

引数

i32Index

データを設定する要素番号を，1からフィールドの要素数以下の値で指定します。

xxData

設定する値を指定します。この引数に指定できるデータ型については，機能詳細の「第2引数に指定できるデータの型」を参照してください。

戻り値

なし

機能詳細

ArrayDataオブジェクトに，要素の値を設定します。値を設定しなかった要素は，欠損値の扱いになります。

第2引数に指定できるデータの型

第2引数に指定できるデータの型は，DBRArrayDataオブジェクトの生成時にDBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドで指定した型によって異なります。CreateArrayDataメソッドの引数ごとに指定できるデータ型を表6-2，6-3に示します。

なお，コピーして作成した更新用のDBRArrayDataオブジェクトへ指定できるデータ型は，コピー元のデータ型に依存します。

表6-2　CreateArrayDataメソッドの引数ごとに指定できるデータ型(1)

CreateArrayDataの引数 | 引数の型
INT16 | INT32 | SINGLE | DOUBLE
COL_TYPE_INT16 | ◎ | △ | △ | △
COL_TYPE_INT32 | △ | ◎ | △ | △
COL_TYPE_SINGLE | △ | △ | ◎ | △
COL_TYPE_DOUBLE | △ | △ | △ | ◎
COL_TYPE_NUMERIC | × | × | × | ×
COL_TYPE_CHAR | × | × | × | ×
COL_TYPE_VARCHAR | × | × | × | ×
COL_TYPE_DATE | × | × | × | ×
COL_TYPE_TIME | × | × | × | ×
COL_TYPE_INTERVAL_YEAR | × | × | × | ×
COL_TYPE_INTERVAL_HOUR | × | × | × | ×

表6-3　CreateArrayDataメソッドの引数ごとに指定できるデータ型(2)

CreateArrayDataの引数 | 引数の型
LPCTSTR | DBR_DATETIME | DBR_BINARY
COL_TYPE_INT16 | × | × | ×
COL_TYPE_INT32 | × | × | ×
COL_TYPE_SINGLE | × | × | ×
COL_TYPE_DOUBLE | × | × | ×
COL_TYPE_NUMERIC | ○ | × | ×
COL_TYPE_CHAR | ◎※ | × | ◎※
COL_TYPE_VARCHAR | ◎ | × | ◎
COL_TYPE_DATE | × | ○ | ×
COL_TYPE_TIME | × | ○ | ×
COL_TYPE_INTERVAL_YEAR | × | ○ | ×
COL_TYPE_INTERVAL_HOUR | × | ○ | ×

(凡例)

◎：そのまま値を取得・設定します。

○：DABroker for C++でDBMSの要求するデータ形式に変換して取得・設定します。

△：値をキャスト(cast)して取得・設定します。

×：例外 DB_ERROR_INVALID_ARGUMENTをスローします。

注※

引数で渡された値が，DBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドの第２引数で指定した最大長に満たない場合，残りの領域はスペース（バイト数は，DBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドの第3引数に依存）で埋められます。

引数lpctDataの文字列の長さやbinDataの長さは，定義した要素長より小さな値で指定してください。

LPCTSTR型の引数及びDBR_BINARY型のDataメンバ変数へ，NULLポインタは設定できません。

COL_TYPE_VARCHARのフィールドに対して長さ0の空文字列（""）(欠損値とは異なります)を設定したい場合は，LPCTSTR型の引数に対して長さ0の空文字列（NULLではない）を指定するか，DBR_BINARY型のLengthメンバ変数に0を設定し，Dataメンバ変数に"¥0"を設定してください。

DBR_DATETIME型を指定する場合の注意

DBR_DATETIME型の各メンバ変数に対して，以下の制限に反した値を指定した場合，DB_ERROR_TOO_LARGE_DATAのエラーをスローします。値の正当性はチェックしないため，例えば，Hourに対して50を設定してもエラーにはなりません。

DBR_DATETIME型の指定可能な値

Year < 10000, Month < 100, Day < 100, Hour < 100, Minute < 100, Second < 100

設定するデータ型ごとに参照するメンバ変数を以下に示します。そのほかのメンバ変数の値は無視します。

COL_TYPE_DATE：Year, Month, Day

COL_TYPE_TIME：Hour, Minute, Second

COL_TYPE_INTERVAL_YEAR：Year, Month, Day, Sign

COL_TYPE_INTERVAL_HOUR：Hour, Minute, Second, Sign

DECIMAL型を指定する場合の注意

DECIMAL型の値を設定する場合，ユーザが指定した文字列が以下の条件に当てはまる場合は，DB_DRV_ERROR_DATA_CONVERTのエラーをスローします。

Precision - Scaleよりも整数部の桁数が大きい場合。（ただし，左端の0は無視します）

数字ではない文字が含まれる場合。

（例）DECIMAL(10,3)の場合

"1234567.891" 正常

"11234567.891" エラー（整数部の桁数が大きい）

"001234567.890" 正常（整数部，小数部ともに端の0は無視する）

"0001234567.89123" 正常（小数部下２桁切り捨て，トレースに警告メッセージ出力）

発生する例外

DBSQLCA(RetCode)

DB_DRV_ERROR_DATA_CONVERT

DECIMAL型の値を設定するときに，指定した文字列が正しくありません。

DB_ERROR_CANNOT_ACCESS_WHILE_EXECUTED

パラメタを設定したDBPreparedStatementオブジェクトでExecuteUpdateメソッドを呼び出す前に，SetDataメソッドが呼び出されています。

DB_ERROR_INVALID_ARGUMENT

メソッドの引数に誤りがあります。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

指定できない範囲の値が指定されています。

DB_ERROR_TOO_LARGE_DATA

指定したデータの値は大きすぎます。

引数lpctData，又はbinDataのLengthメンバで指定した長さが，DBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドの第２引数で指定した値より大きな値です。

DB_ERROR_NO_DATA_AREA

Createメソッドでデータ領域を生成する前に，このメソッドを呼び出しています。

DB_ERROR_CANNOT_BE_NULL

LPCTSTR型の引数，又はDBR_BINARY型のDataメンバ変数でNULLを設定しました。

SetNullメソッド

機能

要素に欠損値を設定します。

形式

virtual void SetNull(INT32 i32Index) throw DBSQLCA

引数

i32Index

欠損値として設定する要素の番号を，1からフィールドの最大要素数以下の値で指定します。

戻り値

なし

機能詳細

引数i32Indexで指定した番号の要素を，欠損値として設定します。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_CANNOT_ACCESS_WHILE_EXECUTED

パラメタを設定したDBPreparedStatementオブジェクトでExecuteUpdateメソッドを呼び出す前に，SetDataメソッドが呼び出されています。

DB_ERROR_ARGUMENT_OUT_OF_RANGE

引数i32Indexに範囲外の値を設定しました。

DB_ERROR_NO_DATA_AREA

Createメソッドでデータ領域を生成する前にこのメソッドが呼び出されました。

6.4　DBRArrayDataPtrクラス

更新を目的とした検索でResultSetに取得した検索結果のうち，繰り返し列を更新する場合に利用します。

DBRArrayDataPtrクラスは，DBRArrayDataクラスのインスタンスを管理するためのスマートポインタクラスです。

このクラスは，参照カウンタの増減や，ヒープ上にあるDBRArrayDataクラスのインスタンスの解放処理を自動的に行ないます。

機 能 | コンストラクタ・デストラクタ名
DBRArrayDataPtrオブジェクトを生成します。 | DBRArrayDataPtrコンストラクタ
削除時に呼び出されます。インスタンスを保持していればそのインスタンスの参照カウンタを下げます。 | ~DBRArrayDataPtrデストラクタ

機 能 | ユーザ定義演算子
インスタンスを保持させます。 | operator=
DBRArrayDataオブジェクトのポインタを返します。 | operator->
DBRArrayDataオブジェクトのポインタを返します。 | operator*

機 能 | メソッド名
インスタンスを保持しているかどうかを調べます。 | IsNull

＜この節の構成＞

DBRArrayDataPtrコンストラクタ

~DBRArrayDataPtrデストラクタ

operator=

operator-＞

operator*

IsNullメソッド

DBRArrayDataPtrコンストラクタ

機能

オブジェクトの生成時に呼び出されるコンストラクタです。

形式1 インスタンスを保持しないオブジェクトを生成する場合

DBRArrayDataPtr()

形式2 引数に指定したオブジェクトを生成する場合

DBRArrayDataPtr(DBRArrayData* pArray)

形式3 コピーコンストラクタの場合

DBRArrayDataPtr(const DBRArrayDataPtr& pArrayPtr)

引数

pArray

DBRArrayDataオブジェクトのポインタを指定します。

pArrayPtr

DBRArrayDataPtrの参照を指定します。

戻り値

なし

機能詳細

形式1の処理

インスタンスを保持しないDBRArrayDataPtrオブジェクトを生成します。

形式2の処理

引数pArrayで指定されたDBRArrayDataオブジェクトを保持します。このとき指定されたDBRArrayDataオブジェクトに対する参照カウンタをインクリメントします。

形式3の処理

コピーコンストラクタです。引数pArrayPtrで指定されたDBRArrayDataPtrオブジェクトが保持しているDBRArrayDataオブジェクトから，DBRArrayDataPtrオブジェクトを生成します。このとき，指定されたDBRArrayDataPtrオブジェクトが保持するDBRArrayDataオブジェクトに対する参照カウンタをインクリメントします。

発生する例外

なし

~DBRArrayDataPtrデストラクタ

機能

DBRArrayDataPtrのデストラクタです。

形式

~DBRArrayDataPtr

引数

なし

戻り値

なし

機能詳細

削除時に呼び出されます。インスタンスを保持していれば，そのインスタンスの参照カウンタをデクリメントします。

発生する例外

なし

operator=

機能

インスタンスを保持させます。

形式1

DBRArrayDataPtr& operator=(DBRArrayData* pArray)

形式2

DBRArrayDataPtr& operator=(const DBRArrayDataPtr& pArrayPtr)

引数

pArray

保持させたいDBRArrayDataオブジェクトを指定します。

pArrayPtr

保持させたいインスタンスを保持しているDBRArrayDataPtrオブジェクトを指定します。

戻り値

データ型：DBRArrayDataPtr&

DBRArrayDataPtrオブジェクトの参照を返します。

機能詳細

引数pArray又はpArrayPtrで指定されたDBRArrayDataオブジェクト，又はDBRArrayDataPtrオブジェクトが保持しているDBRArrayDataオブジェクトから，DBRArrayDataPtrオブジェクトのインスタンスを生成します。このとき，指定されたDBRArrayDataオブジェクト又はDBRArrayDataPtrオブジェクトが保持するDBRArrayDataオブジェクトに対する参照カウンタをインクリメントします。

DBRArrayDataPtrオブジェクトが既にインスタンスを保持している場合は，保持していたDBRArrayDataオブジェクトに対する参照カウンタをデクリメントします。

発生する例外

なし

operator-＞

機能

DBRArrayDataオブジェクトのポインタを取得します。

形式

DBRArrayData* operator->() const

引数

なし

戻り値

データ型：DBRArrayData*

DBRArrayDataオブジェクトへのポインタ。

機能詳細

DBRArrayDataオブジェクトのポインタを返します。取得したポインタを使って，DBRArrayDataオブジェクトのメソッドを呼び出します。

自分自身がDBRArrayDataオブジェクトのインスタンスを保持していない場合は，NULLが返ります。しかし，戻り値がNULLの場合，このメソッドを使ってDBRArrayDataオブジェクトのメソッド呼び出すと異常終了します。インスタンスを保持しているかどうかを調べるには，IsNullメソッドを呼び出してください。

発生する例外

なし

operator*

解説

DBRArrayDataオブジェクトのポインタを取得します。

形式

DBRArrayData* operator*() const

引数

なし

戻り値

データ型：DBRArrayData*

DBRArrayDataオブジェクトのポインタ。

機能詳細

DBRArrayDataオブジェクトのポインタが返ります。取得したポインタを使って，DBRArrayDataオブジェクトのメソッドを呼び出します。

自分自身がDBRArrayDataオブジェクトのインスタンスを保持していない場合は，NULLが返ります。しかし，戻り値がNULLの場合，このメソッドを使ってDBRArrayDataクラスのメソッド呼び出しを行うと異常終了します。インスタンスを保持しているかどうかを調べるには，IsNullメソッドを呼び出してください。

発生する例外

なし

IsNullメソッド

機能

インスタンスを保持しているかどうかを確認します。

形式

BOOLEAN IsNull() const

引数

なし

戻り値

データ型：BOOLEAN

TRUE：インスタンスを保持していません。

FALSE：インスタンスを保持しています。

機能詳細

DBRArrayDataPtrオブジェクトでDBRArrayDataクラスのメソッド呼び出すときに，インスタンスを保持しているかどうかを確認します。

発生する例外

なし

6.5　DBRArrayDataConstPtrクラス

更新を必要としない検索でResultSetに取得した検索結果のうち，繰り返し列を参照する場合に利用します。

DBRArrayDataConstPtrクラスは，DBRArrayDataクラスのインスタンスを管理するためのスマートポインタクラスです。

このクラスは，参照カウンタの増減や，ヒープ上にあるDBRArrayDataクラスのインスタンスの解放処理を自動的に行ないます。

機 能
コンストラクタ・デストラクタ名

DBRArrayDataConstPtrオブジェクトを生成します。
DBRArrayDataConstPtr
コンストラクタ

削除時に呼び出されます。インスタンスを保持していればそのインスタンスの参照カウンタを下げます。
~DBRArrayDataConstPtr
デストラクタ

機 能 | ユーザ定義演算子
インスタンスを保持させます。 | operator=
DBRArrayDataオブジェクトのポインタを返します。 | operator->
DBRArrayDataオブジェクトのポインタを返します。 | operator*

機 能 | メソッド名
インスタンスを保持しているかどうかを調べます。 | IsNull

＜この節の構成＞

DBRArrayDataConstPtrコンストラクタ

~DBRArrayDataConstPtrデストラクタ

operator=

operator-＞

operator*

IsNullメソッド

DBRArrayDataConstPtrコンストラクタ

機能

オブジェクトの生成時に呼び出されるコンストラクタです。

形式1

DBRArrayDataConstPtr()

形式2

DBRArrayDataConstPtr(const DBRArrayData* cpArray)

形式3

DBRArrayDataConstPtr(const DBRArrayDataConstPtr& cpArrayPtr)

形式4

DBRArrayDataConstPtr(const DBRArrayDataPtr& pArrayPtr)

引数

cpArray

参照を目的としたDBRArrayDataオブジェクトのポインタを指定します。

cpArrayPtr

参照を目的としたDBRArrayDataConstPtrの，参照を指定します。

pArrayPtr

参照を目的としたDBRArrayDataPtrの，参照を指定します。

戻り値

なし

機能詳細

形式1の処理

インスタンスを保持しないDBRArrayDataConstPtrオブジェクトを生成します。

形式2の処理

引数cpArrayで指定されたDBRArrayDataオブジェクトを保持します。このとき指定されたDBRArrayDataオブジェクトに対する参照カウンタをインクリメントします。

形式3の処理

コピーコンストラクタです。引数cpArrayPtrで指定されたDBRArrayDataConstPtrオブジェクトが保持しているDBRArrayDataオブジェクトから，DBRArrayDataConstPtrオブジェクトを生成します。このとき，指定されたDBRArrayDataConstPtrオブジェクトが保持するDBRArrayDataオブジェクトに対する参照カウンタをインクリメントします。

形式4の処理

コピーコンストラクタです。引数pArrayPtrで指定されたDBRArrayDataPtrオブジェクトが保持しているDBRArrayDataオブジェクトから，DBRArrayDataConstPtrオブジェクトを生成します。このとき，指定されたDBRArrayDataPtrオブジェクトが保持するDBRArrayDataオブジェクトに対する参照カウンタをインクリメントします。

発生する例外

なし

~DBRArrayDataConstPtrデストラクタ

機能

DBRArrayDataConstPtrのデストラクタです。

形式

~DBRArrayDataConstPtr

引数

なし

戻り値

なし

機能詳細

削除時に呼び出されます。インスタンスを保持していれば，そのインスタンスの参照カウンタをデクリメントします。

発生する例外

なし

operator=

機能

インスタンスを保持させます。

形式1

DBRArrayDataConstPtr& operator=(const DBRArrayData* cpArray)

形式2

DBRArrayDataConstPtr& operator=(const DBRArrayDataConstPtr&
                                                cpArrayPtr)

形式3

DBRArrayDataConstPtr& operator=(const DBRArrayDataPtr&
                                                 pArrayPtr)

引数

pArray

保持させたいconstなDBRArrayDataオブジェクトのポインタを指定します。

cpArrayPtr

保持させたいインスタンスを保持しているDBRArrayDataConstPtrオブジェクトを指定します。

pArrayPtr

保持させたいインスタンスを保持しているDBRArrayDataPtrオブジェクトを指定します。

戻り値

データ型：DBRArrayDataConstPtr&

DBRArrayDataConstPtrオブジェクトの参照を返します。

機能詳細

引数cpArray，cpArrayPtr，及びpArrayPtrで指定されたDBRArrayDataオブジェクト，又はDBRArrayDataConstPtrオブジェクト及びDBRArrayDataPtrオブジェクトが保持しているDBRArrayDataオブジェクトから，DBRArrayDataConstPtrオブジェクトのインスタンスを生成します。このとき，指定されたDBRArrayDataオブジェクト又はDBRArrayDataConstPtrオブジェクト及びDBRArrayDataPtrオブジェクトが保持するDBRArrayDataオブジェクトに対する参照カウンタをインクリメントします。

DBRArrayDataConstPtrオブジェクトが既にインスタンスを保持している場合は，保持していたDBRArrayDataオブジェクトに対する参照カウンタをデクリメントします。

発生する例外

なし

operator-＞

機能

constなDBRArrayDataオブジェクトのポインタを取得します。

形式

const DBRArrayData* operator->() const

引数

なし

戻り値

データ型：const DBRArrayData*

constなDBRArrayDataオブジェクトのポインタ。

機能詳細

constなDBRArrayDataオブジェクトのポインタを返します。取得したポインタを使って，DBRArrayDataオブジェクトのメソッドを呼び出します。なお，戻り値はconstなオブジェクトのため，constなメソッドしか呼び出せません。

自分自身がDBRArrayDataオブジェクトのインスタンスを保持していない場合は，NULLが返ります。しかし，戻り値がNULLの場合，このメソッドを使ってDBRArrayDataオブジェクトのメソッドを呼び出すと異常終了します。インスタンスを保持しているかどうかを調べるには，IsNullメソッドを呼び出してください。

発生する例外

なし

operator*

機能

DBRArrayDataオブジェクトのポインタを取得します。

形式

const DBRArrayData* operator*() const

引数

なし

戻り値

データ型：const DBRArrayData*

constなDBRArrayDataオブジェクトのポインタ。

機能詳細

constなDBRArrayDataオブジェクトのポインタを返します。取得したポインタを使って，DBRArrayDataオブジェクトのメソッドを呼び出します。なお，戻り値はconstなオブジェクトのため，constなメソッドしか呼び出せません。

自分自身がDBRArrayDataオブジェクトのインスタンスを保持していない場合は，NULLが返ります。しかし，戻り値がNULLの場合，このメソッドを使ってDBRArrayDataオブジェクトのメソッドを呼び出すと異常終了します。インスタンスを保持しているかどうかを調べるには，IsNullメソッドを呼び出してください。

発生する例外

なし

IsNullメソッド

機能

インスタンスを保持しているかどうかを確認します。

形式

BOOLEAN IsNull() const

引数

なし

戻り値

データ型：BOOLEAN

TRUE：インスタンスを保持していません。

FALSE：インスタンスを保持しています。

機能詳細

DBRArrayDataConstPtrオブジェクトでDBRArrayDataクラスのメソッドを呼び出すときに，インスタンスを保持しているかどうかを確認します。

発生する例外

なし

7.　データ型

クラスライブラリで扱うデータ型と変換規則について説明します。

＜この章の構成＞

7.1　クラスライブラリで扱うデータ型と変換規則

7.2　DBR_BINARY型を使用したVARCHARデータの取得方法

7.1　クラスライブラリで扱うデータ型と変換規則

＜この節の構成＞

7.1.1　クラスライブラリで使用するデータ型とC++のデータ型との関係

7.1.2　データ型のサイズと範囲

7.1.3　戻り値とDBMSでのデータ型の対応

7.1.4　C++とDBMSのデータ型の対応

7.1.5　データ型変換規則

7.1.6　DBMSのデータ型と識別子との対応

7.1.1　クラスライブラリで使用するデータ型とC++のデータ型との関係

クラスライブラリで使用するデータ型とC++のデータ型との関係を表7-1に示します。

表7-1　クラスライブラリで使用するデータ型とC++のデータ型との関係

クラスライブラリで使用するデータ型
C++のデータ型

short int
short int

long int
long int

DBR_INT8
char

DBR_INT16
short int

DBR_INT32
long int

INT64
long long int

DBR_UINT8
unsigned char

DBR_UINT16
unsigned short int

DBR_UINT32
unsigned long int

UINT64
unsigned long long int

DBR_SINGLE
single float

DBR_DOUBLE
double float

BOOLEAN
boolean

TCHAR
char

LPTSTR
char *

LPCTSTR
const char *

DBR_DATETIME※1

struct DATE_DATA {
   UINT32 Year;
   UINT32 Month;
   UINT32 Day;
   UINT32 Hour;
   UINT32 Minute;
   UINT32 Second;
   UINT32 Microsecond;
   INT16 Sign;
}

DBR_BINARY

struct BINARY_DATA {
   UINT32 Length;
   UINT32 RealLength;
   LPTSTR Data;
}DBR_BINARY;

DBR_RETCODE
UINT32

DBR_SQLCODE
INT32

DBR_SQLSTATE
LPCTSTR

DBR_SQLWARN
LPCTSTR

注※1

DBR_DATETIME型のSignメンバは符号を示します。ここには，1又は-１が入り，それぞれ，正の値，負の値を示します。データを更新するときに指定する値は，1，-1のどちらかを指定します。負の値を取らない日付・時間型の場合はSignメンバの値は無視します。

7.1.2　データ型のサイズと範囲

クラスライブラリでのデータ型に対するOS別のサイズと範囲を表7-2に示します。

表7-2　データ型のサイズと範囲

クラスライブラリで使用するデータ型
Windows
UNIX

サイズ
(バイト)
値の範囲
サイズ
(バイト)
値の範囲

DBR_INT8
1
-256 ～ 255
1
-256 ～ 255

DBR_INT16
2
-32,768 ～ 32,767
2
-32,768 ～ 32,767

DBR_INT32
4
-2,147,483,648 ～
2,147,483,647
4
-2,147,483,648 ～
2,147,483,647

DBR_UINT8
1
0 ～ 512
1
0 ～ 512

DBR_UINT16
2
0 ～ 65,535
2
0 ～ 65,535

DBR_UINT32
4
0 ～ 4,294,967,295
4
0 ～ 4,294,967,295

DBR_SINGLE
4
3.4E-38 ～ 3.4E+38
4
3.4E-38 ～ 3.4E+38

DBR_DOUBLE
8
1.7E-308 ～ 1.7E+308
8
1.7E-308 ～ 1.7E+308

BOOLEAN
システムに依存
TRUE（0以外）
又はFALSE（0）
システムに依存
TRUE（0以外）
又はFALSE（0）

TCHAR
1
-128 ～ 127
1
-128 ～ 127

LPTSTR
4
－
4
－

LPCTSTR
4
－
4
－

DBR_DATETIME
30
－
30
－

DBR_BINARY
－
－
－
－

（凡例）

－：該当なし。

7.1.3　戻り値とDBMSでのデータ型の対応

戻り値とDBMSでのデータ型の対応を次に示します。戻り値とは，次のメソッドを呼び出したときに取得する値を指します。

classListColumnsオブジェクトのTypeメソッド

classListProcedureColumnsオブジェクトのTypeメソッド,

DBResultSetMetaDataオブジェクトのGetColumnTypeメソッド

＜この項の構成＞

(1)　SQL Anywhere，ORACLE，HiRDB，SQL Server

(2)　メインフレーム系データベース

(3)　SQL/K

(1)　SQL Anywhere，ORACLE，HiRDB，SQL Server

SQL Anywhere，ORACLE，HiRDB，SQL Serverの場合の，戻り値とDBMSでのデータ型の対応を表7-3に示します。

表7-3　データ型対応表

クラスライブラリから返る値
DBMSの種類

SQL Anywhere
ORACLE
HiRDB
SQL Server

COL_TYPE_INT16
smallint
bit又はoldbit
tinyint
－
smallint
smallint
tinyint

COL_TYPE_INT32
int
integer
－
int
int

COL_TYPE_NUMERIC
decimal
numeric
money
smallmoney
number
integer
binary_integer
float
decimal
decimal
numeric
money
smallmoney

COL_TYPE_SINGLE
real(float)※¹
－
smallflt
real(float)

COL_TYPE_DOUBLE
double(float)※¹
－
float
float

COL_TYPE_CHAR
－
char
char
mchar
nchar
char

COL_TYPE_VARCHAR
char
character
varchar
character varying
sysname
varchar
varchar2
varchar
mvarchar
nvarchar
sysname(SQL Server6.5のとき)
varchar

COL_TYPE_LONGVARCHAR
long varchar
text
long
－
text

COL_TYPE_DATE
date
－
date
－

COL_TYPE_TIME
time
－
time
－

COL_TYPE_TIMESTAMP
datetime
smalldatetime
timestamp
date
－
datetime
smalldatetime

COL_TYPE_INTERVAL_YEAR
－
－
interval year to
day
－

COL_TYPE_INTERVAL_HOUR
－
－
interval hour to
second
－

COL_TYPE_BINARY
binary
varbinary
－
－
binary
timestamp

COL_TYPE_VARBINARY
－
raw
－
varbinary

COL_TYPE_LONGVARBINARY
long binary
image
java serialization
java.lang.Object
long raw
binary※2
blob
image

COL_TYPE_ROWID
－
rowid
－
－

COL_TYPE_BIT
bit
－
－
bit

COL_TYPE_BIGINT
bigint
－
－
－

（凡例）

－：対応するデータ型はありません。

注　SQL Anywhereの列には，SQL Anywhere及びAdaptive Server Anywhereの両方のデータ型を含んでいます。

注※1　float型がreal型とみなされるかdouble型とみなされるかは定義内容によります。

注※2　HiRDBのbinary型はバージョン02-12以降で使用できます。

(2)　メインフレーム系データベース

メインフレーム系データベースの場合の，戻り値とDBMSでのデータ型の対応を表7-4に示します。

表7-4　データ型対応表（メインフレーム系データベース）

クラスライブラリから返る値
XDM/RD
XDM/SD

COL_TYPE_INT16
smallint
smallint

COL_TYPE_INT32
integer
integer

COL_TYPE_NUMERIC
numeric trailing
numeric unsigned
decimal
large decimal
numeric trailing
decimal

COL_TYPE_SINGLE
smallflt
－

COL_TYPE_DOUBLE
float
－

COL_TYPE_CHAR
char
mchar
nchar
xchar
char
nchar

COL_TYPE_VARCHAR
varchar
mvarchar
nvarchar
varchar
mvarchar
nvarchar

COL_TYPE_LONGVARCHAR
long varchar
long mvarchar
long nvarchar
long varchar
long mvarchar
long nvarchar

COL_TYPE_DATE
date
date

COL_TYPE_BINARY
－
bit
$dbk

COL_TYPE_ROWID
rowid
rowid

（凡例）

－：対応するデータ型はありません。

(3)　SQL/K

SQL/Kの場合の，戻り値とDBMSでのデータ型の対応を表7-5に示します。

戻り値とは，次のメソッドを呼び出したときに取得する値を指します。

classListColumnsオブジェクトのTypeメソッド

DBResultSetMetaDataオブジェクトのGetColumnTypeメソッド,

DBRResultSetオブジェクトのGetFieldTypeメソッド

表7-5　データ型対応表（SQL/K）

クラスライブラリから返る値
SQL/K

COL_TYPE_INT16
SMALLINT

COL_TYPE_INT32
INTEGER

COL_TYPE_NUMERIC
NUMERIC TRAILING
NUMERIC UNSIGNED
DECIMAL

COL_TYPE_CHAR
CHAR
NCHAR
MCHAR

COL_TYPE_BINARY
XCHAR

7.1.4　C++とDBMSのデータ型の対応

C++とDBMSのデータ型の対応を表7-6に示します。

表7-6　C++のデータ型とDBMSのデータ型の関係

Ctype | Type
COL_CTYPE_INT16 | COL_TYPE_INT16
COL_TYPE_BIT
COL_CTYPE_INT32 | COL_TYPE_INT32
COL_TYPE_SERIAL
COL_CTYPE_UINT16 | COL_TYPE_UINT16
COL_CTYPE_UINT32 | COL_TYPE_UINT32
COL_CTYPE_SINGLE | COL_TYPE_SINGLE
COL_CTYPE_DOUBLE | COL_TYPE_DOUBLE
COL_CTYPE_CHAR | COL_TYPE_CHAR
COL_TYPE_VARCHAR
COL_TYPE_LONGVARCHAR
COL_TYPE_NUMERIC
COL_TYPE_MONEY
COL_TYPE_ROWID
COL_TYPE_BIGINT
COL_CTYPE_BINARY | COL_TYPE_BINARY
COL_TYPE_VARBINARY
COL_TYPE_LONGVARBINARY
COL_CTYPE_DATETIME | COL_TYPE_DATE
COL_TYPE_TIME
COL_TYPE_TIMESTAMP
COL_TYPE_INTERVAL_YEAR
COL_TYPE_INTERVAL_HOUR

7.1.5　データ型変換規則

＜この項の構成＞

(1)　GetField，GetParamメソッド

(2)　SetParamメソッド

(3)　SetFieldメソッド

(1)　GetField，GetParamメソッド

DBResultSetクラスのGetFieldメソッド,DBPreparedStatement，DBCallableStatementクラスのGetParamメソッドで取得するデータの，データ型変換規則を表7-7，及び表7-8に示します。

表7-7　GetField，GetParamメソッドでのデータ型変換規則(1)

DBMS
データ型
取得するデータ型

INT16
INT32
UINT16
UINT32

COL_CTYPE_INT16
(B)
(A)
(C)
(A)

COL_CTYPE_INT32
(B)
○
(C)
(A)

COL_CTYPE_UINT16
(B)
(A)
(C)
(A)

COL_CTYPE_UINT32
(B)
(A)
(C)
○

COL_CTYPE_SINGLE
(B)
(A)
(C)
(A)

COL_CTYPE_DOUBLE
(B)
(A)
(C)
(A)

COL_CTYPE_BOOLEAN
(B)
(A)
(C)
(A)

COL_CTYPE_CHAR
f(atol)[B]
f(atol)[A]
f(strtoul) [C]
f(strtoul) [A]

COL_CTYPE_DATETIME
×
×
×
×

COL_CTYPE_BINARY
×
×
×
×

表7-8　GetField，GetParamメソッドでのデータ型変換規則(2)

DBMS
データ型
取得するデータ型

SINGLE
DOUBLE
BOOLEAN
LPTSTR
DATE
BINARY

COL_CTYPE_INT16
(D)
(A)
(E)
H：f(ltoa)
AL：f(sprintf)
W：f(_ltoa)
×
×

COL_CTYPE_INT32
(D)
(A)
(E)
H：f(ltoa)
AL：f(sprintf)
W：f(_ltoa)
×
×

COL_CTYPE_UINT16
(D)
(A)
(E)
H：f(ultoa)
AL：f(sprintf)
W：f(_ultoa)
×
×

COL_CTYPE_UINT32
(D)
(A)
(E)
H：f(ultoa)
AL：f(sprintf)
W：f(_ultoa)
×
×

COL_CTYPE_SINGLE
(D)
(A)
(E)
H：f(gcvt)
AL：f(gcvt)
W：f(_gcvt)
×
×

COL_CTYPE_DOUBLE
(D)
○
(E)
H：f(gcvt)
AL：f(gcvt)
W：f(_gcvt)
×
×

COL_CTYPE_BOOLEAN
(D)
(A)
(A)
※¹
×
×

COL_CTYPE_CHAR
f(atof)[D]
f(atof) [A]
f(atof) [E]
○
×
※²

COL_CTYPE_DATETIME
×
×
×
×
○
×

COL_CTYPE_BINARY
×
×
×
×
×
○

（凡例）

○：変換しないで取得します。

×：取得できません（DB_ERROR_DATA_TRUNCATEDエラーをスローします）。

f(FUNC)[cast type]：FUNC（Ｃランタイム関数）で変換した後，cast typeの方法でキャストします。

(cast type)：cast typeの方法でキャストします。

cast type

A：取得データ型にキャスト

B：(INT16)(INT32)Data (INT32にキャストし,その後INT16にキャストします)

C：(UINT16)(UINT32)Data

D：(SINGLE)(DOUBLE)Data

E：(BOOLEAN)(INT32)Data

H：HP-UXの場合

AL：AIXおよびRed Hat Linuxの場合

W：Windowsの場合

注※1　TRUEなら文字列"TRUE"，FALSEなら文字列"FALSE"

注※2　COL_TYPE_CHAR，COL_TYPE_VARCHARの場合だけ取得できます。

その他の場合は,DB_ERROR_DATA_TRUNCATEDエラーをスローします。

(2)　SetParamメソッド

DBCallableStatement,DBPreparedStatementクラスのSetParamメソッドで指定したデータがどのように変換されて，実際に設定されるのか，そのデータ型変換規則を表7-9に示します。

表7-9　SetParamメソッドでのデータ型変換規則

設定データ型 | 変換規則
INT16 | そのまま設定
UINT16 | INT16にキャストして設定
INT32 | そのまま設定
UINT32 | INT32にキャストして設定
SINGLE | そのまま設定
DOUBLE | そのまま設定
BOOLEAN | INT16にキャストして設定
LPCTSTR | そのまま設定(ただし,NULLポインタの場合は欠損値を設定)
DBR_DATETIME | DBMSの内部データ形式に変換して設定
DBR_BINARY | そのまま設定

注意

「そのまま設定」とあるものは,DBMSに対して指定されたままのデータ型で値を渡します。そのため指定された値が有効かどうかはDBMSに依存します。例えば,ORACLEのNUMBER型に対してはLPCTSTR型でも数字列を指定すればORACLEがデータ型を変換するため値を設定できますが,HiRDBのinteger型に対してLPCTSTR型で数字列を指定してもHiRDBでは文字列型は数値型に変換しないためエラーとなります。データを設定できるデータ型については,各DBMSのマニュアルを参照してください。

(3)　SetFieldメソッド

DBResultSetクラスのSetFieldメソッドで設定するデータの，データ型変換規則を表7-10，及び表7-11に示します。

表7-10　SetFieldメソッドでのデータ型変換規則(1)

DBMS
データ型
設定するデータ型

INT16
INT32
UINT16
UINT32

COL_CTYPE_INT16
○
(INT16)
(INT16)
(INT16)

COL_CTYPE_INT32
(INT32)
○
(INT32)
(INT32)

COL_CTYPE_UINT16
※¹
※¹
※¹
※¹

COL_CTYPE_UINT32
※¹
※¹
※¹
※¹

COL_CTYPE_SINGLE
(SINGLE)
(SINGLE)
(SINGLE)
(SINGLE)

COL_CTYPE_DOUBLE
(DOUBLE)
(DOUBLE)
(DOUBLE)
(DOUBLE)

COL_CTYPE_BOOLEAN
※¹
※¹
※¹
※¹

COL_CTYPE_CHAR
H：f(ltoa)
AL：f(sprintf)
W：f(_ltoa)
H：f(ltoa)
AL：f(sprintf)
W：f(_ltoa)
H：f(ultoa)
AL：f(sprintf)
W：f(_ultoa)
H：f(ultoa)
AL：f(sprintf)
W：f(_ultoa)

COL_CTYPE_DATETIME
×
×
×
×

COL_CTYPE_BINARY
×
×
×
×

表7-11　SetFieldメソッドでのデータ型変換規則(2)

DBMS
データ型
設定するデータ型

SINGLE
DOUBLE
BOOLEAN
LPTSTR
DATE
BINARY

COL_CTYPE
_INT16
(INT16)
(INT16)
(INT16)
(INT16)
f(atol)
×
×

COL_CTYPE
_INT32
(INT32)
(INT32)
(INT32)
(INT32)
f(atol)
×
×

COL_CTYPE
_UINT16
※¹
※¹
※¹
※¹
※¹
※¹

COL_CTYPE
_UINT32
※¹
※¹
※¹
※¹
※¹
※¹

COL_CTYPE
_SINGLE
○
(SINGLE)
(SINGLE)
(SINGLE)
f(atof)
×
×

COL_CTYPE
_DOUBLE
(DOUBLE)
○
(DOUBLE)
(DOUBLE)
f(atof)
×
×

COL_CTYPE
_BOOLEAN
※¹
※¹
※¹
※¹
※¹
※¹

COL_CTYPE
_CHAR
H：f(gcvt)
AL：f(gcvt)
W：f(_gcvt)
H:：f(gcvt)
AL：f(gcvt)
W：f(_gcvt)
※²
○
×
※³

COL_CTYPE
_DATETIME
×
×
×
×
○※⁴
×

COL_CTYPE
_BINARY
×
×
×
×
×
○

(凡例)

○：変換しないで設定します。

×：設定できません(DB_ERROR_DATA_TRUNCATEDエラーをスローします)。

(data type)：data typeにキャストして設定します。

f(func)：func関数で変換して設定します。

(data type)f(func)：func関数で変換した後,data typeでキャストして設定します。

H：HP-UXの場合

AL：AIXおよびRed Hat Linuxの場合

W：Windowsの場合

注※1　現在のバージョンでは，形式COL_CTYPE_UINT16,及び COL_CTYPE_UINT32, COL_CTYPE_BOOLEANはありません。

注※2　TRUEなら文字列"TRUE"を，FALSEなら文字列"FALSE"を設定します。

注※3　COL_TYPE_CHAR，COL_TYPE_VARCHARに対してだけ設定できます。

注※4　DBMSの内部データ形式に変換します。

7.1.6　DBMSのデータ型と識別子との対応

DBMS固有の，データ型と識別子の対応を表7-12から7-19に示します。

表7-12　DBMSのデータ型と識別子との対応（ORACLE）

ORACLEのデータ型 | 識別子
VARCHAR2 | OR_DT_VARCHAR2
NUMBER | OR_DT_NUMBER
BINARY_INTEGER | OR_DT_BINARY_INTEGER
FLOAT | OR_DT_FLOAT
LONG | OR_DT_LONG
ROWID | OR_DT_ROWID
DATE | OR_DT_DATE
RAW | OR_DT_RAW
LONG RAW | OR_DT_LONG_RAW
CHAR | OR_DT_CHAR

表7-13　DBMSのデータ型と識別子との対応（SQL Anywhere）

SQL Anywhereのデータ型
識別子

CHAR
CHARACTER
VARCHAR
CHARACTER VARYING
SYSNAME
ODBC_DT_VARCHAR

LONG VARCHAR
TEXT
ODBC_DT_LONG_VARCHAR

DECIMAL
MONEY
SMALLMONEY
NUMERIC
ODBC_DT_NUMERIC

TINYINT
ODBC_DT_TINYINT

SMALLINT
ODBC_DT_SMALLINT

INT
INTEGER
ODBC_DT_INTEGER

REAL
FLOAT
ODBC_DT_REAL

DOUBLE
ODBC_DT_DOUBLE

DATE
ODBC_DT_DATE

TIME
ODBC_DT_TIME

DATETIME
SMALLDATETIME
TIMESTAMP
ODBC_DT_TIMESTAMP

BINARY
ODBC_DT_BINARY

LONG BINARY
IMAGE
ODBC_DT_LONG_VARBINARY

表7-14　DBMSのデータ型と識別子との対応（Adaptive Server Anywhere）

DBMSのデータ型
識別子

CHAR
SYSNAME
VARCHAR
ODBC_DT_VARCHAR

LONG VARCHAR
TEXT
ODBC_DT_LONG_VARCHAR

DECIMAL
ODBC_DT_DECIMAL

MONEY
NUMERIC
SMALLMONEY
ODBC_DT_NUMERIC

OLDBIT
TINYINT
ODBC_DT_TINYINT

SMALLINT
ODBC_DT_SMALLINT

INTEGER
ODBC_DT_INTEGER

FLOAT
ODBC_DT_REAL

DATE
ODBC_DT_DATE

TIME
ODBC_TIME

DOUBLE
FLOAT
ODBC_DT_DOUBLE

DATETIME
SMALLDATETIME
TIMESTAMP
ODBC_DT_TIMESTAMP

BINARY
VARBINARY
ODBC_DT_BINARY

IMAGE
Java serialization
java.lang.Object
LONG BINARY
ODBC_DT_LONG_VARBINARY

BIT
ODBC_DT_BIT

BIGINT
ODBC_DT_BIGINT

表7-15　DBMSのデータ型と識別子との対応（SQL Server）

DBMSのデータ型
識別子

CHAR
ODBC_DT_CHAR

SYSNAME(SQL Server6.5のとき)
VARCHAR
ODBC_DT_VARCHAR

TEXT
ODBC_DT_LONG_VARCHAR

DECIMAL
MONEY
SMALLMONEY
ODBC_DT_DECIMAL

NUMERIC
ODBC_DT_NUMERIC

TINYINT
ODBC_DT_TINYINT

SMALLINT
ODBC_DT_SMALLINT

INT
ODBC_DT_INTEGER

FLOAT
REAL
ODBC_DT_REAL

FLOAT
ODBC_DT_DOUBLE

DATETIME
SMALLDATETIME
ODBC_DT_TIMESTAMP

BINARY
TIMESTAMP
ODBC_DT_BINARY

VARBINARY
ODBC_DT_VARBINARY

IMAGE
ODBC_DT_LONG_VARBINARY

BIT
ODBC_DT_BIT

表7-16　DBMSのデータ型と識別子との対応（HiRDB）

HiRDBのデータ型 | 識別子※1
INTERVAL YEAR TO DAY | HI_DT_INTER_YEAR
INTERVAL HOUR TO SECOND | HI_DT_INTER_HOUR
DATE | HI_DT_DATE
TIME | HI_DT_TIME
BLOB | HI_DT_BLOB
BINARY | HI_DT_BINARY※2
MVARCHAR | HI_DT_MVARCHAR
MCHAR | HI_DT_MCHAR
NVARCHAR | HI_DT_NVARCHAR
NCHAR | HI_DT_NCHAR
VARCHAR | HI_DT_VARCHAR
CHAR | HI_DT_CHAR
FLOAT | HI_DT_DOUBLE
SMALLFLT | HI_DT_FLOAT
DEC | HI_DT_DECIMAL
INT | HI_DT_INT
SMALLINT | HI_DT_SMALLINT

注※1　欠損値を許さないフィールドの場合です。欠損値を許すフィールドの場合は，"HI_DT_DATE_N"のように識別子の末尾に"_N"を付けた値になります。

注※2　HiRDBのBINARY型はバージョン02-12以降で使用できます。

表7-17　DBMSのデータ型と識別子との対応（XDM/RD）

XDM/RDのデータ型 | 識別子※
XCHAR | RDA_DT_XCHAR
NUMERIC TRAILING | RDA_DT_NUM_TRAILING
NUMERIC UNSIGNED | RDA_DT_NUM_UNSIGNED
FLOAT | RDA_DT_FLOAT
SMALLFLT | RDA_DT_SMALLFLT
DECIMAL | RDA_DT_DECIMAL
LARGE DECIMAL | RDA_DT_LARGE_DECIMAL
INTEGER | RDA_DT_INTEGER
SMALLINT | RDA_DT_SMALLINT
MVARCHAR | RDA_DT_MVARCHAR
MCHAR | RDA_DT_MCHAR
LONG MVARCHAR | RDA_DT_LONG_MVARCHAR
NVARCHAR | RDA_DT_NVARCHAR
NCHAR | RDA_DT_NCHAR
LONG NVARCHAR | RDA_DT_LONG_NVARCHAR
VARCHAR | RDA_DT_VARCHAR
CHAR | RDA_DT_CHAR
LONG VARCHAR | RDA_DT_LONG_VARCHAR
DATE | RDA_DT_DATE

注※　欠損値を許さないフィールドの場合です。欠損値を許すフィールドの場合は，"RDA_DT_FLOAT_N"のように識別子の末尾に"_N"を付けた値になります。

表7-18　DBMSのデータ型と識別子との対応（SQL/K）

SQL/Kのデータ型 | 識別子
SMALLINT | DBS_DT_SMALLINT
INTEGER | DBS_DT_INTEGER
DECIMAL | DBS_DT_DECIMAL
NUMERIC TRAILING | DBS_DT_NUM_TRAILING
NUMERIC UNSIGNED | DBS_DT_NUM_UNSIGNED
CHAR | DBS_DT_CHAR
NCHAR | DBS_DT_NCHAR
MCHAR | DBS_DT_MCHAR
XCHAR | DBS_DT_XCHAR

表7-19　DBMSのデータ型と識別子との対応（XDM/SD）

XDM/SDのデータ型 | 識別子
BIT | DBS_DT_BIT
DBK(データベースキー) | DBS_DT_DBK
NUMERIC TRAILING | DBS_DT_NUM_TRAILING
DECIMAL | DBS_DT_DECIMAL
INTEGER | DBS_DT_INTEGER
SMALLINT | DBS_DT_SMALLINT
NCHAR | DBS_DT_NCHAR
CHAR | DBS_DT_CHAR

7.2　DBR_BINARY型を使用したVARCHARデータの取得方法

DBResultSetクラスのGetFieldメソッドを使用して，VARCHAR型のデータをDBR_BINARY型で取得する方法について説明します。ここでいうVARCHAR型とは，DABroker for C++の型識別子COL_TYPE_VARCHARに該当するデータ型のことを指します。COL_TYPE_VARCHARと各DBMSのデータ型の対応については，「戻り値とDBMSでのデータ型の対応」を参照してください。

＜この節の構成＞

7.2.1　DBR_BINARY型の構造体とメンバに設定される値

7.2.1　DBR_BINARY型の構造体とメンバに設定される値

DBR_BINARY型は次に示すような構造体になっています。

typedef struct {
 DBR_UINT32  Length;
 DBR_UINT32  RealLength;
 LPTSTR      Data;
} DBR_BINARY;

それぞれのメンバは，SetResultSetTypeメソッドやGetFieldメソッド，SetMaxFieldSizeメソッドの指定によって次に示す値が設定されます。簡易版クラスを使用する場合は，次の説明中のSetResultSetTypeメソッドをExecuteメソッドと読み替えてください。また，簡易版にはSetMaxFieldSizeメソッドがありませんので，「7.2.1(1)　メンバに設定される値(SetMaxFieldSizeメソッドの指定なし)」だけを参照してください。

＜この項の構成＞

(1)　メンバに設定される値(SetMaxFieldSizeメソッドの指定なし)

(2)　メンバに設定される値(SetMaxFieldSizeメソッドの指定あり)

(1)　メンバに設定される値(SetMaxFieldSizeメソッドの指定なし)

GetFieldメソッドの形式2を使用した場合，又は形式3を使用してデータの切り捨てが発生しなかった場合にメンバに設定される値を表7-20に，GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合にメンバに設定される値を表7-21に示します。

VARCHAR_LENGTH_DEFを指定した場合は，ユーザが指定した領域長とカラムの定義長を比較して切り捨てたかどうか判定されます。そのため，データ長よりもユーザの指定した領域長の方が大きく，実際にはデータの切り捨てが発生していない場合でも，ユーザの指定した領域長が定義長より小さければ切り捨てが発生したと見なされ，LengthメンバやRealLengthメンバには表7-21の値が入ります。

VARCHAR_LENGTH_REALを指定した場合は，ユーザが指定した領域長と実際のデータ長を比較して切り捨てたかどうか判定されます。

表7-20　GetFieldメソッドの形式2を使用した場合，又は形式3を使用してデータの切り捨てが発生しなかった場合にメンバに設定される値(SetMaxFieldSizeメソッドの指定なし)

メンバ | SetResultSetTypeの指定値
VARCHAR_LENGTH_DEF | VARCHAR_LENGTH_REAL
Length | カラムの定義長 | 実際のデータ長
RealLength | 0 | 0
Data※ | データを指すポインタのコピー(形式2)，又はデータのコピー(形式3) | データを指すポインタのコピー(形式2)，又はデータのコピー(形式3)

注※　形式2の場合，Dataメンバにはデータを指すポインタがコピーされます。形式3の場合，Dataメンバにはユーザが確保した領域のポインタが設定されているため，その領域に有効なデータがコピーされます。

表7-21　GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合にメンバに設定される値(SetMaxFieldSizeメソッドの指定なし)

メンバ | SetResultSetTypeの指定値
VARCHAR_LENGTH_DEF | VARCHAR_LENGTH_REAL
Length | 切り捨て後の有効データ長 | 切り捨て後の有効データ長
RealLength | カラムの定義長 | 実際のデータ長
Data※ | 切り捨て後の有効データのコピー | 切り捨て後の有効データのコピー

注※　形式2の場合，Dataメンバにはデータを指すポインタがコピーされます。形式3の場合，Dataメンバにはユーザが確保した領域のポインタが設定されているため，その領域に有効なデータがコピーされます。

(2)　メンバに設定される値(SetMaxFieldSizeメソッドの指定あり)

GetFieldメソッドの形式2を使用した場合，又は形式3を使用してデータの切り捨てが発生しなかった場合にメンバに設定される値を表7-22に，GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合にメンバに設定される値を表7-23に示します。

SetMaxFieldSizeで取得するデータの最大長を指定した場合，もし実際のデータがSetMaxFieldSizeで指定した長さよりも大きいとしても，SetMaxFieldSizeで指定した長さ分しかデータは取得されません。このような場合，実際のデータ長を取得することはできません。

VARCHAR_LENGTH_DEFを指定した場合は，ユーザが指定した領域長とSetMaxFieldSizeメソッドで指定した長さを比較して切り捨てたかどうか判定されます。このため，データ長よりもユーザの指定した領域長の方が大きく，実際にはデータの切り捨てが発生していない場合でも，ユーザの指定した領域長がSetMaxFieldSizeで指定した長さよりも小さければ切り捨てが発生したと見なされ，LengthメンバやRealLengthメンバには表7-23の値が入ります。

VARCHAR_LENGTH_REALを指定した場合は，ユーザが指定した領域長と実際のデータ長を比較して切り捨てたかどうか判定されます。

表7-22　GetFieldメソッドの形式2を使用した場合，又は形式3を使用してもデータの切り捨てが発生しなかった場合にメンバに設定される値(SetMaxFieldSizeメソッドの指定あり)

メンバ | SetResultSetTypeの指定値
VARCHAR_LENGTH_DEF | VARCHAR_LENGTH_REAL
Length | SetMaxFieldSizeの指定長 | 取得データ長※2
RealLength | 0 | 0
Data※1 | データを指すポインタのコピー(形式2)，又はデータのコピー(形式3) | データを指すポインタのコピー(形式2)，又はデータのコピー(形式3)

注※1　形式2の場合，Dataメンバにはデータを指すポインタがコピーされます。形式3の場合，Dataメンバにはユーザが確保した領域のポインタが設定されているため，その領域に有効なデータがコピーされます。

注※2　実際のデータ長がSetMaxFieldSizeで指定した長さよりも大きい場合は，SetMaxFieldSizeで指定した長さ分しかデータを取得されないため，ここは実際のデータ長ではなく，取得データ長となります。

表7-23　GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合にメンバに設定される値(SetMaxFieldSizeメソッドの指定あり)

メンバ | SetResultSetTypeの指定値
VARCHAR_LENGTH_DEF | VARCHAR_LENGTH_REAL
Length | 切り捨て後の有効データ長 | 切り捨て後の有効データ長
RealLength | SetMaxFieldSizeの指定長 | 取得データ長※2
Data※1 | 切り捨て後の有効データのコピー | 切り捨て後の有効データのコピー

注※1　形式2の場合，Dataメンバにはデータを指すポインタがコピーされます。形式3の場合，Dataメンバにはユーザが確保した領域のポインタが設定されているため，その領域に有効なデータがコピーされます。

注※2　実際のデータ長がSetMaxFieldSizeで指定した長さよりも大きい場合は，SetMaxFieldSizeで指定した長さ分しかデータを取得されないため，ここは実際のデータ長ではなく，取得データ長となります。

8.　トラブルシューティング

DABrokerの使用中に何らかのエラーを生じることがあります。ここでは，エラー発生時にどのような手順で，どのように解決すればよいかを説明します。

＜この章の構成＞

8.1　手順

8.2　C++クラスライブラリのエラー情報

8.1　手順

この節では，トラブルシューティングの手順と，トレースファイルの設定方法,及び見方について説明します。

＜この節の構成＞

8.1.1　トラブルシューティングについて

8.1.2　トレースログ採取のための設定

8.1.3　トレースファイルの見方

8.1.1　トラブルシューティングについて

＜この項の構成＞

(1)　障害発生時の動作

(2)　トラブルシューティングの流れ

(1)　障害発生時の動作

障害発生時の動作は，次のように分けられます。

C++クラスライブラリを利用しているアプリケーションが，アプリケーションエラーによって異常終了した場合。
アプリケーションプログラムと共にアボートします。アプリケーションを開始したトランザクションについては，DBMSによってロールバックされます。

DBMS自身が異常終了した場合。
DABroker for C++は，DBMSとの接続が切れたことをアプリケーションにエラーとして通知します。アプリケーションのその後の動作は，アプリケーションの実装に依存します。アプリケーションが開始したトランザクションは無効になります。回復はDBMSに依存します。

(2)　トラブルシューティングの流れ

障害が発生するとエラーメッセージが出力されます。これをもとに障害の原因を取り除いてください。C++クラスライブラリで発生するエラー詳細については，「8.2 C++クラスライブラリのエラー情報」を参照してください。

また，DABroker for C++では必要に応じてトレースログも採取できます。このトレースログを基にエラーがどの時点で起こったかを調査できます。

次に，UNIXの場合のトレースログ採取方法を説明します。Windowsの場合は環境設定ユティリティを使って採取方法を設定できます。Windowsの場合の設定方法については，マニュアル「DABroker」を参照してください。

8.1.2　トレースログ採取のための設定

プログラムの障害調査及びプログラムテストのため，トレースログを採取できます。DABrokerでは，環境変数によって採取する情報のレベルを設定できるため，実行時間と取得できる情報量を状況に応じて調整できます。

トレースログを採取するための設定は，confディレクトリの環境定義ファイルdasysconfで行います。

dasysconfファイルの設定例を次に示します。

# DABroker Event Trace
# DABroker for C++
　DABCPP_EVTTRC_SIZE=256   # イベントトレースサイズ
　DABCPP_EVTTRC_LEVEL=1   # 取得レベル
　DABCPP_EVTTRC_00=ON   # 事象種別   20thビット 0x00000010
　DABCPP_EVTTRC_01=OFF
　DABCPP_EVTTRC_02=ON
　DABCPP_EVTTRC_03=OFF

DABCPP_EVTTRC_SIZE
採取するトレースログのファイルサイズをKB単位で指定します。標準値は32KBです。
-1：トレースログを採取しない
0：ファイルサイズに制限なし
10～32767：出力ファイルサイズを10～32767[KB]の範囲で指定する。

DABCPP_EVTTRC_LEVEL
トレースログ出力レベルを指定します。
0：エラー発生時にエラーの内容を出力します。それ以外の情報は出力しません。DABCPP_EVTTRC_00がOFFのときは何も出力しません。
1：C++インタフェース部

DABCPP_EVTTRC_00
エラー発生時に，エラーの内容を出力するかどうかを指定します。
ON：出力する
OFF：出力しない

DABCPP_EVTTRC_01
現在使用していません。ONでもOFFでも出力情報には変更ありません。

DABCPP_EVTTRC_02
関数の最初と最後で出力するかどうかを指定します。
ON：出力する
OFF：出力しない

DABCPP_EVTTRC_03
DABroker for C++の障害調査情報を出力します。
ON：出力する
OFF：出力しない

8.1.3　トレースファイルの見方

トレースファイルは，"dabevttrccpp1"の名称で作成されます。

出力されるファイルの内容は,次のとおりです。

10800041 00100000 711a 00e2 1998/04/04 13:31:52.443000
BEGIN:::Object(12fef8):::DBDriverManager::InitializeMessage()

１ブロック目の数値(10800041)：トレース出力に使用したレベル

２ブロック目の数値(00100000)：仮想プロセスＩＤ(関係ありません)

３ブロック目の数値(711a)：プロセスＩＤ

４ブロック目の数値(00e2)：スレッドＩＤ

５ブロック目の数値(1998/04/04)：採取した日付

６ブロック目の数値(13:31:52)：採取した時間

以降のブロック：実行時の動作結果のログ

なお，一つ目のログファイルが一杯になると（DABCPP_EVTTRC_SIZEで指定したサイズを超えると），バックアップファイルとして1世代前のファイルをdabevttrccpp2という名称で作成します。 dabevttrccpp1が一杯になるとdabevttrccpp2にコピーし，次にdabevttrccpp1が一杯になるとdabevttrccpp1をdabevttrccpp2にもう一度コピーした上でdabevttrccpp1をラップアラウンドします。

8.2　C++クラスライブラリのエラー情報

この節では，C++クラスライブラリで発生するエラー情報を示します。

＜この節の構成＞

8.2.1　C++クラスライブラリで発生するエラー情報

8.2.2　DB_ERROR_DAB_ILLEGAL_VALUEでの詳細コード

8.2.1　C++クラスライブラリで発生するエラー情報

C++クラスライブラリで発生するエラーのエラーコードとそれに対応するメッセージテキストを表8-1に示します。

表8-1　エラーコードとそれに対応するメッセージテキスト

エラーコード | メッセージテキスト
DB_DRV_ERROR_AT_NOT_PARAM | 動的にSQLを実行するためのパラメタが指定されていません。
DB_DRV_ERROR_CANNOT_FILE_ACCESS | 接続しているDBMSではファイルアクセスできません。
DB_DRV_ERROR_CONNECT_HANDLE | コネクトハンドルが取得できませんでした。
DB_DRV_ERROR_CONNECT_NAME_ALREADY | 指定された接続名で既に接続されています。
DB_DRV_ERROR_CURSORID | カーソルIDの取得ができません。カーソルID（1～64）がすべて使用中です。
DB_DRV_ERROR_CURSOR_COUNT | カーソルの個数が上限値を超えたためオープンできません。
DB_DRV_ERROR_CURSOR_NOT_DECLARE | カーソルが定義されていません。
DB_DRV_ERROR_CURSOR_NOT_OPEN | カーソルがオープンされていません。
DB_DRV_ERROR_DATA_CONVERT | データ変換でエラーが発生しました。
DB_DRV_ERROR_DBNAME_NULL | データベース名が指定されていません。
DB_DRV_ERROR_DECIMAL_TYPE | DECIMALデータは扱うことができません。
DB_DRV_ERROR_EXIST_OTHER_TYPE_DATA | 同一フィールドに異なる型のデータがセットされています。
DB_DRV_ERROR_FIELD_NOT_NULL | 指定されたフィールドはNULLを設定できません。
DB_DRV_ERROR_INIT_ERROR | 初期化でエラーが発生しました。
DB_DRV_ERROR_INVALID_ACCESS_TYPE | SetData関数又はSetFieldData関数で指定した設定先はファイルアクセス専用です。
DB_DRV_ERROR_INVALID_ARGUMENT | メソッドの引数に誤りがあります。
DB_DRV_ERROR_INVALID_COLUMN_TYPE | 選択リスト又はストアドプロシジャのパラメタ中にサポートされていないデータ型があります。
DB_DRV_ERROR_INVALID_CONNECT_NAME | 接続名が不正です。
DB_DRV_ERROR_INVALID_MAX_SIZE | 格納領域の最大長指定が不正です。
DB_DRV_ERROR_INVALID_SQL | 指定されたSQL文が不正です。
DB_DRV_ERROR_INVALID_SQL_EXCLUSIVE | WITH句指定ではEXCLUSIVEロックを使用できません。
DB_DRV_ERROR_INVALID_SQL_TYPE | SetSQL関数が実行されていないか，SQLがSELECT文ではありません。
DB_DRV_ERROR_INVALID_TABLELIST_TYPE | テーブルの一覧表示以外はサポートされていません。
DB_DRV_ERROR_IN_ERROR | エラー処理中にエラーが発生しました。
DB_DRV_ERROR_NOT_ALLOC_PARAM_AREA | パラメタ設定領域が確保されていません。
DB_DRV_ERROR_NOT_BIND_PHOLDER | 関連付けられていないプレースホルダがあります。
DB_DRV_ERROR_NOT_ENOUGH_MEMORY | メモリ不足のため処理を続行できません。
DB_DRV_ERROR_NOT_PLACE_HOLDER | SQL文にプレースホルダがないのでパラメタ領域を確保できません。
DB_DRV_ERROR_NOT_SET_OBJECT | 指定された接続名でオブジェクトは登録されていません。
DB_DRV_ERROR_NOT_SPECIFIED_MAX_SIZE | 設定済みSQL文に対して領域の最大長指定はできません。
DB_DRV_ERROR_NOT_SUPORT_TABLE_LIST | シノニムの一覧表示はサポートされていません。
DB_DRV_ERROR_OUTPUT_NOT_FOUND | OUTPUTデータがありません。
DB_DRV_ERROR_PHOLDER_AND_QP | プレースホルダと？パラメタが混在するSQL文の指定はできません。
DB_DRV_ERROR_PROC_COLUMN_LIST | プロシジャのフィールド情報は取得できません。(ORACLE)
DB_DRV_ERROR_RDA_FILE_ACCESS_PARAM_TYPE | LONG型以外のパラメタでファイルアクセスはできません。
DB_DRV_ERROR_RDA_PARAM_TYPE | パラメタの型が未設定か又は設定された型が不正です。
DB_DRV_ERROR_READ_ONLY_RESULTSET | 参照専用のResultSetでは，レコードを更新できません。
DB_DRV_ERROR_REQUEST_LIST_ROWS | テーブル又はフィールド名一覧の取得要求数が不正です。
DB_DRV_ERROR_REQUEST_RESULTSET_ROWS | ResultSetの生成に要求されたレコード数が不正です。
DB_DRV_ERROR_RESULTSET_NOT_FOUND | ResultSetが生成されていません。
DB_DRV_ERROR_SELECT_SET_OPERATION | 集合演算子(UNIONなど)を含むSQL文では更新可能なResultSetを生成できません。
DB_DRV_ERROR_SETDATA_TYPE | 設定データと設定先の型が一致していません。
DB_DRV_ERROR_SETFIELDDATA | パラメタの設定先(フィールド又はレコード番号)が不正です。
DB_DRV_ERROR_SET_OVER_SIZE | 指定された領域長が不正です。
DB_DRV_ERROR_SQL_NOT_FOUND | SQL文が設定されていません。
DB_DRV_ERROR_STAT_COUNT | ステートメントの個数が上限値を超えました。
DB_DRV_ERROR_UPDATE_RESULTSET_NOT_FOUND | 更新可能なResultSetが生成されていません。
DB_DRV_ERROR_USERID_NULL | ユーザIDが指定されていません。
DB_ERROR_CANNOT_ACCESS_WHILE_EXECUTED | SQLを実行中に当該SQLで使用されているDBRArrayDataクラスのインスタンスにアクセスすることはできません。
DB_ERROR_CANNOT_USE_NONXADRIVER | 非XAインターフェース用に作成されたDBDriverオブジェクトは，XAインターフェース用として使用できません。
DB_ERROR_CANNOT_USE_XADRIVER | XAインターフェース用に作成されたDBDriverオブジェクトは，非XAインターフェース用として使用できません。
DB_ERROR_ALREADY_CONNECTED | 既にデータベースに接続されています。
DB_ERROR_ALREADY_REGISTERED | DBTransactionオブジェクトは既に登録されています。
DB_ERROR_ARGUMENT_OUT_OF_RANGE | メソッドの引数は指定できる範囲を超えています。
DB_ERROR_BEFORE_EXECUTE | Executeメソッドが実行されていません。
DB_ERROR_CANCEL_FAILURE | 実行中の処理をキャンセルできませんでした。
DB_ERROR_CANNOT_BE_NULL | 文字列を指定する引数にNULLは指定できません。
DB_ERROR_CANNOT_EDIT_LAST_RECORD | カレントレコードは最後のレコードを超えています。更新はできません。
DB_ERROR_CANNOT_EXECUTE | SQL文を実行できません。コミット又はロールバック実行のタイミングが不明です。
DB_ERROR_CANNOT_FIND_OBJECT | 指定した名前を持つオブジェクトはありません。
DB_ERROR_CANNOT_GET_RESULTSET | プロシジャが検索結果を返さないため検索結果は取得できません。
DB_ERROR_CANNOT_REFRESH | Refreshメソッドは使用できません。
DB_ERROR_CANNOT_USE_ABSTRACTNAME | データベース種別名が指定されていないためデータベース名は指定できません。
DB_ERROR_CANNOT_USE_DBCALLABLE | DBCallableStatementオブジェクトから作成されたDBResultSetを使用する場合，このメソッドは実行できません。
DB_ERROR_CANNOT_USE_IN_CLOSE | ほかのスレッドでExecuteメソッド又はCloseメソッドを実行中のため，呼び出したメソッドは実行できません。
DB_ERROR_CANNOT_USE_IN_EXECUTE | ほかのスレッドでExecuteメソッドを実行中のため，呼び出したメソッドは実行できません。
DB_ERROR_CANT_UPDATE | 参照専用のDBResultSetオブジェクトは更新できません。
DB_ERROR_CAN_EXECUTE_SINGLE_SQL | 今バージョンではエージェントで実行できるSQL文は一つだけです。
DB_ERROR_CONNECTDBDEFINITIONNAME_LENGTH_IS_ZERO | 指定したデータベース名の長さが０です。
DB_ERROR_CONNECTION_FAILED | DBMSとの接続に失敗しました。
DB_ERROR_CONNECTSTRING_INVALID | 接続文字列の形式が正しくありません。
DB_ERROR_CONSTRATION | 更新レコードの内容は，データベースの整合性チェックに違反します。
DB_ERROR_CONVERT_ARRAY_TO_SCALAR | 繰り返し構造のデータとスカラ型のデータは相互に変換できません。
DB_ERROR_CURRENT_RECORD_DELETED | カレントレコードは削除されています。
DB_ERROR_DAB_ACCESS_ERROR | DABrokerでエラーが発生しました。詳細情報はDBSQLCAに設定されます。
DB_ERROR_DAB_ALREADY_LOADING | ドライバプログラムは既にロードしています。
DB_ERROR_DAB_ILLEGAL_VALUE | 指定した引数が不正です。詳細情報はDBSQLCAに設定されます。
DB_ERROR_DAB_SYSTEMCALL_ERROR | システムコールでエラーが発生しました。詳細情報はDBSQLCAに設定されます。
DB_ERROR_DAB_UNINITIALIZE | データベースに接続していません。
DB_ERROR_DATA_CANNOT_CONVERT | 設定されたデータをDBMSの正しいデータ型に変換できません。
DB_ERROR_DATA_TRUNCATED | データ変換でエラーが発生しました。GetParamメソッド,GetFieldメソッド,SetFieldメソッドの場合，取得するデータ型を修正する必要があります。
DB_ERROR_DBDEFINITION_IS_UNAVAILABLE_IN_XA | XAインタフェース使用時には接続先データベース定義は利用できません。
DB_ERROR_DBDEFINITIONNAME_LENGTH_IS_ZERO | 指定したデータベース種別名の長さが0です。
DB_ERROR_DRIVER_ERROR | DBMSでエラーが発生しました。詳細情報はDBSQLCAに設定されます。
DB_ERROR_DRIVER_NOT_LOADED | ドライバがロードされていません。
DB_ERROR_FIELD_NOT_DUPLICATABLE | 指定されたフィールドは重複した値を設定できません。
DB_ERROR_FIELD_NOT_NULL | 指定されたフィールドはNULLを設定できません。
DB_ERROR_FILE_NOT_FOUND | ファイルが見つかりません。
DB_ERROR_FILE_READ_ERROR | ファイルの読込みでエラーが発生しました。
DB_ERROR_FUNCION_NOT_READY | メソッドを呼び出すための準備ができていません。
DB_ERROR_INITIALIZE_ERROR | 初期化に失敗しました。メモリ不足か環境設定の不正のため，このまま処理を続けることはできません。作成したDBDriverManagerオブジェクトは使用できません。
DB_ERROR_INSTALLPATH_READ_ERROR | レジストリからのインストールパスの取得に失敗しました。
DB_ERROR_INVALID_ARGUMENT | メソッドの引数に誤りがあります。
DB_ERROR_IN_ASYNC_EXECUTE | SQL文の非同期実行処理中です。
DB_ERROR_IN_TRANSACTION | トランザクションは既に開始されています。
DB_ERROR_IN_USE_OTHER_THREADS | オブジェクトはほかのスレッドで使用されているため，メソッドを実行できません。
DB_ERROR_MAXSIZE_NOT_EVEN | 文字列の最大長が奇数の時に２バイト文字を使用することはできません。
DB_ERROR_MISSMATCH_DBMSKIND_IN_ENVFILE | 環境情報[DAB_DBMSNAME]の値が間違っています。
DB_ERROR_NAME_ALREADY_USED | 指定した名称は既に使用されています。
DB_ERROR_NAME_INVALID | 指定した名前は不正です。
DB_ERROR_NOT_CONNECTED | データベースに接続していません。
DB_ERROR_NOT_ENOUGH_MEMORY | メモリ不足のため処理を続行できません。
DB_ERROR_NOT_EXECUTE_ASYNC | XAインターフェース使用時に非同期処理は指定できません。
DB_ERROR_NOT_FOUND | 指定されたフィールドはありません。
DB_ERROR_NOT_FOUND_DBDEFINITION | 接続先データベース定義情報が見つかりません。
DB_ERROR_NOT_FOUND_DBMSKIND_IN_ENVFILE | 環境情報にDBMS種別を定義する変数[DAB_DBMSNAME]が定義されていません。
DB_ERROR_NOT_FOUND_USERID_IN_ENVFILE | 環境情報に接続するユーザＩＤを定義する変数[DABCONNECT_USERID]が定義されていません。
DB_ERROR_NOT_IN_EDIT | 更新のための準備ができていません。
DB_ERROR_NOT_IN_TRANSACTION | ステートメントごとの自動コミットが設定されています。
DB_ERROR_NOT_RELATIONSHIP_TO_DBRDATABASE | 指定されたDBRDatabaseオブジェクトと関連付けることができませんでした。一つのDBRDatabaseオブジェクトに対して関連付けられるオブジェクトは６４個までです。
DB_ERROR_NOT_SELECT_STATEMENT | 指定されたSQL文はSELECT文ではありません。SELECT文を指定してください。
DB_ERROR_NOT_SUPPORTED | このバージョンではサポートされていません。
DB_ERROR_NOT_SUPPORT_XA | 指定したDriverタイプでは，XAインターフェースを使用できません。
DB_ERROR_NOT_UPDATE_INSERT | SQLがUPDATE文でもINSERT文でもないためこのメソッドは無効です。
DB_ERROR_NO_AGENTBODY_INFORMATION | DBRAgentBodyクラスに属する登録情報がありません。SetRegisterメソッドを使用して登録情報を設定してください。
DB_ERROR_NO_AGENTCORE_INFORMATION | DBRAgentCoreクラスに属する登録情報がありません。SetRegisterメソッドを使用して登録情報を設定してください。
DB_ERROR_NO_AGENTOTHER_INFORMATION | DBRAgentOtherクラスに属する登録情報がありません。SetRegisterメソッドを使用して登録情報を設定してください。
DB_ERROR_NO_AGENTSQLLIST_INFORMATION | DBRAgentSQLListクラスに属する登録情報がありません。SetRegisterメソッドを使用して登録情報を設定してください。
DB_ERROR_NO_CONNECTION_OBJECT | トランザクションにDBConnectionが登録されていません。
DB_ERROR_NO_DATA_AREA | データ領域が存在しません。
DB_ERROR_NO_INSTANCE | 指定されたDBRArrayDataPtrまたはDBRArrayDataConstPtrオブジェクトはDBRArrayDataクラスのインスタンスを保持していません。
DB_ERROR_NO_REGISTER_INFORMATION | エージェントの登録情報がありません。SetRegisterメソッドを使用して登録情報を設定してください。
DB_ERROR_OCCURRED_IN_CONSTRUCTOR | コンストラクタでエラーが発生しました。エラーの内容はGetErrorStatusメソッドでDBSQLCAオブジェクトを取得して参照してください。
DB_ERROR_OCCURRED_UNDER_ERROR_TRANSACTION | エラー処理中にメモリ不足になりました。
DB_ERROR_OUT_OF_RANGE | Nextメソッド,PageNextメソッドが最後のレコードを超えて呼び出されました。
DB_ERROR_OUT_OF_RESULTSET | ResultSetの範囲を超えてカレントレコードを移動しようとしました。
DB_ERROR_OVER_LAST_AGENTRESULT | 最後の実行結果の次の実行結果を取得しようとしました。
DB_ERROR_OVER_MAX_CURSORS | すべてのカーソルを使用中です。ステートメントを削除するなどして空きカーソルを増やしてから再度実行してください。
DB_ERROR_PARAM_NOT_FOUND | 指定されたパラメタはありません。
DB_ERROR_PREPARE_ERROR | エージェントの実行結果取得の準備に失敗しました。設定情報を見直して再度Executeメソッドを実行してください。
DB_ERROR_PROCEDURE_NOT_COMPLETE | プロシジャの実行が終了していません。
DB_ERROR_PROCEDURE_NOT_EXECUTE | プロシジャが実行されていません。
DB_ERROR_PROCEDURE_NOT_SET | プロシジャが指定されていません。
DB_ERROR_RESULTSET_NOT_EXIST | 検索結果が取得できていません。
DB_ERROR_SELECT_NOT_EXECUTED | SELECT文が実行されていません。ExecuteメソッドでSELECT文を実行してからOpenメソッドを呼び出してください。
DB_ERROR_STATEMENT_WITHOUT_PARAMETER | DBPreparedStatementオブジェクトを使用していないため，パラメタの取得・設定はできません。
DB_ERROR_SYNTAX_ERROR | 指定されたSQL文に誤りがあります。詳細はDBSQLCAに設定されます。
DB_ERROR_TIMEOUT | タイムアウトが発生したため制御を戻します。
DB_ERROR_TOO_LARGE_DATA | 指定したデータの値は大きすぎます。
DB_ERROR_USER_DEFINED_ERROR_NOT_LOADED | DBMS非依存エラー情報は読み込まれていません。

8.2.2　DB_ERROR_DAB_ILLEGAL_VALUEでの詳細コード

エラーコードがDB_ERROR_DAB_ILLEGAL_VALUEの場合は，さらに詳しい情報を取得できます。その情報は詳細コードとして取得できます。

詳細コードとそれに対応するメッセージテキストを表8.2に示します。

表8-2　詳細コードとそれに対応するメッセージテキスト

詳細コード | メッセージテキスト
DB_DDCI_ERROR_ACCESS_UNSUPPORT_DB_ERROR | 指定したDBMSは今バージョンではサポートしていません。
DB_DDCI_ERROR_AGENT_BODY_INF_IS_NOT_NULL_ERROR | DBRAgentBodyオブジェクトが指定されています。
DB_DDCI_ERROR_AGENT_GROUPID_LENGTH_IS_NOT_ZERO_ERROR | グループＩＤの長さが０ではありません。
DB_DDCI_ERROR_AGENT_HEADER_COUNT_IS_ZERO_ERROR | DBRAgentHeaderオブジェクトに指定したヘッダの個数が０です。
DB_DDCI_ERROR_AGENT_HEADER_INF_IS_NOT_NULL_ ERROR | DBRAgentHeaderオブジェクトが指定されています。
DB_DDCI_ERROR_AGENT_LIST_TYPE_MISSMATCHER_ ERROR | エージェント登録名を省略したときの取得情報属性の値が間違っています。
DB_DDCI_ERROR_AGENT_OTHER_INF_IS_NOT_NULL_ERROR | DBRAgentOtherオブジェクトが指定されています。
DB_DDCI_ERROR_AGENT_REGISTER_DB_KIND_LENGTH_IS_ZERO_ERROR | 接続先DBMS識別名の長さが０です。
DB_DDCI_ERROR_AGENT_REGISTER_NAME_IS_NULL_ ERROR | エージェント登録名にNULLが指定されています。
DB_DDCI_ERROR_AGENT_REGISTER_NAME_LENGTH_IS_ ZERO_ERROR | エージェント登録名の長さが０です。
DB_DDCI_ERROR_AGENT_SQLLIST_INF_IS_NOT_NULL_ ERROR | DBRAgentSQLListオブジェクトが指定されています。
DB_DDCI_ERROR_AGENT_SQL_COUNT_IS_ZERO_ERROR | 実行するSQLが一つも指定されていません。
DB_DDCI_ERROR_AGENT_VARIABLE_COUNT_IS_ZERO_ ERROR | 可変値情報が一つも指定されていません。
DB_DDCI_ERROR_DBDEFINITIONNAME_MISSMATCHER_ERROR | 一致するデータベース種別名が見つかりません。
DB_DDCI_ERROR_DBMSHOSTNAME_MISSMATCHER_ERROR | ホスト名称の指定が不正です。
DB_DDCI_ERROR_DBMSNAMELENGTH_IS_NOT_ZERO_ERROR | DBMS名の指定が不正です。
DB_DDCI_ERROR_DBMSNAME_MISSMATCHER_ERROR | DBMS名の指定が不正です。
DB_DDCI_ERROR_PASSWORD_MISSMATCHER_ERROR | パスワードの指定が不正です。
DB_DDCI_ERROR_PRK_COLUMN_NAME_MISSMATCHER_ERROR | プライマリキーのフィールド名の指定が不正です。
DB_DDCI_ERROR_SQL_LENGTH_IS_ZERO_ERROR | 指定したSQL文は不正です。SQL文の長さが0です。
DB_DDCI_ERROR_TOO_LONG_AGENT_HEADER_TEXT _ERROR | エージェントのヘッダは長すぎます。
DB_DDCI_ERROR_TOO_LONG_AGENT_REGISTER_COMMENT_ERROR | エージェントのコメントは長すぎます。
DB_DDCI_ERROR_TOO_LONG_AGENT_REGISTER_DB_HOST_ERROR | エージェントのDBMS識別名は長すぎます。
DB_DDCI_ERROR_TOO_LONG_AGENT_REGISTER_DB_KIND_ERROR | エージェントのホスト名は長すぎます。
DB_DDCI_ERROR_TOO_LONG_AGENT_REGISTER_GROUPID_ERROR | エージェントのグループＩＤは長すぎます。
DB_DDCI_ERROR_TOO_LONG_AGENT_REGISTER_NAME_ ERROR | エージェントの登録名は長すぎます。
DB_DDCI_ERROR_TOO_LONG_AGENT_REGISTER_OWNER_ ERROR | エージェントの所有者名は長すぎます。
DB_DDCI_ERROR_TOO_LONG_AGENT_REGISTER_OWNER_ PASSWD_ERROR | エージェントの所有者のパスワードは長すぎます。
DB_DDCI_ERROR_TOO_LONG_AGENT_SQL_TEXT_ERROR | エージェントのSQL文字列は長すぎます。
DB_DDCI_ERROR_TOO_LONG_AGENT_VARIABLE_DATA_ ERROR | エージェントの可変値のデータは長すぎます。
DB_DDCI_ERROR_TOO_LONG_AGENT_VARIABLE_NAME_ ERROR | エージェントの可変値名称は長すぎます。
DB_DDCI_ERROR_UNJUST_ACTIVEDB_ERROR | DBMS種別の指定が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_EXECUTE_OPTION_ ERROR | エージェントの実行時オプションの値が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_LIST_CONDITION_ERROR | エージェントの登録情報取得時の検索条件の値が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_LIST_TYPE_ERROR | エージェントの登録情報取得時の取得情報属性の値が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_OPTION_TYPE_ERROR | エージェントの登録情報の上書き許可の指定が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_REGISTER_CONNECT_ DB_ERROR | エージェント実行時の接続先DBMSの指定が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_REGISTER_EXECUTE_AUTHORIZATION_ERROR | エージェントの実行権限の指定が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_REGISTER_REFERENCE_AUTHORIZATION_ERROR | エージェントの参照権限の指定が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_REGISTER_RESERVE_DATE_ERROR | エージェントの実行日付の指定が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_REGISTER_RESERVE_DAYOFWEEK_ERROR | エージェントの実行曜日の指定が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_REGISTER_RESERVE_TIME_ERROR | エージェントの実行時刻の指定が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_REGISTER_VARIABLE_QUESTION_POSITION_ERROR | エージェントのSQL位置の指定が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_REGISTER_VARIABLE_SQL_POSITION_ERROR | エージェントの？パラメタの位置の指定が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_REQUEST_COUNT_ERROR | エージェントの結果情報取得時の件数の指定が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_RESULT_WRITE_MODE_ERROR | エージェントの実行結果の保存方法の指定が不正です。
DB_DDCI_ERROR_UNJUST_AGENT_VARIABLE_PRECISION_ERROR | エージェントの可変値の精度と属性の値が一致しません。
DB_DDCI_ERROR_UNJUST_AGENT_VARIABLE_SCALE_ERROR | エージェントの可変値の位取りと属性の値が一致しません。
DB_DDCI_ERROR_USERID_MISSMATCHER_ERROR | ユーザIDの指定が不正です。

付録

＜この付録の構成＞

付録A　セットアップ

付録B　用語解説

付録A　セットアップ

＜この節の構成＞

付録A.1　DABroker for C++の組み込み(UNIXの場合)

付録A.2　DABroker for C++の組み込み(Windowsの場合)

付録A.1　DABroker for C++の組み込み(UNIXの場合)

UNIXの場合のセットアップは，次の手順で実行してください。

日立PPインストーラを使って，DABroker for C++で提供するファイルをマシンに組み込む。

組み込まれたファイルの中から,セットアップコマンド（dabcppsetup）を実行する。

＜この項の構成＞

(1)　組み込み

(2)　DABroker for C++が提供するファイル

(3)　セットアップコマンドの実行

(4)　ロケールへの対応

(1)　組み込み

DABroker for C++の組み込みは,日立PPインストーラで実行します。

自マシン上の任意のディレクトリを管理ディレクトリとして設定できます。リモートファイルシステム上のディレクトリには設定できません。

(2)　DABroker for C++が提供するファイル

DABroker for C++の組み込みによってハードディスク上に作成されるファイル・ディレクトリを表A-1に示します。

表A-1　DABroker for C++が提供するファイル（UNIXの場合）

ディレクトリ
ファイル
権限
説明

/opt/DABroker
drwxrwxrwx
DABrokerディレクトリ

.HTC_8820.inf
-r--r--r--
Network Objectplaza用のPP固有情報ファイル

/opt/DABroker/bin
drwxr-xr-x
実行ファイル　ディレクトリ※1

dabcppsetup
-r-x------
DABroker for C++　セットアップコマンド

/opt/DABroker/lib
drwxrwxrwx
動的ライブラリ　ディレクトリ※1

libdabcpp10.sl(HP-UX(PA-RISC)版)
libdabcpp14.sl(HP-UX(PA-RISC)版)
libdabcpp20.sl(HP-UX(PA-RISC)版)
libdabcpp20st.sl(HP-UX(PA-RISC)版)
libdabcpp32.so(HP-UX(IPF)版)
libdabcpp32st.so(HP-UX(IPF)版)
libdabcpp20.a(AIX版)
libdabcpp20st.a(AIX版)
libdabcpp30.so(Red Hat Linux版)
libdabcpp40.so(Red Hat Linux版)
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
DABroker for C++ 共用ライブラリ※1
※1
※1
※1
※1
※1
※1
※1
※1
※1

/opt/DABroker/cpp
drwxr-xr-x
DABroker for C++ ディレクトリ※1

/opt/DABroker/cpp/include

drwxr-xr-x
DABroker for C++ ヘッダ　ディレクトリ※1

xxxxx.h
-r--r--r--
DABroker for C++ ヘッダ※1

/opt/DABroker/cpp/patch_cpp
drwxr-xr-x
DABroker for C++ パッチ履歴ディレクトリ
（バージョン02-10以降で提供されます）

/opt/DABroker/msg
drwxr-xr-x
メッセージ　ディレクトリ※1

/opt/DABroker/msg/C
drwxr-xr-x
Cコード　メッセージ　ディレクトリ※1

dabcppme.txt
dabdef_oracle7e.txt
dabdef_oracle7_xae.txt
dabdef_hirdbe.txt
dabdef_hirdb_xae.txt
dabdef_rdb1e.txt
dabdef_sqlke.txt
dabdef_xdmrde.txt
dabdef_xdmrd_dbse.txt
dabdef_xdmsd_dbse.txt
dabdef_sqlk_dbse.txt
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
※1
※1
※1
※1
※1
※1
※1
※1
※1
※1
※1

/opt/DABroker/msg/SJIS
drwxr-xr-x
sjisコード　メッセージ　ディレクトリ
(Red Hat Linux版では提供されません)※1

dabcppmj.txt
dabdef_oracle7j.txt
dabdef_oracle7_xaj.txt
dabdef_hirdbj.txt
dabdef_hirdb_xaj.txt
dabdef_rdb1j.txt
dabdef_sqlkj.txt
dabdef_xdmrdj.txt
dabdef_xdmrd_dbsj.txt
dabdef_xdmsd_dbsj.txt
dabdef_sqlk_dbsj.txt
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
-r--r--r--
※1
※1
※1
※1
※1
※1
※1
※1
※1
※1
※1

/etc/.hitachi
drwxr-xr-x
インストーラ管理ディレクトリ

/etc/.hitachi/delete/
drwxr-xr-x
削除ファイル　ディレクトリ

/etc/.hitachi/delete/delete_8820
-rw-------
削除ファイル

/etc/.hitachi/remove
drwxr-xr-x
削除時実行プログラム　ディレクトリ

/etc/.hitachi/remove/remove_8820
-rwx------
削除時実行プログラム

注※1

セットアップコマンド(dabcppsetup)を実行したときに，運用ディレクトリへ移されるディレクトリ，及びコマンドを示します。

/etc/.hitachi/delete/delete_8820ファイルについて
このファイルは，日立PPインストーラでDABroker for C++を削除する場合に，どのファイルを削除するかを記述します。このファイルには，次に示すファイルを記述します。

/opt/DABroker/.HTC_8820.inf
/opt/DABroker/bin/dabcppsetup
/opt/DABroker/lib/libdabcpp10.sl(HP-UX(PA-RISC)版)
/opt/DABroker/lib/libdabcpp14.sl(HP-UX(PA-RISC)版)
/opt/DABroker/lib/libdabcpp20.sl(HP-UX(PA-RISC)版)
/opt/DABroker/lib/libdabcpp20st.sl(HP-UX(PA-RISC)版)
/opt/DABroker/lib/libdabcpp32.so(HP-UX(IPF)版)
/opt/DABroker/lib/libdabcpp32st.so(HP-UX(IPF)版)
/opt/DABroker/lib/libdabcpp20.a(AIX版)
/opt/DABroker/lib/libdabcpp20st.a(AIX版)
/opt/DABroker/lib/libdabcpp30.so(Red Hat Linux版)
/opt/DABroker/lib/libdabcpp40.so(Red Hat Linux版)
/opt/DABroker/msg/C/dabcppme.txt
/opt/DABroker/msg/SJIS/dabcppmj.txt

上記以外のファイルは，/etc/.hitachi/remove/remove_8820ファイル（シェル）で削除します。

/etc/.hitachi/remove/remove_8820ファイルについて
このファイルは日立PPインストーラでDABroker for C++を削除する場合に起動されるファイル（シェル）です。
このファイル（シェル）では次のことが実行されます。

/opt/DABroker/binディレクトリ下にディレクトリ・ファイルがなければ/opt/DABroker/binディレクトリを削除します。

/opt/DABroker/libディレクトリ下にディレクトリ・ファイルがなければ/opt/DABroker/libディレクトリを削除します。

/opt/DABroker/cppディレクトリを削除します。

DABroker for COBOLが組み込まれていない場合は，/opt/DABroker/msg/Cディレクトリ下のファイル"dabdef_hirdbe.txt"，"dabdef_hirdb_xae.txt"，"dabdef_oracle7e.txt"，"dabdef_oracle7_ xae.txt"，"dabdef_xdmrde.txt"，"dabdef_rdb1e.txt"，"dabdef_sqlke.txt"，"dabdef_xdmrd_dbse.txt"，"dabdef_xdmsd_dbse.txt"，"dabdef_sqlk_dbse.txt"を削除します。

/opt/DABroker/msg/Cディレクトリ下にディレクトリ・ファイルがなければ/opt/DABroker/msg/C を削除します。

DABroker for COBOLが組み込まれていない場合は/opt/DABroker/msg/SJISディレクトリ下のファイル"dabdef_hirdbj.txt"，"dabdef_hirdb_xaj.txt"，"dabdef_oracle7j.txt"， "dabdef_ oracle7_xaj.txt"，"dabdef_xdmrdj.txt"，"dabdef_rdb1j.txt"，"dabdef_sqlkj.txt"，"dabdef_xdmrd_dbsj.txt"，"dabdef_xdmsd_dbsj.txt"，"dabdef_sqlk_dbsj.txt"を削除します。

/opt/DABroker/msg/SJISディレクトリ下にディレクトリ・ファイルがなければ/opt/DABroker/msg/SJIS ディレクトリを削除します。

/opt/DABroker/msgディレクトリ下にディレクトリ・ファイルがなければ/opt/DABroker/msgディレクトリを削除します。

/opt/DABrokerディレクトリ下にディレクトリ・ファイルがなければ/opt/DABrokerディレクトリを削除します。

(3)　セットアップコマンドの実行

dabcppsetup [-d]

インストールしたDABroker for C++を運用ディレクトリに移動します。

DABroker運用ディレクトリは，DABrokerのセットアップ（dabsetupコマンド）で指定した同じディレクトリです。

-d：DABroker for C++を運用ディレクトリから削除する場合に指定します。

注意

DABroker for C++の組み込み後に，DABroker本体のセットアップ(dabsetup)を実行した場合は，dabcppsetupを実行する必要はありません。

セットアップコマンド実行前にDABroker組み込みディレクトリ・ファイルをDABroker管理者ユーザ／グループに変更してください。

セットアップコマンドは，スーパユーザで実行してください。

運用ディレクトリに移動対象ファイルと同じ名称のファイルがあった場合，ファイルを上書きします。このとき，ファイルの上書きを禁止した属性などで，ファイルが上書きができない場合は，セットアップを終了します。また，ディレクトリ・ファイルはセットアップ前の状態に戻します。

-dオペランド指定時，テキストビジーなどの原因で削除に失敗することがあります。その場合はOSのrmコマンドで，残ったファイルを削除してください。

OSからDABroker for C++を完全に削除する場合は，日立PPインストーラで削除してください。

-dオペランド指定時，DABroker運用ディレクトリ下にあるDABroker for C++以外は削除されません。このため，必要に応じて，システム管理者がファイルを削除してください。

DABroker for C++をDABroker運用ディレクトリへの移動する場合，本セットアップコマンド実行前に，DABrokerのセットアップが終了している必要があります。

次に示す順序で作成された環境でdabsetupコマンドを実行すると，dabsetupコマンドの実行に失敗します。この場合，dabsetupコマンドを実行する前にDABroker for C++ を再度インストールしてから，再度dabsetupコマンドを実行してください。
1.　DABroker ，及びDABroker for C++ をインストールする。
2.　DABroker運用ディレクトリを，/opt/DABroker 以外に設定する。
3.　DABrokerだけを上書きインストールする。

(4)　ロケールへの対応

DABroker for C++では，実行環境のロケールに応じてメッセージや日付の表記を動的に切り替えることができます。次の環境情報に応じて切り替えてください。

ロケール情報の設定
環境変数LANGには，使用するユーザの環境に合わせて国際化情報のロケールを設定する必要があります。
各環境変数の詳細については，各OSのマニュアルを参照してください。

メッセージ情報の格納先

組み込み先ディレクトリ/msg/SJIS(日本語シフトJISコードメッセージ)

組み込み先ディレクトリ/msg/C(英語ASCIIコードメッセージ)
Red Hat Linux版では英語ASCIIだけを提供します。

付録A.2　DABroker for C++の組み込み(Windowsの場合)

＜この項の構成＞

(1)　インストール

(2)　DABroker for C++が提供するファイル

(3)　アンインストール

(4)　ロケールへの対応

(1)　インストール

Windowsの場合は，次の手順でインストールしてください。

DABroker for C++のインストールは，日立総合インストーラを使用して行います。

インストールを実行すると，ダイアログボックスが表示されますので，ガイダンスに従ってください。

Administratorグループのメンバであるユーザアカウントでログオンする。

日立総合インストーラを使用して，DABroker for C++のインストールを開始する。
（先にDABroker本体が組み込まれていること）

表示されるウィザードに従ってインストールする。

(2)　DABroker for C++が提供するファイル

DABroker for C++の組み込によってハードディスク上に作成されるファイル・フォルダを表A-2に示します。¥DABrokerはDABrokerのインストール先フォルダです。

表A-2　DABroker for C++が提供するファイル（Windowsの場合）

ディレクトリ
ファイル
権限
説明

¥DABroker
Administrator
DABroker本体組込みフォルダ

¥DABroker¥lib
－
動的ライブラリ　フォルダ

dabcpp10.dll
dabcpp10d.dll
dabcpp14.dll
dabcpp14d.dll
dabcpp20.dll
dabcpp20d.dll
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
DABroker for C++ 動的ライブラリ
DABroker for C++ 動的ライブラリ（デバッグ版）※
DABroker for C++ 動的ライブラリ
DABroker for C++ 動的ライブラリ（デバッグ版）※
DABroker for C++ 動的ライブラリ
DABroker for C++ 動的ライブラリ（デバッグ版）※

¥DABroker¥cpp¥lib
－
DABroker for C++ ライブラリフォルダ

dabcpp10.lib
dabcpp10d.lib
dabcpp14.lib
dabcpp14d.lib
dabcpp20.lib
dabcpp20d.lib
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
DABroker for C++ ライブラリ
DABroker for C++ ライブラリ（デバッグ版）※
DABroker for C++ ライブラリ
DABroker for C++ ライブラリ（デバッグ版）※
DABroker for C++ ライブラリ
DABroker for C++ ライブラリ（デバッグ版）※

¥DABroker¥cpp¥include
－
DABroker for C++ ヘッダ　フォルダ

xxxxx.h
Administrator
DABroker for C++ ヘッダ　

¥DABroker¥msg
－
メッセージ　フォルダ

¥DABroker¥msg¥C
－
Cコード　メッセージ　フォルダ

dabcppme.txt
dabdef_oracle7e.txt
dabdef_oracle7_xae.txt
dabdef_hirdbe.txt
dabdef_hirdb_xae.txt
dabdef_rdb1e.txt
dabdef_sqlke.txt
dabdef_xdmrde.txt
dabdef_sqlanye.txt
dabdef_sqlservere.txt
dabdef_adaptivee.txt
dabdef_xdmrd_dbse.txt
dabdef_xdmsd_dbse.txt
dabdef_sqlk_dbse.txt
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator

¥DABroker¥msg¥SJIS
－
sjisコード　メッセージ　フォルダ

dabcppmj.txt
dabdef_oracle7j.txt
dabdef_oracle7_xaj.txt
dabdef_hirdbj.txt
dabdef_hirdb_xaj.txt
dabdef_rdb1j.txt
dabdef_sqlkj.txt
dabdef_xdmrdj.txt
dabdef_sqlanyj.txt
dabdef_sqlserverj.txt
dabdef_adaptivej.txt
dabdef_xdmrd_dbsj.txt
dabdef_xdmsd_dbsj.txt
dabdef_sqlk_dbsj.txt
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator
Administrator

¥DABroker¥cpp¥patch_cpp
－
DABroker for C++ パッチ履歴フォルダ

PATCHLOG.TXT
Administrator
パッチ履歴ファイル

注※ UAPのデバック時に使用します。

(3)　アンインストール

アンインストールは，コントロールパネルの「アプリケーションの追加と削除」－「インストールと削除」で行います。DABroker for C++を指定し，表示されるウィザードに従ってアンインストールしてください。

DABroker本体も一緒に削除する場合は，先にDABroker for C++をアンインストールしてください。

(4)　ロケールへの対応

DABroker for C++では，実行環境のロケールに応じてメッセージや日付の表記を動的に切り替えることを可能とします。次のロケール情報に応じて切り替えてください。

ロケール情報の設定
コントロールパネルの「地域」の設定に従います。

メッセージ情報の格納先

組み込み先フォルダ¥msg¥SJIS(日本語シフトJISコードメッセージ)

組み込み先フォルダ¥msg¥C(英語ASCIIコードメッセージ)

付録B　用語解説

（記号）

?パラメタ

SQL文,又はストアドプロシジャに対して，実行時にアプリケーションからパラメタ値を渡せます。SQLの文字列の中で，アプリケーションから値を渡される個所に「?」を指定しておきます。実行すると「?」に対してパラメタを渡せます。

この「?」を?パラメタといいます。

ORACLEのデータベースでは，「プレースホルダ」のことを指します。

（英字）

BLOB(Binaly Large Object)

binaryデータの中でも，フィールド値が大きい（大容量のデータを扱えるフィールドの属性を持つ）データ型のこと。

このマニュアルでは，次のデータ型も同じ扱いになります。

HiRDB：BINARY

ORACLE：LONGRAW

SQL Anywhere：LONG BINARY,IMAGE

Adaptive Server Anywhere：LONG BINARY,IMAGE,java serialization,java.lang.Object

SQL Server：IMAGE

一般には，画像，音声などのマルチメディアデータを扱うデータ型です。

Database Connection Server

Windows上から，メインフレーム系データベースにアクセスできるシステムのこと。別途購入が必要です。

DBMS(Databese Management System)

データベース管理システムのこと。

データベースを効率的に管理・利用するためのプログラムです。

NULL値

データベースでいうNULLは不定の値のことで，ほかのどの値とも同じではないものを指します。NULLを認めないというのは，データの入力が必須であることを意味しています。

RDA Link for Gateway

Windows，又はHP-UX上から，メインフレーム系データベースにアクセスできるシステムのこと。別途購入が必要です。

ResultSet

検索した結果を入れる仮想の表のこと。検索結果は，カーソルでレコードを特定し，Getxxxメソッドでフィールドから取り出します。

TPBroker

DABrokerでは，TPBrokerで行う2相コミットを利用して，トランザクションを実現します。TPBrokerを利用することで，DABrokerのトランザクションと，グローバルトランザクションの同期がとれるようになります。

XAインタフェース

X/Open XAインタフェースは，分散トランザクション処理システムでのトランザクションマネージャとリソースマネージャの接続インタフェースを規定したX/Openの標準仕様です。

XAインタフェースを使って，リソースマネージャのトランザクション処理をトランザクションマネージャで制御できます。

実際には，TPBrokerとDBMS間のインタフェースと考えることができ，マルチスレッド対応のXAインタフェースを利用することで，DABroker，TPBrokerを使って，複数DBMSにまたがるトランザクション制御ができるようになります。

（ア行）

オブジェクト

クラスを基に生成された実態であり，new演算子などで生成されます。

インスタンスとも呼ばれます。

（カ行）

カレントレコード

カーソルの位置付いているレコードのこと。カレントレコードが操作の対象になります。

キャスト

一時的に，指定したデータ型に変換すること。

クラス

あるデータ型(プロパティ)とそれに対する処理(メソッド)を一まとまりにした型の定義です。

コミット

トランザクションを終了し，そのトランザクションのデータベースに対するすべての操作を有効に（保存）すること。

（サ行）

自動コミット

アプリケーションからトランザクション制御を指定しなかった場合，SQLを実行するごとに（自動的に）コミットします。これを自動コミットと呼んでいます。

ストアドプロシジャ

ストアドプロシジャとは，SQLで記述した処理手続きをデータベースに登録したものです。

ストアドプロシジャは，CREATE PROCEDUREで手続きとして定義し，実行時にアプリケーションから，登録されている処理を呼び出します。

ストアドプロシジャを使うと，SQL文を1行ずつ実行するのと比べて，次のようなメリットがあります。

SQL文を実行すると，1行ごとにアプリケーションとDBMS間で処理の流れが発生します。しかし，ストアドプロシジャを利用すれば，一度にまとまった単位のSQLを実行できるため，処理速度の向上が望めます。

一つストアドプロシジャを作成しておけば，複数のアプリケーションから使用できるため，アプリケーションの作成効率も向上できます。

手続き中のSQL文はコンパイルされた形式（SQLオブジェクト）でサーバ側に登録されているため，SQL解析のオーバヘッドも削減できます。

（タ行）

抽象データ型データ

SQLのCREATE TYPEで定義するデータ型を示します。データ型中に属性定義，ルーチンなどをユーザが任意に定義できます。

データ操作

データベースに対して，データの追加，更新，削除を行うこと。

デッドロック

複数のトランザクションが複数の資源を競合し合い，お互いに相手のトランザクションによる資源の占有解除を待っている状態です。

同期処理

DABrokerはアプリケーションからSQL文の処理要求を受け付けると，アプリケーションに制御を戻さないまま，DBMSに対してSQL文の処理を要求します。アプリケーションに制御が戻るのは，SQL文の処理が完了した時点です。

トランザクション処理

論理的な仕事の単位で，一連のデータベースの操作などの集まりのこと。また，回復や排他制御の基本単位でもあります。

（ナ行）

2相コミット

トランザクションが二つ以上に分散された環境で，同期点での処理をプリペア処理（更新準備）とコミット処理（更新処理）という2段階に分けて行う方法です。

2相コミットではトランザクション処理中に障害が発生した場合でも，すべてのリソースオブジェクトを矛盾なく自動的にロールバックできます。

DABrokerから2相コミットを実行するためには，TPBroker(トランザクションマネージャ)が必要です。

2相コミットは2フェーズコミットとも呼ばれています。

（ハ行）

排他エラー

アプリケーションがデータベースにアクセスしようとしたときに，アクセス対象のレコードが，他のアプリケーションによってロックされている状態を指します。

非同期処理

アプリケーションからSQL文の処理要求を受け取ると，制御をいったんアプリケーションに戻し，同時にDBMSに対してSQL文の処理を要求します。したがって，アプリケーションでは，SQL文の処理結果が戻る前に，次の処理を行うことができます。

このため，複数のデータベースアクセスを並行して行えます。

フィールド

このマニュアルでは，列やカラムのことを指します。これに対して，行やローのことをレコードと呼んでいます。ただし，ストアドプロシジャの説明では，フィールドのことをパラメタと表記しています。

フィールドは，フィールド名，又は先頭フィールドを1としたフィールド番号によって特定できます。

プロパティ

クラスのメンバとして宣言された変数であり，C++ではメンバ変数と呼ばれるものを指します。

（マ行）

マルチスレッド

複数の独立したプログラム部（スレッド）を同時に実行すること。

メソッド

クラスのメンバとして宣言された関数であり，C++ではメンバ関数と呼ばれるものを指します。

（ラ行）

レコード

このマニュアルでは，行やローのことを指します。これに対して，列やカラムのことをフィールドと呼んでいます。

レコードは，レコード名の指定，レコードへのカーソルの位置付け，又は先頭レコードを1としたレコード番号の指定によって特定できます。

ロック

アプリケーションから，検索レコードのロックと，テーブルのロックを掛けられます。検索レコードのロックは，クラスライブラリのメソッドで制御できます。テーブルのロックはSQL文を使います。

ロールバック

トランザクションを終了し，そのトランザクションによるデータベースに対するすべての操作を破棄し，データベースをトランザクション開始時の状態まで戻す（回復する）こと。

索引

[記号]
[数字]
[Ａ][Ｂ][Ｃ][Ｄ][Ｅ][Ｆ][Ｇ][Ｈ][Ｉ][Ｋ][Ｎ][Ｏ][Ｐ][Ｑ][Ｒ][Ｓ][Ｔ][Ｕ][Ｖ][Ｗ][Ｘ]
[ア行][カ行][サ行][タ行][ハ行][マ行][ラ行]

(記号)

?パラメタ

?パラメタに文字列を指定する場合の注意

~DBRArrayDataConstPtrデストラクタ〔DBRArrayDataConstPtrクラス〕

~DBRArrayDataPtrデストラクタ〔DBRArrayDataPtrクラス〕

(数字)

2相コミット

(英字)

(Ａ)

Absoluteメソッド〔DBRResultSetクラス〕

Absoluteメソッド〔DBResultSetクラス〕

ACE3

AIXの場合のビルド方法

AP

AP

ArraySizeメソッド〔classListColumnsクラス〕

(Ｂ)

BeginTransメソッド〔DBTransactionクラス〕

BLOB

BLOB型データの取得方法についての制限

Bottomメソッド〔DBRResultSetクラス〕

Bottomメソッド〔DBResultSetクラス〕

(Ｃ)

C++クラスライブラリのエラー情報

C++クラスライブラリのオブジェクト階層

C++クラスライブラリのクラスの一覧

classListColumnsクラスの詳細

classListPrimaryKeysクラスの詳細

classListProcedureColumnsクラスの詳細

classListProceduresクラスの詳細

classListTablesクラスの詳細

Closeメソッド〔DBRDatabaseクラス〕

Closeメソッド〔DBRResultSetクラス〕

Closeメソッド〔DBConnectionクラス〕

ColumnNameメソッド〔classListColumnsクラス〕

ColumnNameメソッド〔classListProcedureColumnsクラス〕

ColumnNameメソッド〔classListPrimaryKeysクラス〕

ColumnTypeメソッド〔classListProcedureColumnsクラス〕

Commit

Commitメソッド〔DBRDatabaseクラス〕

Commitメソッド〔DBTransactionクラス〕

Connectメソッド〔DBRDatabaseクラス〕

Connectメソッド〔DBDriverクラス〕

Connectメソッド〔DBConnectionクラス〕

Countプロパティ〔classListTablesクラス〕

Countプロパティ〔classListColumnsクラス〕

Countプロパティ〔classListProceduresクラス〕

Countプロパティ〔classListProcedureColumnsクラス〕

Countプロパティ〔classListPrimaryKeysクラス〕

Countプロパティ〔DBSQLCAクラス〕

CreateArrayDataメソッド〔DBRArrayDataFactoryクラス〕

CreateCallableStatementメソッド〔DBConnectionクラス〕

CreatePreparedStatementメソッド〔DBConnectionクラス〕

CreateStatementメソッド〔DBConnectionクラス〕

Createメソッド〔DBRArrayDataクラス〕

CTypeメソッド〔classListColumnsクラス〕

CTypeメソッド〔classListProcedureColumnsクラス〕

(Ｄ)

dabcppsetup

DABroker for C++の概要

DABroker for C++の役割・位置付け

Database Connection Server

DB_ERROR_DAB_ILLEGAL_VALUEでの詳細コード

DBCallableStatementクラスの詳細

DBConnectionクラスの詳細

DBDatabaseMetaDataクラスの詳細

DBDriverManagerクラスの詳細

DBDriverクラスの詳細

DBMS

DBMS非依存エラーコード

DBPreparedStatementクラスの詳細

DBR_BINARY型を使用したVARCHARデータの取得方法

DBRArrayDataConstPtrクラス

DBRArrayDataConstPtrコンストラクタ〔DBRArrayDataConstPtrクラス〕

DBRArrayDataFactoryクラス

DBRArrayDataPtrクラス

DBRArrayDataPtrコンストラクタ〔DBRArrayDataPtrクラス〕

DBRArrayDataクラス

DBRDatabaseクラスの詳細

DBRDatabaseコンストラクタ〔DBRDatabaseクラス〕

DBResultSetMetaDataクラスの詳細

DBResultSetクラスの詳細

DBRResultSet仮想関数の利用〔簡易版クラス〕

DBRResultSetクラスの詳細

DBRResultSetコンストラクタ〔DBRResultSetクラス〕

DBSQLCAクラスの詳細

DBStatementクラスの詳細

DBTransactionクラスの詳細

DBTypeメソッド〔classListColumnsクラス〕

DBTypeメソッド〔classListProcedureColumnsクラス〕

Defineメソッド〔classListProceduresクラス〕

Deleteメソッド〔DBRResultSetクラス〕

Deleteメソッド〔DBResultSetクラス〕

Deleteメソッド〔DBSQLCAクラス〕

Driverメソッド〔DBDriverManagerクラス〕

DTPモデル

DTPモデル

(Ｅ)

e_SQLCODEプロパティ〔DBSQLCAクラス〕

e_SQLCOUNTプロパティ〔DBSQLCAクラス〕

e_SQLERRORプロパティ〔DBSQLCAクラス〕

e_SQLSTATEプロパティ〔DBSQLCAクラス〕

e_USERCODEプロパティ〔DBSQLCAクラス〕

e_USERERRORプロパティ〔DBSQLCAクラス〕

Editメソッド〔DBRResultSetクラス〕

Editメソッド〔DBResultSetクラス〕

EraseTransactionメソッド〔DBConnectionクラス〕

ErrorMessageプロパティ〔DBSQLCAクラス〕

ExecuteDirectメソッド〔DBRDatabaseクラス〕

ExecuteDirectメソッド〔DBConnectionクラス〕

ExecuteUpdateメソッド〔DBPreparedStatementクラス〕

Executeメソッド〔DBRResultSetクラス〕

Executeメソッド〔DBStatementクラス〕

Executeメソッド〔DBPreparedStatementクラス〕

Executeメソッド〔DBCallableStatementクラス〕

(Ｆ)

FindColumnメソッド〔DBResultSetクラス〕

(Ｇ)

GetArrayCountメソッド〔DBRArrayDataクラス〕

GetArrayDataFactoryメソッド〔DBRDatabaseクラス〕

GetArrayDataFactoryメソッド〔DBConnectionクラス〕

GetArraySizeメソッド〔DBRResultSetクラス〕

GetArraySizeメソッド〔DBResultSetMetaDataクラス〕

GetColumnCountメソッド〔DBResultSetMetaDataクラス〕

GetColumnCTypeメソッド〔DBResultSetMetaDataクラス〕

GetColumnDBTypeメソッド〔DBResultSetMetaDataクラス〕

GetColumnNameメソッド〔DBResultSetMetaDataクラス〕

GetColumnPrecisionメソッド〔DBResultSetMetaDataクラス〕

GetColumnScaleメソッド〔DBResultSetMetaDataクラス〕

GetColumnsメソッド〔DBDatabaseMetaDataクラス〕

GetColumnTypeメソッド〔DBResultSetMetaDataクラス〕

GetCurrentOfResultSetメソッド〔DBRResultSetクラス〕

GetCurrentOfResultSetメソッド〔DBResultSetクラス〕

GetCurrentメソッド〔DBRResultSetクラス〕

GetCurrentメソッド〔DBResultSetクラス〕

GetDataTypeメソッド〔DBRArrayDataクラス〕

GetDataメソッド〔DBRArrayDataクラス〕

GetDriverTypeメソッド〔DBDriverクラス〕

GetErrorMessageメソッド〔DBSQLCAクラス〕

GetErrorStatusメソッド〔DBRDatabaseクラス〕

GetErrorStatusメソッド〔DBRResultSetクラス〕

GetErrorStatusメソッド〔DBDriverクラス〕

GetErrorStatusメソッド〔DBConnectionクラス〕

GetErrorStatusメソッド〔DBStatementクラス〕

GetErrorStatusメソッド〔DBResultSetクラス〕

GetErrorStatusメソッド〔DBPreparedStatementクラス〕

GetErrorStatusメソッド〔DBCallableStatementクラス〕

GetErrorStatusメソッド〔DBDatabaseMetaDataクラス〕

GetFieldCountメソッド〔DBRResultSetクラス〕

GetFieldCountメソッド〔DBStatementクラス〕

GetFieldCountメソッド〔DBPreparedStatementクラス〕

GetFieldCTypeメソッド〔DBRResultSetクラス〕

GetFieldDBTypeメソッド〔DBRResultSetクラス〕

GetFieldNameメソッド〔DBRResultSetクラス〕

GetFieldPrecisionメソッド〔DBRResultSetクラス〕

GetFieldScaleメソッド〔DBRResultSetクラス〕

GetFieldTypeメソッド〔DBRResultSetクラス〕

GetFieldメソッド〔DBRResultSetクラス〕

GetFieldメソッド〔DBResultSetクラス〕

GetMaxFieldSizeメソッド〔DBStatementクラス〕

GetMaxFieldSizeメソッド〔DBPreparedStatementクラス〕

GetMaxFieldSizeメソッド〔DBCallableStatementクラス〕

GetMaxRowsメソッド〔DBRResultSetクラス〕

GetMaxRowsメソッド〔DBStatementクラス〕

GetMaxRowsメソッド〔DBPreparedStatementクラス〕

GetMaxRowsメソッド〔DBCallableStatementクラス〕

GetMetaDataメソッド〔DBConnectionクラス〕

GetMetaDataメソッド〔DBResultSetクラス〕

GetNameメソッド〔DBConnectionクラス〕

GetNameメソッド〔DBStatementクラス〕

GetNameメソッド〔DBPreparedStatementクラス〕

GetNameメソッド〔DBCallableStatementクラス〕

GetNameメソッド〔DBTransactionクラス〕

GetOutputParamsメソッド〔DBCallableStatementクラス〕

GetParamCountメソッド〔DBRResultSetクラス〕

GetParamCountメソッド〔DBPreparedStatementクラス〕

GetParamCountメソッド〔DBCallableStatementクラス〕

GetParamメソッド〔DBRResultSetクラス〕

GetParamメソッド〔DBPreparedStatementクラス〕

GetParamメソッド〔DBCallableStatementクラス〕

GetPrecisionメソッド〔DBRArrayDataクラス〕

GetPrimaryKeysメソッド〔DBDatabaseMetaDataクラス〕

GetProcedureColumnsメソッド〔DBDatabaseMetaDataクラス〕

GetProceduresメソッド〔DBDatabaseMetaDataクラス〕

GetResultSetMetaDataメソッド〔DBStatementクラス〕

GetResultSetMetaDataメソッド〔DBPreparedStatementクラス〕

GetResultSetメソッド〔DBStatementクラス〕

GetResultSetメソッド〔DBPreparedStatementクラス〕

GetResultSetメソッド〔DBCallableStatementクラス〕

GetRetCodeメソッド〔DBSQLCAクラス〕

GetRowCountメソッド〔DBRResultSetクラス〕

GetRowCountメソッド〔DBResultSetクラス〕

GetScaleメソッド〔DBRArrayDataクラス〕

GetSQLCODEメソッド〔DBSQLCAクラス〕

GetSQLCOUNTメソッド〔DBSQLCAクラス〕

GetSQLERRORメソッド〔DBSQLCAクラス〕

GetSQLSTATEメソッド〔DBSQLCAクラス〕

GetTablesメソッド〔DBDatabaseMetaDataクラス〕

GetUpdateRowsメソッド〔DBStatementクラス〕

GetUpdateRowsメソッド〔DBPreparedStatementクラス〕

GetUSERCODEメソッド〔DBSQLCAクラス〕

GetUSERERRORメソッド〔DBSQLCAクラス〕

(Ｈ)

HiRDB〔データ型の対応〕

HP-UXの場合のビルド方法

(Ｉ)

InExecuteメソッド〔DBRResultSetクラス〕

InExecuteメソッド〔DBStatementクラス〕

InExecuteメソッド〔DBResultSetクラス〕

InExecuteメソッド〔DBPreparedStatementクラス〕

InExecuteメソッド〔DBCallableStatementクラス〕

InExecuteメソッド〔DBDatabaseMetaDataクラス〕

InitializeMessageメソッド〔DBDriverManagerクラス〕

InTransactメソッド〔DBTransactionクラス〕

InWaitForDataSourceメソッド〔DBRDatabaseクラス〕

InWaitForDataSourceメソッド〔DBConnectionクラス〕

IsClosedメソッド〔DBRDatabaseクラス〕

IsClosedメソッド〔DBConnectionクラス〕

IsCompletedメソッド〔DBCallableStatementクラス〕

IsEOFメソッド〔DBRResultSetクラス〕

IsEOFメソッド〔DBResultSetクラス〕

IsFieldNullメソッド〔DBRResultSetクラス〕

IsNullメソッド〔DBResultSetクラス〕

IsNullメソッド〔DBPreparedStatementクラス〕

IsNullメソッド〔DBCallableStatementクラス〕

IsNullメソッド〔DBRArrayDataPtrクラス〕

IsNullメソッド〔DBRArrayDataConstPtrクラス〕

IsParamNullメソッド〔DBRResultSetクラス〕

(Ｋ)

KeyNameメソッド〔classListPrimaryKeysクラス〕

(Ｎ)

Nextメソッド〔DBRResultSetクラス〕

Nextメソッド〔DBResultSetクラス〕

Nullableメソッド〔classListColumnsクラス〕

Nullableメソッド〔classListProcedureColumnsクラス〕

NULL値

(Ｏ)

OnBeforeRefreshメソッド〔DBRResultSetクラス〕

OnEndRecordメソッド〔DBRResultSetクラス〕

OnMoveRecordメソッド〔DBRResultSetクラス〕

OpenTP1

Openメソッド〔DBRResultSetクラス〕

operator-＞〔DBRArrayDataPtrクラス〕

operator-＞〔DBRArrayDataConstPtrクラス〕

operator=〔DBRArrayDataPtrクラス〕

operator=〔DBRArrayDataConstPtrクラス〕

operator*〔DBRArrayDataPtrクラス〕

operator*〔DBRArrayDataConstPtrクラス〕

ORACLE〔データ型の対応〕

OTS機能

OwnerNameメソッド〔classListTablesクラス〕

OwnerNameメソッド〔classListProceduresクラス〕

OwnerNameメソッド〔classListPrimaryKeysクラス〕

(Ｐ)

PageNextメソッド〔DBRResultSetクラス〕

PageNextメソッド〔DBResultSetクラス〕

Parentメソッド〔DBDriverクラス〕

Parentメソッド〔DBConnectionクラス〕

Parentメソッド〔DBStatementクラス〕

Parentメソッド〔DBResultSetクラス〕

Parentメソッド〔DBResultSetMetaDataクラス〕

Parentメソッド〔DBPreparedStatementクラス〕

Parentメソッド〔DBCallableStatementクラス〕

Parentメソッド〔DBDatabaseMetaDataクラス〕

Parentメソッド〔DBTransactionクラス〕

Precisionメソッド〔classListColumnsクラス〕

Precisionメソッド〔classListProcedureColumnsクラス〕

Previousメソッド〔DBRResultSetクラス〕

Previousメソッド〔DBResultSetクラス〕

ProcedureNameメソッド〔classListProceduresクラス〕

(Ｑ)

Qualifierメソッド〔classListTablesクラス〕

Qualifierメソッド〔classListProceduresクラス〕

(Ｒ)

RDA Link for Gateway

Red Hat Linuxの場合のビルド方法

Refreshメソッド〔DBRResultSetクラス〕

Refreshメソッド〔DBResultSetクラス〕

RegisterTransactionsメソッド〔DBConnectionクラス〕

Relativeメソッド〔DBRResultSetクラス〕

Relativeメソッド〔DBResultSetクラス〕

Remarksメソッド〔classListTablesクラス〕

Remarksメソッド〔classListColumnsクラス〕

Remarksメソッド〔classListProceduresクラス〕

Remarksメソッド〔classListProcedureColumnsクラス〕

RemoveCallableStatementメソッド〔DBConnectionクラス〕

RemoveConnectionメソッド〔DBDriverクラス〕

RemoveDriverメソッド〔DBDriverManagerクラス〕

RemovePreparedStatementメソッド〔DBConnectionクラス〕

RemoveResultSetメソッド〔DBStatementクラス〕

RemoveResultSetメソッド〔DBPreparedStatementクラス〕

RemoveResultSetメソッド〔DBCallableStatementクラス〕

RemoveStatementメソッド〔DBConnectionクラス〕

RemoveTransactionメソッド〔DBDriverManagerクラス〕

Removeメソッド〔DBDriverクラス〕

Removeメソッド〔DBConnectionクラス〕

Removeメソッド〔DBStatementクラス〕

Removeメソッド〔DBResultSetクラス〕

Removeメソッド〔DBPreparedStatementクラス〕

Removeメソッド〔DBCallableStatementクラス〕

Removeメソッド〔DBTransactionクラス〕

ResultSet

ResultSet

Resumeメソッド〔DBCallableStatementクラス〕

RetCodeプロパティ〔DBSQLCAクラス〕

RM

RM

Rollback

Rollbackメソッド〔DBRDatabaseクラス〕

Rollbackメソッド〔DBTransactionクラス〕

(Ｓ)

Scaleメソッド〔classListColumnsクラス〕

Scaleメソッド〔classListProcedureColumnsクラス〕

Sequenceメソッド〔classListPrimaryKeysクラス〕

SetAutoCommitメソッド〔DBTransactionクラス〕

SetDataメソッド〔DBRArrayDataクラス〕

SetFieldNullメソッド〔DBRResultSetクラス〕

SetFieldメソッド〔DBRResultSetクラス〕

SetFieldメソッド〔DBResultSetクラス〕

SetInsertRowsメソッド〔DBPreparedStatementクラス〕

SetMaxFieldSizeメソッド〔DBStatementクラス〕

SetMaxFieldSizeメソッド〔DBPreparedStatementクラス〕

SetMaxFieldSizeメソッド〔DBCallableStatementクラス〕

SetMaxRowsメソッド〔DBRResultSetクラス〕

SetMaxRowsメソッド〔DBStatementクラス〕

SetMaxRowsメソッド〔DBPreparedStatementクラス〕

SetMaxRowsメソッド〔DBCallableStatementクラス〕

SetNullメソッド〔DBResultSetクラス〕

SetNullメソッド〔DBPreparedStatementクラス〕

SetNullメソッド〔DBCallableStatementクラス〕

SetNullメソッド〔DBRArrayDataクラス〕

SetParamNullメソッド〔DBRResultSetクラス〕

SetParamTypeメソッド〔DBRResultSetクラス〕

SetParamTypeメソッド〔DBPreparedStatementクラス〕

SetParamメソッド〔DBRResultSetクラス〕

SetParamメソッド〔DBPreparedStatementクラス〕

SetParamメソッド〔DBCallableStatementクラス〕

SetProcedureメソッド〔DBCallableStatementクラス〕

SetResultSetTypeメソッド〔DBStatementクラス〕

SetResultSetTypeメソッド〔DBPreparedStatementクラス〕

SetResultSetTypeメソッド〔DBCallableStatementクラス〕

signal使用時の注意

SQL/K〔データ型の対応〕

SQL Anywhere〔データ型の対応〕

SQL Server〔データ型の対応〕

(Ｔ)

TableNameメソッド〔classListTablesクラス〕

TableNameメソッド〔classListPrimaryKeysクラス〕

TM

TM

Topメソッド〔DBRResultSetクラス〕

Topメソッド〔DBResultSetクラス〕

TPBroker

TPBroker for C++

Transactionメソッド〔DBDriverManagerクラス〕

Transactionメソッド〔DBConnectionクラス〕

Typeメソッド〔classListTablesクラス〕

Typeメソッド〔classListColumnsクラス〕

Typeメソッド〔classListProcedureColumnsクラス〕

(Ｕ)

Uniquenessメソッド〔classListColumnsクラス〕

Updateメソッド〔DBRResultSetクラス〕

Updateメソッド〔DBResultSetクラス〕

(Ｖ)

VARCHAR型のデータ

Visual C++ 6.0以降使用時の注意

(Ｗ)

WaitForDataSourceメソッド〔DBRDatabaseクラス〕

WaitForDataSourceメソッド〔DBRResultSetクラス〕

WaitForDataSourceメソッド〔DBConnectionクラス〕

WaitForDataSourceメソッド〔DBStatementクラス〕

WaitForDataSourceメソッド〔DBResultSetクラス〕

WaitForDataSourceメソッド〔DBPreparedStatementクラス〕

WaitForDataSourceメソッド〔DBCallableStatementクラス〕

Windowsの場合のビルド方法（Visual C++ .NET 2003，Visual Studioの場合）

Windowsの場合のビルド方法（Visual C++ 5.0，Visual C++ 6.0の場合）

(Ｘ)

XAインタフェース

XDM/SD接続機能

XDM/SDへのアクセス

(ア行)

(あ)

アクセスできるDBMS

アプリケーション作成上の留意点

アプリケーションの作成

アプリケーションプログラム

アプリケーションプログラム

アンインストール

暗黙のsetlocale関数の実行

(い)

インストール

(え)

エラー情報

エラー情報の参照

エラー処理

エラー処理クラス

(お)

オブジェクト

オブジェクトの生成と削除

(カ行)

(か)

カレントレコード

簡易版関数詳細

簡易版クラスの概要

簡易版クラスのデータベースアクセス

(き)

キャスト

共通関数詳細

(く)

組み込み(UNIXの場合)

組み込み(Windowsの場合)

クラス

クラスライブラリで扱うデータ型と変換規則

繰り返し列

繰り返し列へのアクセス〔簡易版クラス〕

繰り返し列へのアクセス

繰り返し列へのアクセス

グローバルトランザクション

(け)

検索レコードの参照〔簡易版クラス〕

検索レコードの参照〔詳細版クラス〕

検索レコードの参照〔簡易版クラス〕

検索レコードの参照〔詳細版クラス〕

(こ)

コミット

(サ行)

(し)

自動コミット

詳細版関数詳細

詳細版クラスのデータベースアクセス

詳細版で利用できるクラスの概要

(す)

ストアドプロシジャ

ストアドプロシジャの概要

ストアドプロシジャの利用

ストアドプロシジャの利用〔詳細版クラス〕

(せ)

接続処理の複数スレッド同時実行

セットアップ

セットアップコマンドの実行

(タ行)

(ち)

抽象データ型

抽象データ型データ

(て)

提供C++クラス

データ型

データ型の対応

データ型変換規則

データ操作

データベースアクセスクラス

データベースアクセスの基礎知識

データベースとの接続〔簡易版クラス〕

データベースとの接続〔詳細版クラス〕

データベースとの切断〔簡易版クラス〕

データベースとの切断〔詳細版クラス〕

データベースとの切断

データベースへの接続

データベースへの接続と切断

データベースへの接続と切断

テーブル定義情報の参照

テーブルの定義〔簡易版クラス〕

テーブルの定義

デッドロック

デッドロック

(と)

同期・非同期処理

同期・非同期処理

同期処理

同期処理

特長

トランザクション処理

トランザクションと排他制御

トランザクションと排他制御

トランザクションマネジャ

トランザクションマネジャ

トレースファイルの見方

トレースログ採取のための設定

(ハ行)

(は)

排他エラー

排他エラー

排他制御

排他制御〔XDM/SD〕

(ひ)

非同期処理

非同期処理

ビルド方法

(ふ)

フィールド

プロパティ

文法の説明順序

文法の説明順序

(へ)

ヘッダーファイル

(マ行)

(ま)

マルチスレッド

(め)

メインフレーム系データベース〔データ型の対応〕

メソッド

(ラ行)

(り)

リソースマネジャ

リソースマネジャ

(れ)

レコード

レコードの検索〔簡易版クラス〕

レコードの検索〔詳細版クラス〕

レコードの検索〔簡易版クラス〕

レコードの検索〔詳細版クラス〕

レコードの検索〔XDM/SD〕

レコードの更新〔簡易版クラス〕

レコードの更新〔詳細版クラス〕

レコードの更新〔簡易版クラス〕

レコードの更新〔詳細版クラス〕

レコードの更新〔XDM/SD〕

レコードの削除〔簡易版クラス〕

レコードの削除〔詳細版クラス〕

レコードの削除〔簡易版クラス〕

レコードの削除〔詳細版クラス〕

レコードの削除〔XDM/SD〕

レコードの追加〔簡易版クラス〕

レコードの追加〔詳細版クラス〕

レコードの追加〔簡易版クラス〕

レコードの追加〔詳細版クラス〕

レコードの追加〔XDM/SD〕

(ろ)

ロールバック

ロック

■ 商標類

Adaptive Serverは，Sybase, Inc.の商標です。
CORBAは，Object Management Groupが提唱する分散処理環境アーキテクチャの名称です。
HP-UXは，Hewlett-Packard Development Company, L.P.のオペレーティングシステムの名称です。
IBM，AIXは，世界の多くの国で登録されたInternational Business Machines Corporationの商標です。
IBM，VisualAgeは，世界の多くの国で登録されたInternational Business Machines Corporationの商標です。
Itaniumは，アメリカ合衆国およびその他の国におけるIntel Corporationの商標です。
Linuxは，Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
Microsoftは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
ODBCは，米国Microsoft Corporationが提唱するデータベースアクセス機構です。
OracleとJavaは，Oracle Corporation 及びその子会社，関連会社の米国及びその他の国における登録商標です。
Pentiumは，アメリカ合衆国およびその他の国におけるIntel Corporationの商標です。
Red Hatは，米国およびその他の国でRed Hat, Inc. の登録商標もしくは商標です。
Sybase SQL Anywhereは，Sybase，Inc.の商標です。
Visual C++は，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windowsは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Serverは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
X/Openは，The Open Groupの英国ならびに他の国における登録商標です。
その他記載の会社名，製品名は，それぞれの会社の商標もしくは登録商標です。