ページの本文へ

Hitachi

ソフトウェア

Q1. 現在、P-F2463-21541(Windows版)のDABroker for C++を使用していますが、P-F2463-22541(Windows版)のDABroker for C++へ移行する場合の注意事項を教えてください。

P-F2463-22541は、P-F2463-21541のバージョンアップ版で、互換性があります。ただし、前提となるDABrokerもP-2463-2254へアップしていますので、こちらもアップしてください。

Q2. 現在、P-F1B63-21511(HP-UX版)のDABroker for C++を使用していますが、P-F1B63-22511(HP-UX版)あるいはP-F1B63-23511(HP-UX版)へ移行する場合の注意事項を教えてください。

P-F1B63-21511は、HP-UX 10.20のみで使用可能です。HP-UX 11.0で使用する場合は、 P-F1B63-22511またはP-F1B63-23511をご利用ください。

Q3. 現在、P-F1B63-22511(HP-UX版)のDABroker for C++を使用していますが、P-F1B63-23511(HP-UX版)へ移行する場合の注意事項を教えてください。

P-F1B63-23511は、P-F1B63-22511のバージョンアップ版で、互換性があります。 ただし、前提となるDABrokerもP-1B63-2351へアップしていますので、こちらもアップしてください。

Q4. 現在、P-F9D63-21511(Solaris版)のDABrokerを使用していますが、P-F9D63-22511(Solaris版)へ移行する場合の注意事項を教えてください。

P-F9D63-22511は、P-F9D63-21511のバージョンアップ版で、互換性があります。 ただし、前提となるDABrokerもP-9D63-2251へアップしていますので、こちらもアップしてください。

Q5. SQLの実行にはいくつか方法がありますが、どの方法を使えばよいでしょうか?

SQLの実行内容に応じて選択してください。以下、SQLの実行方法ごとに、メリット・デメリットを紹介します。

(1)DBConnectionクラスのExecuteDirectメソッド
定義系SQLや更新系SQLを実行するときに使用します。
  • メリット
    • DBStatementオブジェクトやDBPreparedStatementオブジェクトを作る必要がない。
    • PREPAREやDESCRIBEを実行しないので処理が速い。
  • デメリット
    • 検索処理は行えない。
    • ?パラメタは使用できない。
(2)DBStatementクラスのExecuteメソッド
?パラメタを使用しないSQL(主に検索処理)を実行する場合に使用します。
  • メリット
    • 検索処理ができる。
    • ExecuteメソッドでSQLを指定するためオブジェクトの使い回しができる。
    • 更新行数が取得できる。
  • デメリット
    • ?パラメタは使用できない。
    • 更新処理の時にはPREPAREが実行されるため、ExecuteDirectメソッドと比べ若干性能が落ちる。
(3)DBPreparedStatementクラスのExecuteメソッド
?パラメタを使用するSQLを実行する場合に使用します。
  • メリット
    • HiRDBのBLOBなどバイナリデータやOracleのLONGなどの長大データの更新が容易に行える。
    • 複数行の一括INSERTができる。
    • パラメタを変更して実行するだけで異なる結果が得られる。
  • デメリット
    • 異なるSQLを実行したい場合にはオブジェクトを作り直す必要がある。

Q6. CreateStatementメソッドを実行するとDBSQLCA例外が発生し、RetCodeメンバにはDB_DRV_ERROR_STAT_COUNTの値が設定されているのですが、なぜでしょうか?

作成できるDBStatementオブジェクトの個数には制限があります。一つのDBConnectionオブジェクトからはDBStatementオブジェクト、DBPreparedStatementオブジェクト、DBCallableStatementオブジェクトを全部で合わせて63個*までしか作成できません。不要になったDBStatementオブジェクトなどはRemoveメソッドを使用して削除してください。

*
実行している処理によって多少減ることがあります。

Q7. DBResultSetオブジェクトを使用して検索条件にヒットしたレコード数を知りたいのですが、どうすればよいでしょうか

一番簡単な方法は、SQLのCOUNT関数を使用することです。
また、以下のコーディング例で取得することもできます。

DBResultSet * pRset;
 : (中略。検索を実行してDBResultSetオブジェクトを取得)
while(!(pRset->IsEOF()))
 pRset->PageNext();
int iRecords = pRset->GetCurrent() - 1;

ただし、このようにすると実際のデータを取得するためにはRefreshメソッドを使用するなどして再検索する必要があります。また、検索対象のテーブルにロックをかけていない場合は、再検索すると結果が異なる場合があるので注意が必要です。

Q8. 繰り返し列に対して?パラメタを使用して1要素のデータを設定しようとしたのですが、HiRDBでエラーになってしまいます。なぜでしょうか?

?パラメタを使用して繰り返し列に対して値を設定する場合、1要素だけの設定はできません。?パラメタを使用する場合、2要素以上のデータを設定する必要があります。

Q9. DABroker for C++をバージョンアップして、プログラムをリコンパイルして実行すると異常終了してしまいます。なぜでしょうか?

以下に示すようにバージョンアップを行った場合、プログラムのリコンパイルを行うときにはリンクするライブラリを変更する必要があります。

01-04へバージョンアップ
前提OS ライブラリ名
HP-UX 11.0 libdabcpp14.sl
Windows NT® 4.0 dabcpp14.lib
02-00以降へバージョンアップ
前提OS ライブラリ名
HP-UX 11.0 libdabcpp20.sl
Solaris libdabcpp20.so
Windows NT® 4.0 dabcpp20.lib

バイナリ互換は保証していますので、DABroker for C++をバージョンアップしてもリコンパイルを行わなければ、それまで動作していたプログラムは全て正常に動作します。