| パスワード:[kiri]
2009/09/30(Wed) 13:27:36 編集(投稿者)
> 「トランザクション」でのみロックを制御できるように思いました
何故に「外部DB」で「トランザクション」が有効に働くと 思われたのかな?
さて、 > 今のこの値は最新なのか? > 値を信用できないので大変です 新規に追加したい番号を取得したいのなら、シーケンスに 設定した id に自分がこれからデータを追加するよと データを追加し(この追加の際に)自分を特定できる情報と 今回の書き込みの情報も埋め込んで置いて、サーバ側に id は付けてもらい、そのデータを取ってくれば、自分用 の id が得られるのでは?
実際の伝票の追加が(編集の)途中で破棄される(事が多い) のならば、伝票をまず仕立てておいて、実際に書き込む際 に自分用の番号を取ってくるとか。
流れで言うと
サーバで --------------------------- CREATE TABLE "DENBAN" ( id serial8 primary key, userid text); --------------------------- のテーブルを用意。
クライアントには自分のデータを書き出しするための テーブルとしてワークテーブルを用意 denban.tbl [id] [userid] このテーブルには、外部DB書き出しする条件を登録。 条件は、テーブル名 DENBAN、書き出し項目 [userid]、 書き出しは「追加」で指定。 # PostgreSQL は大文字のテーブル名で無いと追加 # できないので DENBAN とした。
最新の自分用の id 取得用に "denbanget.xvw" を 作成し、id と userid を設定。 userid の抽出条件に パラメータ変数 &userid を設定し、この条件にあう ものだけを抽出するようにする。
あとは -------------------------------------------- 変数宣言 整数{&hODBC,&Ret} \ ,文字列{&userid}
外部DB 接続,ODBC="hoge" \ ,ユーザ名=""\ ,パスワード="" \ ,接続ハンドル=&hODBC \ ,終了状態=&Ret
表 "denban.tbl" 行削除 *,圧縮,終了状態=&Ret
&userid=#WSNAME+"-"+#ユーザ名+"-"+#日時文字列(#日時値,11,4,2)
行追加 終了状態=&Ret \ ,[userid]=&userid
書き出し 外部DB \ ,条件名="denbanset" \ ,引継ぎ=する \ ,終了状態=&Ret 終了 表 編集対象表
結合 "denbanget.xvw" \ , \ ,変数使用=する \ ,終了状態=&Ret
確認 #str([id])
外部DB 切断 \ ,&hODBC \ ,終了状態=&Ret -------------------------------------------- てな具合に。(細かいことは抜きで)
|