dc_tam_write
名称
TAMテーブルのレコードの更新/追加
形式
ANSI C ,C++の形式
#include <dctam.h>
int dc_tam_write(DCLONG tblid,struct DC_TAMKEY *keyadr,
int keyno,
char *datadr,int datsize,DCLONG flags)
K&R版 C の形式
#include <dctam.h>
int dc_tam_write(tblid,keyadr,keyno,datadr,datsize,flags)
DCLONG tblid;
struct DC_TAMKEY *keyadr;
int keyno;
char *datadr;
int datsize;
DCLONG flags;
機能
キー値に示すレコードを,TAMテーブル上に更新または追加します。
レコード排他でTAMテーブルがオープンしている場合,次のように排他を確保します。
dc_tam_write関数がエラーリターンした場合,この関数内で確保した資源はすべて解放して,関数を呼び出す前の状態に戻します。ただし,この関数を呼び出す前に,参照排他で確保されていたTAMテーブルを更新または追加した場合は,更新排他となり参照排他には戻りません。
複数のレコードを設定して更新または追加する場合,それらのレコードのうち一つでもエラーが発生したら,この関数で設定した全レコードの処理をエラーとします。
更新または追加するデータ内のキー値の格納位置,およびキー領域長は,TAMテーブルファイルの初期作成時のtamcreコマンドに設定した値です。
TAMテーブルファイルの初期作成時,データ部にキー値を付けている(tamcreコマンドに-sオプションを指定していない)場合は,データ部にキー値があります。そのため,dc_tam_write関数に設定したキー値が更新または追加するデータ内になければ,エラーリターンします。また,データ部にキー値を付けていない(tamcreコマンドに-sオプションを指定)場合は,データ部にキー値はありません。この場合は,更新または追加するデータの内容をチェックしません。
UAPで値を設定する引数
●tblid
レコードを更新または追加するTAMテーブルの,テーブル記述子を設定します。テーブル記述子はdc_tam_open関数で返された値です。
●keyadr
更新,または追加するレコードのキー値のアドレスを持つ,構造体のアドレスを設定します。構造体の形式は次のとおりです。
struct DC_TAMKEY {
char *keyname;
};
●keyno
要求レコード数(keyadrで設定する構造体の数)を設定します。
●datadr
更新または追加するデータのアドレスを設定します。
●datsize
更新または追加するデータ長を設定します。更新または追加するデータ長は,(レコード長×要求レコード数)以上にしてください。
●flags
レコードのアクセス種別,資源が競合した場合の排他解除待ち種別を,次の形式で設定します。
{DCTAM_WRITE|DCTAM_WRTADD|DCTAM_ADD}〔|{DCTAM_WAIT|DCTAM_NOWAIT}〕
リターン値
リターン値 | リターン値(数値) | 意味 |
---|---|---|
DC_OK | 0 | TAMテーブルのレコードを正常に更新,または追加しました。 |
DCTAMER_PARAM_TID | -1700 | tblidに設定したテーブル記述子が間違っています。 |
DCTAMER_PARAM_KEY | -1702 | keyadrに設定したキー値が間違っています。 |
DCTAMER_PARAM_KNO | -1703 | keynoに設定した値が間違っています。 |
DCTAMER_PARAM_DTA | -1706 | datadrに設定した値が間違っています。 |
DCTAMER_PARAM_DTS | -1707 | datsizeに設定したデータ長が短過ぎます。 |
DCTAMER_PARAM_FLG | -1708 | flagsに設定した値が間違っています。 |
DCTAMER_NOTTAM | -1709 | tblidに設定したテーブルはTAMテーブルではありません。 |
DCTAMER_TAMEND | -1720 | TAMサービスが終了中です。 |
DCTAMER_PROTO | -1721 | TAMテーブルへアクセスする順序が間違っています。 |
UAPにリンケージしているトランザクション制御用オブジェクトファイルのリソースマネジャ登録が間違っています。 または,UAPにトランザクション制御用オブジェクトファイルをリンケージしていません。 | ||
関数を呼び出したUAPのユーザサービス定義に,トランザクション属性なし(atomic_update=N)を指定しています。 | ||
DCTAMER_RMTBL | -1723 | TAMテーブルが削除されています。 |
DCTAMER_NOLOAD | -1724 | TAMテーブルがロードされていません。 |
DCTAMER_NOOPEN | -1726 | TAMテーブルがオープン状態ではありません。 |
DCTAMER_LOGHLD | -1727 | TAMテーブルが論理閉塞状態です。 |
DCTAMER_OBSHLD | -1728 | TAMテーブルが障害閉塞状態です。 |
DCTAMER_ACSATL | -1730 | TAMサービス定義で設定したTAMテーブルのアクセス形態では実行できません。 |
DCTAMER_NOREC | -1731 | 指定されたレコードは存在しません。 |
DCTAMER_EXKEY | -1735 | keyadrに設定したキー値がTAMテーブルに存在するので,レコードの追加はできません。 |
DCTAMER_LOCK | -1736 | 排他エラーが起こりました。flagsにDCTAM_WAITを設定した場合,ロックサービス定義で指定した待ち時間のタイムアウトのため,資源を確保できませんでした。 |
DCTAMER_DLOCK | -1737 | デッドロックが起こりました。 |
DCTAMER_TBLVR | -1760 | UAPが,現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。 |
DCTAMER_FLSVR | -1761 | UAPが,現在稼働しているOpenTP1ファイルサービスでは動作できないバージョンのTAMライブラリと結合されています。 |
DCTAMER_NOAREA | -1763 | TAMテーブルに空きレコードがありません。 |
DCTAMER_RECOBS | -1764 | レコードが破壊されています。 |
DCTAMER_TRNNUM | -1765 | TAMサービスで管理できるトランザクション数を超えました。 |
DCTAMER_OPENNUM | -1766 | キャラクタ型スペシャルファイルのオープン数の制限値を超えました。 |
DCTAMER_ACCESSS | -1767 | スペシャルファイルに対するアクセス権がありません。 |
DCTAMER_ACCESSF | -1768 | TAMテーブルファイルに対するアクセス権がありません。 |
DCTAMER_MEMORY | -1769 | メモリが不足しました。 |
DCTAMER_IO | -1770 | 入出力エラーが起こりました。 |
DCTAMER_TMERR | -1771 | トランザクションサービスでエラーが起こりました。 |
DCTAMER_ACCESS | -1773 | アクセスしようとしたTAMファイルは,セキュリティ機能で保護されています。dc_tam_write関数を呼び出したUAPには,アクセス権限がありません。 |