dc_tam_read

名称

TAMテーブルからレコードの入力

形式

ANSI C,C++の形式

#include <dctam.h>
int  dc_tam_read(DCLONG tblid,struct DC_TAMKEY *keyadr,
                int keyno,
                char *bufadr,int bufsize,DCLONG flags)

K&R版 C の形式

#include <dctam.h>
int dc_tam_read(tblid,keyadr,keyno,bufadr,bufsize,flags)
DCLONG           tblid;
struct DC_TAMKEY *keyadr;
int              keyno;
char             *bufadr;
int              bufsize;
DCLONG           flags;

機能

flagsに設定した検索種別に従って,TAMテーブル上のレコードを参照または更新の目的で入力します。検索種別とインデクス種別の関係を次の表に示します。

表2-3 検索種別とインデクス種別の関係

検索種別検索処理の概要
インデクス種別:ハッシュインデクス種別:ツリー
'キー値='検索設定したキー値を持つレコードを検索します。
設定したキー値を持つレコードがない場合はエラーリターンします。
設定したキー値を持つレコードを検索します。
設定したキー値を持つレコードがない場合はエラーリターンします。
'キー値<='検索エラーリターンします。設定したキー値以上のキー値を持つレコードを検索します。
'キー値<'検索エラーリターンします。設定したキー値より大きいキー値を持つレコードを検索します。
'キー値>='検索エラーリターンします。設定したキー値以下のキー値を持つレコードを検索します。
'キー値>'検索エラーリターンします。設定したキー値より小さいキー値を持つレコードを検索します。
先頭検索キー値に対応してハッシングをした先頭レコードを検索します。keyadrに設定したキー値は無視します。エラーリターンします。
NEXT検索キー値に対応してハッシングをした,次のレコードを検索します。エラーリターンします。
注※
インデクス種別がハッシュで,TAMテーブルファイルの初期作成時に,データ部にキー値を付けている(tamcreコマンドに-sオプションを設定していない)場合,先頭検索とNEXT検索を使って,TAMテーブル上の全レコードを検索できます。

参照目的の入力で排他を掛ける場合,参照排他でテーブル排他とレコード排他を確保します。レコード排他でオープンしたTAMテーブルを更新目的で入力する場合は,参照排他でテーブル排他を確保し,更新排他でレコード排他を確保します。

dc_tam_read関数がエラーリターンした場合は,この関数内で設定した資源はすべて解放して,関数を呼び出す前の状態に戻ります。ただし,関数を呼び出す前に参照排他で確保されていたレコードを更新目的で入力した場合は,更新排他となり参照排他には戻りません。また,エラーリターンした場合には,バッファの内容は保証できません。

複数のレコードを設定して入力する場合,それらのレコードのうち一つでもエラーが発生したときは,この関数で設定した全レコードの処理をエラーとします。

UAPで値を設定する引数

●tblid

レコードを入力するTAMテーブルの,テーブル記述子を設定します。テーブル記述子はdc_tam_open関数で返された値です。

●keyadr

レコードを検索するための,キー値のアドレスを持つ構造体のアドレスを設定します。構造体の形式は次のとおりです。

struct DC_TAMKEY {
                 char  *keyname;
                 };

●keyno

要求レコード数(keyadrで設定する構造体の数)を設定します。

●bufadr

レコードを入力するバッファのアドレスを設定します。

●bufsize

レコードを入力するバッファの長さを設定します。バッファ長は(レコード長×要求レコード数)以上にします。

●flags

レコードの検索種別,アクセス種別,参照目的の排他のときの排他要否種別を設定します。また,排他を掛ける場合に,資源の競合が起こったときの排他解除待ち種別を設定します。

{フラグ1}|{DCTAM_REFERENCE〔|{DCTAM_EXCLUSIVE|DCTAM_NOEXCLUSIVE}〕|DCTAM_MODIFY}〔|{DCTAM_WAIT|DCTAM_NOWAIT}〕

flagsに設定する値と,設定内容について次に示します。

フラグ1フラグ2フラグ31フラグ42flagsの設定内容

EQLSRC
GRTEQLSRC
GRTSRC
LSSEQLSRC
LSSSRC
FIRSTSRC
NEXTSRC

REFERENCE

EXCLUSIVE

WAIT

参照目的,排他あり,
排他エラー時は解除待ち

NOWAIT

参照目的,排他あり,
排他エラー時はエラーリターン

NOEXCLUSIVE

×参照目的,排他なし

MODIFY

WAIT

更新目的,
排他エラー時は解除待ち

NOWAIT

更新目的,
排他エラー時はエラーリターン
(凡例)
×:設定できません。
-:常にEXCLUSIVEを設定します。NOEXCLUSIVEは設定できません。
注※1
省略した場合は,NOEXCLUSIVEが仮定されます。
注※2
省略した場合は,NOWAITが仮定されます。

リターン値

リターン値リターン値(数値)意味
DC_OK0TAMテーブルのレコードを正常に入力しました。
DCTAMER_PARAM_TID-1700tblidに設定したテーブル記述子が間違っています。
DCTAMER_PARAM_KEY-1702keyadrに設定したキー値が間違っています。
DCTAMER_PARAM_KNO-1703keynoに設定した値が間違っています。
DCTAMER_PARAM_BFA-1704bufadrに設定した値が間違っています。
DCTAMER_PARAM_BFS-1705bufsizeに設定したバッファ長が短過ぎます。
DCTAMER_PARAM_FLG-1708flagsに設定した値が間違っています。
DCTAMER_NOTTAM-1709tblidに設定したテーブルはTAMテーブルではありません。
DCTAMER_TAMEND-1720TAMサービスが終了中です。
DCTAMER_PROTO-1721TAMテーブルへアクセスする順序が間違っています。
UAPにリンケージしているトランザクション制御用オブジェクトファイルのリソースマネジャ登録が間違っています。
または,UAPにトランザクション制御用オブジェクトファイルをリンケージしていません。
関数を呼び出したUAPのユーザサービス定義に,トランザクション属性なし(atomic_update=N)を指定しています。
DCTAMER_RMTBL-1723TAMテーブルが削除されています。
DCTAMER_NOLOAD-1724TAMテーブルがロードされていません。
DCTAMER_NOOPEN-1726TAMテーブルがオープン状態ではありません。
DCTAMER_LOGHLD-1727TAMテーブルが論理閉塞状態です。
DCTAMER_OBSHLD-1728TAMテーブルが障害閉塞状態です。
DCTAMER_IDXTYP-1729TAMテーブルファイルの初期作成で設定したTAMテーブルのインデクス種別では実行できません。
DCTAMER_ACSATL-1730TAMサービス定義で設定したTAMテーブルのアクセス形態では実行できません。
DCTAMER_NOREC-1731flagsに設定した検索条件を満たすレコードがありません。
DCTAMER_LOCK-1736排他エラーが起こりました。flagsにDCTAM_WAITを設定した場合,ロックサービス定義で指定した待ち時間のタイムアウトのため,資源を確保できませんでした。
DCTAMER_DLOCK-1737デッドロックが起こりました。
DCTAMER_TBLVR-1760UAPが,現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。
DCTAMER_FLSVR-1761UAPが,現在稼働しているOpenTP1ファイルサービスでは動作できないバージョンのTAMライブラリと結合されています。
DCTAMER_RECOBS-1764レコードが破壊されています。
DCTAMER_TRNNUM-1765TAMサービスで管理できるトランザクション数を超えました。
DCTAMER_OPENNUM-1766キャラクタ型スペシャルファイルのオープン数の制限値を超えました。
DCTAMER_ACCESSS-1767スペシャルファイルに対するアクセス権がありません。
DCTAMER_ACCESSF-1768TAMファイルに対するアクセス権がありません。
DCTAMER_MEMORY-1769メモリが不足しました。
DCTAMER_IO-1770入出力エラーが起こりました。
DCTAMER_TMERR-1771トランザクションサービスでエラーが起こりました。
DCTAMER_ACCESS-1773アクセスしようとしたTAMファイルは,セキュリティ機能で保護されています。dc_tam_read関数を呼び出したUAPには,アクセス権限がありません。