LOTUS CONNECTOR


外部データベースから取得したデータを操作する

ODBCResultSet クラスDatabase 'Lotus Domino Designer 8.5.1 ヘルプ', View '(All)|All'は、ODBCQueryDatabase 'Lotus Domino Designer 8.5.1 ヘルプ', View '(All)|All' で取り出されたデータを管理するためのプロパティとメソッドを提供します。データは、フィールド (列) と行を含む結果セットに格納されます。結果セットの内容は、SELECT 検索が外部データベーステーブルから何をフェッチするかに基づきます。

テーブルを作成する

1. Execute メソッドを使用して、取り出すデータ型とフィールドのサイズを指定する CREATE TABLE ステートメントの含まれている SQL 検索を実行します。

2. Close メソッドを使用して結果セットを閉じます。

3. SELECT * FROM [table name] ステートメントの含まれている SQL 検索を実行して、列情報を設定します。

4. ODBCQueryResult オブジェクトの AddRowSetValueUpdateRow の各メソッドを使用して、テーブルにデータを入力します。

5. 結果セットを閉じます。

後でスクリプトでこのテーブルを再利用するには、新しい SELECT ステートメントの含まれる SQL 検索を実行します。これは、結果セットのプロパティを初期化し直します。

このテーブルが更新されないようにするには、ReadOnly プロパティを True に設定します。

テーブルを削除する

テーブルを削除するには、DROP TABLE ステートメントの含まれる SQL 検索を実行します。

テーブルを更新する

更新には、行の変更、削除、追加が含まれます。

行の値を変更する

現在の行の値を変更するには、SetValue メソッドを 1 回以上呼び出して、変更する各フィールドの新しい値を指定した後、UpdateRow メソッドを呼び出して外部データベーステーブルに変更内容を反映します。番号または名前で列を指定します。


戻りステータスをテストするには、SetValue および UpdateRow の各メソッドを使用します。

行を削除、追加する

現在の行を削除するには、DeleteRow メソッドを使用します。


行を追加するには:

1. AddRow メソッドを使用して、AddRow ワークスペースを作成します。

2. SetValue メソッドを何回か使用して、行の各フィールドの値を指定します。

3. UpdateRow メソッドを使用してバックエンドデータベースに新しい行を追加し、AddRow ワークスペースを閉じます。


AddRow の呼び出しにより、行を 1 行だけ含む特別の AddRow ワークススペースが作成されます。別の行を現在の行にする場合、行番号として DB_ADDROW を指定すると、AddRow ワークスペースに戻ることができます。UpdateRow メソッドの呼び出しにより、AddRow ワークスペースが削除されます。

行を削除、追加する場合、更新は結果セットに反映されません。結果セットには前と同じ数の行が、同じ番号付けで保持されます。結果セットに更新を反映させるには、別の SELECT 検索を実行します。

UpdateRow メソッドは、実行される操作に基づいて SQL INSERT ステートメントおよび UPDATE ステートメントを実装します。DeleteRow メソッドは、SQL DELETE ステートメントを実装します。または、SQL プロパティExecute メソッドでこれらのステートメントを直接発行することもできますが、お勧めできません。

更新ステータスを取得する

次のメソッドにより、更新ステータスが取得できます。


行を操作する

結果セットの行は、番号で識別されます。行番号は 1 で始まり NumRows メソッドの戻り値で終わる整数です。NumRows では、結果セットが全部メモリにフェッチされるまで正確な値が戻りません。

行を移動する

行間を移動するには、NextRowPrevRowFirstRowLastRowLocateRow の各メソッドを使用します。CurrentRow プロパティは、処理の対象となる位置の行番号を返します。IsBeginOfData および IsEndOfData の各メソッドは、それぞれ最初の行と最後の行で True を返します。

Execute メソッドに続いて NextRow メソッドを使用すると、間に他の位置決めメソッドがない場合、最初の行に移動します。この動作により、次の形式のループで結果セット全体を処理できます。


NextRow の呼び出しは、ループの一番上です。行を処理するコードがそれに続きます。Until 句がループの最後にあり、IsEndOfData でループの条件判断をします。NextRow の戻りステータスでループの条件判断をしないでください。これは、戻り値 False もエラーを生成するためです。

位置決めメソッド介入の後で結果セットを前から後ろへ処理する場合 (たとえば、データに対する 2 度目のパスの場合)、次のように最初の行に明示的に移動して、ループに入る前に最初の行を処理する必要があります。または、ループの一番下で NextRow を呼び出し、ループを出た後で最後の行を処理できます。


同様に、結果セットを後ろから前へ処理する場合、次のように明示的に最後の行に移動し、ループに入る前に最後の行を処理する必要があります。(または、ループの一番下で PrevRow を呼び出し、ループを出た後で最初の行を処理できます。)
メモ ODBCResultSet の CacheLimit プロパティは、結果セットを後ろから前へ処理する能力に影響します。

LocateRow メソッドは、最大 3 つのフィールドに対して、指定した値を含む最初の行に位置を設定します。検索は現在の行で始まり、前方向に処理され、指定された値を持つ行が見つからない場合は False を返します。次のコードは、フィールド 5 に「Cambridge」、フィールド 6 に「MA」の含まれている結果セットのすべての行を処理します。


結果セットの先頭から検索を開始するには、FirstRow を指定します。LocateRow が False を返した時点で While ループは終了します。処理される行 (LocateRow は True) が最後の行になると、ループは明示的に終了します。そうでない場合は、NextRow はエラーを示し、エラーが処理されないと最後の行で無限ループに陥ります。

最後の行で IsEndOfData が True になれば、メモリ不足により結果セットの切り捨てが起こったことがわかりますが、NumRows は DB_ROWSUNKNOWN のままです。

CurrentRow プロパティを 0 に設定すると、データがフェッチされたとたんにエラー (#545) が発生します。

行を変更する

DeleteRowUpdateRowHasRowChanged の各メソッドは、SQL を使用してその操作を完了します。これらのメソッドは、結果セットに Image 型や Rich Text 型の列が含まれている場合、失敗します。これは、SQL ステートメントがこれらのデータ型を正しく処理できないためです。失敗しないようにするために、結果セットを 2 つ持つことを考慮してください。1 つのセットには、SQL が処理できるデータ型の列を含み、もう 1 つのセットに SQL が処理できないデータ型 (つまり、Image 型や Rich Text 型) の列を含むことができます。

DeleteRow、UpdateRow、HasRowChanged の各メソッドは、指定された列が固有の値を持つ場合に最も効率よく動作します。列が固有の値を含まない場合、エラーを設定して DBstsNUNQ をトラップし、固有の行にアクセスしていることを確認します。

AddRow ワークスペースおよび (該当する場合) ワークスペース内の変更を破棄するには、引数 DB_CANCELADDROW で Close メソッドを呼び出します。結果セットの残りは開かれたままです。

現在行のフィールドを取り出す

GetValue メソッドは、現在の行にあるフィールドの値を返します。フィールドは名前で指定できます。


番号でも指定できます。
値が null かどうかを検査するには、IsValueNull メソッドを使用します。

戻り値のデータ型は、次のように決定されます。


次の表に、FieldNativeDataType で返される SQL データ型、FieldExpectedDataType で指定される対応するデフォルトの LS:DO データ型定数、Typename で返される LotusScript 言語のデータ型をリストします。データは、Typename が正しい型を返すように、指定された型に変換できる必要があります。変換できない場合、LotusScript は例外を生成します。
SQL データ型LS:DO データ型型名
SQL_CHARDB_CHARSTRING 型
SQL_NUMERICDB_TYPE_UNDEFINEDDOUBLE 型
SQL_DECIMALDB_TYPE_UNDEFINEDDOUBLE 型
SQL_INTEGERDB_SHORTINTEGER 型
SQL_SMALLINTDB_SHORTINTEGER 型
SQL_FLOATDB_DOUBLEDOUBLE 型
SQL_REALDB_DOUBLEDOUBLE 型
SQL_DOUBLEDB_DOUBLEDOUBLE 型
SQL_DATEDB_DATEDATE 型
SQL_TIMEDB_DATETIMEDATE 型
SQL_TIMESTAMPDB_TIMEDATE 型
SQL_VARCHARDB_CHARSTRING 型
SQL_BINARYDB_BINARYSTRING 型
SQL_VARBINARYDB_BINARYSTRING 型
SQL_LONGVARCHARDB_CHARSTRING 型
SQL_LONGVARBINARYDB_BINARYSTRING 型
SQL_BIGINTDB_LONGLONG 型
SQL_TINYINTDB_SHORTINTEGER 型
SQL_BITDB_BINARYSTRING 型

フィールドを操作する

結果セットのフィールド (列) は、番号と名前で識別されます。フィールド番号は 1 で始まり NumColumns メソッドの戻り値で終わる整数です。結果セットのすべてのフィールドにアクセスするには、次の形式のループを使用します。


フィールド名は、データソーステーブルに表示される名前を表す文字列です。

次の ODBCResultSet メソッドは、フィールドに関する情報を提供します。


FieldSize は、フィールドの番号または名前を指定すると最大サイズを返します。