dc_tam_rewrite

名称

TAMテーブルのレコード入力を前提の更新

形式

ANSI C ,C++の形式

#include <dctam.h>
int  dc_tam_rewrite(DCLONG tblid,struct DC_TAMKEY *keyadr,
                   int keyno,
                   char *datadr,int datsize,DCLONG flags)

K&R版 C の形式

#include <dctam.h>
int  dc_tam_rewrite(tblid,keyadr,keyno,datadr,datsize,flags)
DCLONG            tblid;
struct DC_TAMKEY  *keyadr;
int               keyno;
char              *datadr;
int               datsize;
DCLONG            flags;

機能

dc_tam_read関数で入力したレコードを,更新して出力します。

更新目的の入力のdc_tam_read関数を1回呼び出せば,その後トランザクションの同期点まで,何度でもdc_tam_rewrite関数を使えます。ただし,dc_tam_delete関数,dc_tam_read_cancel関数を呼び出したあとには,dc_tam_rewrite関数を使えません。

dc_tam_rewrite関数がエラーリターンした場合は,この関数内で設定した資源はすべて解放して,関数を呼び出す前の状態に戻ります。

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

更新データ内のキー値の格納位置,およびキー領域長は,TAMテーブルファイルの初期作成時のtamcreコマンドに設定した値です。

TAMテーブルファイルの初期作成時,データ部にキー値を付けている(tamcreコマンドに-sオプションを指定していない)場合は,データ部にキー値があります。そのため,dc_tam_rewrite関数に設定したキー値が更新データ内になければ,エラーリターンします。また,データ部にキー値を付けていない(tamcreコマンドに-sオプションを指定)場合は,データ部にキー値はありません。この場合は,更新データの内容をチェックしません。

UAPで値を設定する引数

●tblid

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

●keyadr

更新するレコードの,キー値のアドレスを持つ構造体のアドレスを設定します。

構造体の形式は次のとおりです。

struct DC_TAMKEY {
                 char *keyname;
                 };

●keyno

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

●datadr

更新データのアドレスを設定します。

●datsize

更新データ長を設定します。更新データ長は,(レコード長×要求レコード数)以上にしてください。

●flags

DCNOFLAGSを設定します。

リターン値

リターン値リターン値(数値)意味
DC_OK0TAMテーブルのレコードを正常に更新しました。
DCTAMER_PARAM_TID-1700tblidに設定したテーブル記述子が間違っています。
DCTAMER_PARAM_KEY-1702keyadrに設定したキー値が間違っています。
DCTAMER_PARAM_KNO-1703keynoに設定した値が間違っています。
DCTAMER_PARAM_DTA-1706datadrに設定した値が間違っています。
DCTAMER_PARAM_DTS-1707datsizeに設定したデータ長が短過ぎます。
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_NOREC-1731指定されたレコードは存在しません。
DCTAMER_SEQENCE-1732dc_tam_read関数を呼び出していません。
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トランザクションサービスでエラーが起こりました。