SQLExtendedFetch とブックマークの使い方については、『Microsoft ODBC 2.0 プログラマーズリファレンス&SDK ガイド』 (Microsoft Press) を参照 してください。コード例は、「第 22 章 ODBC 関数リファレンス」の SQLExtendedFetch のセクションにあります。
SQL ステートメントの位置付け更新と削除
ODBC Interface の SQL プリプロセッサでは、UPDATE と DELETE に対 する拡張 SQL 文法にのっとった SQL ステートメントを使って、位置付 け更新と削除を実行することができます。
対象となる行は次の形式の SELECT ステートメントを使って選択する必 要があります。
SELECT [ALL | DISTINCT] select-list FROM table-name FOR UPDATE OF [column-name [, column-name]...]
FOR UPDATE OF 句は、仕様に準拠していればサポートされますが、そう でなければ無視されます。
SELECT ステートメントを実行する前に、SQLSetConnectOption を使って、
カ ー ソ ル タ イ プ を SQL_CURSOR_DYNAMIC に 設 定 し 、 同 時 実 行 性 (Concurrency) を SQL_CONCUR_ROWVER に設定します。また、複数の行 セットを使用する場合は、行セットのサイズを設定します。
SQLExtendedFetch を使って、行を行セットバッファにフェッチします。複 数行の行セットを使用し、行セットの先頭行でない行を更新または削除す る場合は、SQL_POSITION オプションを含む SQLSetPos を呼出して、現 在の行番号を設定します。
SQLGetCursorName を使って、ドライバに割り当てられたカーソル名を取 得するか、SQLSetCursorName を使って独自のカーソル名を設定します。
個別のステートメントハンドルに対して、次のタイプの SQL ステートメ ントのいずれかを準備して実行するか (SQLPrepare および SQLExecute を 使います)、直接実行します (SQLExecDirect を使います)。
DELETE FROM table-name WHERE CURRENT OF cursor-name
UPDATE table-name
SET column-identifier =
{constant-value | dynamic-parameter}
[, column-identifier =
{constant-value | dynamic-parameter}]...
WHERE CURRENT OF cursor-name
テーブル名は、SELECT ... FOR UPDATE OF ステートメントで使用する テーブル名と一致している必要があります。
制限事項
➣ SELECT ... FOR UPDATE OF ステートメントでは、1 つのテーブルだけ を使ってください。
➣ 結果セットには、MIN、MAX、SUM、AVG などの集計関数を表すカラ ムや、内容が計算結果を表すカラムが含まれないようにしてください。
➣ UPDATE ステートメントの SET 句では、SELECT ステートメントの 選択リストに含まれるカラムを定数値または動的パラメータに設定する ようにします。式はサポートされていません。
➣ パラメータ配列はサポートされていません。
➣ Data-at-execution パラメータはサポートされていません。
SQL ステートメントによる位置付け更新や削除の使い方については、
『Microsoft ODBC 2.0 プ ロ グ ラ マ ー ズ リ フ ァ レ ン ス &SDK ガ イ ド 』 (Microsoft Press) を参照してください。コード例は、「第 22 章 ODBC 関数リファレンス」の SQLSetPos のセクションにあります。
第 3 章
相対位置と絶対位置を使った SQLExtendedFetch
ODBC Interface v2.0 では、SQLExtendedFetch の SQL_FETCH_RELATIVE および SQL_FETCH_ABSOLUTE オプションがサポートされています。こ れらのオプションを使用するときには、次の点に注意してください。
➣ 下層のカーソルモデルは動的であるため、SELECT ステートメントの テ ー ブ ル が 揮 発 性 で あ る 場 合 は 、 相 対 位 置 と 絶 対 位 置 が 次 に 同 じ SELECT ステートメントを実行したときにも同じ行を指すという保証 はありません。これは、更新によって行が移動したり (あるいは、結果 セットから消えたり)、レコードの削除によって位置が影響を受けるた めです。
➣ 結果セットのサイズが非常に大きい場合、目的の位置までの距離が大き いと、これらの処理にはかなりの時間を要することがあります。
OEM 文字の変換
DOS アプリケーションと共有するデータベースとの間でデータの格納や取 得を行うとき、一般に Windows アプリケーションでは、下層のオペレー ティングシステムから提供される OEM 文字セットを使用する必要があり ます。これは特に米国以外の国で重要な問題になります。
ODBC Interface v2.0 では、トランスレータ DLL を使って、OEM 文字セッ トと、Windows v3.1、Windows 95、および Windows NT で使用されている ANSI 文字セットとの間でデータの変換を行います。トランスレータ DLL を使用するかどうかは選択可能です。トランスレータ DLL の使用を有効 にするには、ODBC Administrator プログラムによって表示されるデータ ソースの設定画面、または SQLDriverConnect によって表示されるログイ ン画面で、[OEM/ANSI 変換] チェックボックスをオンにします。
付 録 A この 付 録 で は 、ODBC Interface を 使 っ て 、ODBC API か ら 拡 張 さ れ た Scalable SQL および Btrieve オペレーションを実行する方法について説明 します。次に、この付録の内容を示します。
➣ オーナネームを使ったファイルの操作
➣ バージョン情報の取得
➣ カレントセッション ID の識別
➣ コールバック関数のインストールと削除 (Windows v3.1 のみ)
➣ データの変換
➣ マスクの検証
➣ デフォルトマスクの取得
➣ データ値の検証
ODBC から拡張された Scalable SQL オペレーションの実行
Scalable SQL API の関数の中には、ODBC API にはないものがあります。
XQLCallback や XQLVersion などがこの中に含まれます。さらに、ODBC には Btrieve で使用するファイルのオーナネームという概念がありません。
し か し 、ODBC API 関 数 へ の 拡 張 機 能 で あ る SQLGetConnectOption と
SQLSetConnectOption を使うと、これらの関数にアクセスしたり、オーナ
ネームを持つファイルを作成することができます。これらの関数を使うと、
次のタスクを実行できます。
➣ ODBC Interface にオーナネームのリストを提供する。
➣ バージョン情報を取得する。
➣ カレントセッション ID を識別する。
➣ コールバック関数をインストールまたは削除する (Windows v3.1 のみ)。