分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス C言語編

[目次][索引][前へ][次へ]

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には,アクセス権限がありません。