LOTUS CONNECTOR
ODBCResultSet クラスは、ODBCQuery で取り出されたデータを管理するためのプロパティとメソッドを提供します。データは、フィールド (列) と行を含む結果セットに格納されます。結果セットの内容は、SELECT 検索が外部データベーステーブルから何をフェッチするかに基づきます。
テーブルを作成する
1. Execute メソッドを使用して、取り出すデータ型とフィールドのサイズを指定する CREATE TABLE ステートメントの含まれている SQL 検索を実行します。
2. Close メソッドを使用して結果セットを閉じます。
3. SELECT * FROM [table name] ステートメントの含まれている SQL 検索を実行して、列情報を設定します。
4. ODBCQueryResult オブジェクトの AddRow、SetValue、UpdateRow の各メソッドを使用して、テーブルにデータを入力します。
5. 結果セットを閉じます。
後でスクリプトでこのテーブルを再利用するには、新しい SELECT ステートメントの含まれる SQL 検索を実行します。これは、結果セットのプロパティを初期化し直します。
このテーブルが更新されないようにするには、ReadOnly プロパティを True に設定します。
テーブルを削除する
テーブルを削除するには、DROP TABLE ステートメントの含まれる SQL 検索を実行します。
テーブルを更新する
更新には、行の変更、削除、追加が含まれます。
行の値を変更する
現在の行の値を変更するには、SetValue メソッドを 1 回以上呼び出して、変更する各フィールドの新しい値を指定した後、UpdateRow メソッドを呼び出して外部データベーステーブルに変更内容を反映します。番号または名前で列を指定します。
行を削除、追加する
現在の行を削除するには、DeleteRow メソッドを使用します。
1. AddRow メソッドを使用して、AddRow ワークスペースを作成します。
2. SetValue メソッドを何回か使用して、行の各フィールドの値を指定します。
3. UpdateRow メソッドを使用してバックエンドデータベースに新しい行を追加し、AddRow ワークスペースを閉じます。
行を削除、追加する場合、更新は結果セットに反映されません。結果セットには前と同じ数の行が、同じ番号付けで保持されます。結果セットに更新を反映させるには、別の SELECT 検索を実行します。
UpdateRow メソッドは、実行される操作に基づいて SQL INSERT ステートメントおよび UPDATE ステートメントを実装します。DeleteRow メソッドは、SQL DELETE ステートメントを実装します。または、SQL プロパティと Execute メソッドでこれらのステートメントを直接発行することもできますが、お勧めできません。
更新ステータスを取得する
次のメソッドにより、更新ステータスが取得できます。
結果セットの行は、番号で識別されます。行番号は 1 で始まり NumRows メソッドの戻り値で終わる整数です。NumRows では、結果セットが全部メモリにフェッチされるまで正確な値が戻りません。
行を移動する
行間を移動するには、NextRow、PrevRow、FirstRow、LastRow、LocateRow の各メソッドを使用します。CurrentRow プロパティは、処理の対象となる位置の行番号を返します。IsBeginOfData および IsEndOfData の各メソッドは、それぞれ最初の行と最後の行で True を返します。
Execute メソッドに続いて NextRow メソッドを使用すると、間に他の位置決めメソッドがない場合、最初の行に移動します。この動作により、次の形式のループで結果セット全体を処理できます。
位置決めメソッド介入の後で結果セットを前から後ろへ処理する場合 (たとえば、データに対する 2 度目のパスの場合)、次のように最初の行に明示的に移動して、ループに入る前に最初の行を処理する必要があります。または、ループの一番下で NextRow を呼び出し、ループを出た後で最後の行を処理できます。
LocateRow メソッドは、最大 3 つのフィールドに対して、指定した値を含む最初の行に位置を設定します。検索は現在の行で始まり、前方向に処理され、指定された値を持つ行が見つからない場合は False を返します。次のコードは、フィールド 5 に「Cambridge」、フィールド 6 に「MA」の含まれている結果セットのすべての行を処理します。
最後の行で IsEndOfData が True になれば、メモリ不足により結果セットの切り捨てが起こったことがわかりますが、NumRows は DB_ROWSUNKNOWN のままです。
CurrentRow プロパティを 0 に設定すると、データがフェッチされたとたんにエラー (#545) が発生します。
行を変更する
DeleteRow、UpdateRow、HasRowChanged の各メソッドは、SQL を使用してその操作を完了します。これらのメソッドは、結果セットに Image 型や Rich Text 型の列が含まれている場合、失敗します。これは、SQL ステートメントがこれらのデータ型を正しく処理できないためです。失敗しないようにするために、結果セットを 2 つ持つことを考慮してください。1 つのセットには、SQL が処理できるデータ型の列を含み、もう 1 つのセットに SQL が処理できないデータ型 (つまり、Image 型や Rich Text 型) の列を含むことができます。
DeleteRow、UpdateRow、HasRowChanged の各メソッドは、指定された列が固有の値を持つ場合に最も効率よく動作します。列が固有の値を含まない場合、エラーを設定して DBstsNUNQ をトラップし、固有の行にアクセスしていることを確認します。
AddRow ワークスペースおよび (該当する場合) ワークスペース内の変更を破棄するには、引数 DB_CANCELADDROW で Close メソッドを呼び出します。結果セットの残りは開かれたままです。
現在行のフィールドを取り出す
GetValue メソッドは、現在の行にあるフィールドの値を返します。フィールドは名前で指定できます。
戻り値のデータ型は、次のように決定されます。
Dim lastName As String Call result.GetValue("LASTNAME", lastName)
Call result.FieldExpectedDataType("LASTNAME", DB_CHAR) lastName = result.GetValue("LASTNAME")
結果セットのフィールド (列) は、番号と名前で識別されます。フィールド番号は 1 で始まり NumColumns メソッドの戻り値で終わる整数です。結果セットのすべてのフィールドにアクセスするには、次の形式のループを使用します。
次の ODBCResultSet メソッドは、フィールドに関する情報を提供します。
例