式言語


@DbLookup (ODBC データソース)

ODBC.INI ファイルのデータソース情報を使って、適切な ODBC ドライバを起動します。起動されたドライバは、指定された DBMS、テーブル、列を特定し、キー列の値が指定されたキーと一致するレコードに属する列の値だけを返します。返される値リストのソートや、重複する値の削除、およびヌル値の扱いもオプションで指定できます。

メモ @DbLookup はデータを取り出すだけで、データの追加、削除、変更はできません。

構文@DbLookup( "ODBC" :cache ; "data_source" ; "user_ID1" :"user_ID2" ; "password1" :"password2" ; "table" ; "column" :"null_handling" ; "key_column" ; "key" ; "Distinct" :"sort" )
パラメータ"ODBC"


cache "data_source"
"user_ID1" :"user_ID2"
"password1" :"password2"
"table"
"column"
"null_handling"
"key_column"
"key"
"Distinct"
"sort"
戻り値valuesFound
メモ キーワードフィールドでの選択方法としてラジオボタンやチェックボックスを使う場合、キーワードリストは文書が作成されたときまたは編集用に開かれたときだけ更新されます。標準の選択方法では、文書が再計算されるたびにキーワードリストも更新されます。

データソースを指定するデータソース名は、最大 32 文字の英数字で指定します。
ID とパスワードを指定するこれらの引数は、DBMS で必要な場合にのみ指定します。
ID を @DbLookup 式に保存する代わりに、ヌル文字列 ("") を使用できます。ID が必要なときは、ユーザーに ID の入力を要求するプロンプトが表示されます。これは、自分の ID を他の設計者に見られたくない場合や、外部データにアクセスするときにユーザーに自分の ID を入力させたい場合に便利です。ただし、自動的に実行される式 (エージェントなど) には、必ず ID とパスワードを指定します。このような式は、情報の入力を要求しないからです。

データベースが開いたままのときは、データソースにアクセスするためのユーザー ID とパスワードの入力は、Lotus Domino のデータベースセッションごとに一度だけ必要です。ユーザーが Lotus Domino の別のデータベースを開いて同じデータソースにアクセスする式を実行する場合は、ユーザー ID とパスワードをもう一度入力する必要があります。

パスワードパラメータは、ID パラメータを指定した場合に限り必要となります。ID と同様に、パスワードを @DbLookup 式に保存することも、代わりにヌル文字列を使用して ODBC ドライバからプロンプトを出させることもできます。データベースパスワードがヌルの場合は、式から省略できます。

たとえば、ID とパスワードを完全に指定する場合は、次のように入力します。


テーブル名を指定するテーブルの所有者名は省略可能ですが、テーブル名を明確にするために指定することもできます (DBMS が対応している場合)。所有者名とテーブル名はピリオドで区切り、"owner_name.table_name" という形式で指定します。
たとえば、

"dbo.author"

Table で、アクセス対象の DBMS のデータベースのビューも参照できます。

ヌルの扱い方を指定するヌル値の処理を制御するには、次のオプションを 1 つ指定し、コロンを付けて column パラメータに追加します。


key_column と key を指定する"key_column" では、指定した "key" で検索する列を指定します。列名は、引用符で囲みます。DBMS 製品で列名の大文字と小文字が区別される場合は、大文字と小文字の区別も正確に指定してください。@DbLookup でデータを取り出すとき、キー列の値はソートされていなくても構いません。
データソースのキー列と一致する Lotus Notes の型を使用して値を指定します。たとえば、キー列が、整数、実数、浮動小数点数、倍精度実数といった数値型の場合、数値または数値となる式を指定します。キーの値が文字列の場合は、引用符で囲みます。日時の値は、Lotus Domino の形式ではなくデータベースの形式で入力する必要があります。たとえば、DB2/2 の場合は 1996-01-31-12:00:00 ではなく 1996-01-31-12.00.00 を使います。

キー列とキーの値を組み合わせたものが、選択ステートメントの「where」節を構成します。

"SELECT column WHERE key_column = key"

ODBC アプリケーションのインターフェースによって常にキー列の値とキーが等しいかどうかが調べられ、完全に一致するレコードのデータだけが返されます。キー列の値が指定した複数の値のいずれかと一致するかどうかを調べるには、キー値をリストとして指定し、アイテム間を "Red":"Blue":"Green" のようにコロン (:) で区切ります。この場合、OR 演算と同様に処理され、キー列の値が "Red" OR "Blue" OR "Green" と一致するすべてのレコードのデータが返されます。AND 演算を実行する場合や、キー列の値とキーが一致しないことを調べる場合は、@DbCommand を使って正しいコマンド文字列を DBMS に渡します。また、キーの値が日時の場合に正しいコマンド文字列を渡すには、@DbCommand を使います。これは、@DbLookup では日時の値が DBMS のコマンド言語の日時形式に正しく変換されるとは限らないためです。

型やその他の問題が原因で @DbLookup から正しい値が返されない場合は、@DbCommand で SELECT ステートメントを使用してみてください。

Distinct を指定するDistinct 文字列引数は Lotus Domino の @Unique に似ています。ただし、Distinct ではデータが Lotus Domino に返される前に重複する値が必ず削除されます。@Unique ではなく Distinct を使うと、次の 2 つの利点があります。


メモ 一部の ODBC ドライバは Distinct をサポートしていません。データにヌル値がある場合に Distinct を指定すると、通常はヌルが 1 つ返されます。

sort を指定するDistinct 文字列引数を使うとき、コロンを付けて sort パラメータを付加することができます。sort パラメータには次のキーワードのいずれかを使い、戻り値のソート方法を指定します。


ソート文字列引数を指定しないと、値はソートされずに返されます。

メモ 一部の ODBC ドライバは sort キーワードをサポートしていません。式で Ascending と Descending の両方を指定すると、「引数が無効です」というメッセージが表示されます。

戻り値にアクセスする複数の値が返されるときは、現在のフィールドに指定されている複数値の分離記号で区切られたリストの形式で返されます。
@DbLookup は、64KB を超えるデータを返すことはできません。次の公式を使って、@DbLookup で返されるデータ量を調べます。


ユーザーの NOTES.INI ファイルに次のステートメントが含まれている場合は、

NoExternalApps=1

@DbLookup 式は無効になります。この場合、式が失敗するだけでエラーメッセージは表示されません。これは、@DbLookup を ODBC とともに使った場合に限り起こります。

使用法@DbLookup は、主にキーワード式で使います。キーワードのリストをハードコーディングしてリストを定期的に更新する代わりに、@DbLookup を使うと、外部データベーステーブルから動的に値のリストを取り出すことができます。
@DbLookup は、貼り付けエージェントでは使えますが、メールエージェントでは使えません。あまりないケースですが、取り出し対象のデータを含むテーブルが保存されているリモートサーバーが Lotus Domino server と同じコンピュータ上に存在する場合、この関数は Web アプリケーションでのみ機能します。


関連項目