掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ロールバックについて (ID:139708)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> と言う事は、ロジック上は問題が無く、他画面のHide等メモリの問題でしょうか? それが分かるのは、掲示板を見ている第三者ではなく、 ソースを持っているぼぼさんだけだと思いますよ。 > ソースを見ても分かりません。 見ても分からなければ、デバッガの出番かと。 たとえばウォッチ式の「式の内容が変化したときに中断」などを使えば、Connection が 生成されたタイミングや破棄されたタイミング、Open されたタイミングや Close されたタイミングを調査する事ができるかも知れません。 > ①で例外感知 それは、どのような内容の例外なのでしょうか? たとえば、cn がグローバル変数になっていて、しかもそれが Form の Load 等から 利用されて、そこで cn が 閉じられた状態になってしまった、などとすれば > ②で上のエラーが出ます。 にもなりますよね。まぁ、本当の理由は分かりませんけれども。 > MyDBOpen & MyDBCloseは共通関数で乗せていませんが、エラーはなく、他処理も問題なく動いてます。 そうかも知れませんが、それにしては、エラートラップが広域過ぎる点が気にかかります。 (今回の問題とは別問題だとは思いますが) On Error GoTo fail がその位置にあるという事は、たとえば MyDBopen や MyDBClose などで 万一エラーが発生した場合、fail ルーチンにジャンプする事になるのですよね。 たとえば、変数 cn に Connction を設定したものの、肝心の cn.Open が失敗して (ini ファイルの設定ミスやネットワークの一時的な障害などによる物など)、その時に 発生したエラーが拾われたとすれば、 > fail: > cn.RollbackTrans の部分で > オブジェクトが閉じてる場合は、操作は許可されません。 のエラーに繋がって来る可能性も無いとは言えませんね。 で、そうした「接続すらしていないのにロールバック処理を走らせる」という状況を 避けるなら、fail: ルーチンの処理にもう少し手を加えて (1) cn が空であるかどうかを判断する。(Nothing 判定) (2) cn が接続済みかどうかを判断する。(State プロパティ判定など) (3) それらの確認が取れてから RollbackTrans させる。 などといった手順を踏ませた方が良いかもしれません。 あるいはもし、MyDBopen 内できちんとエラー処理されているのであれば、 呼び出し側のその位置で、On Error を仕掛ける必要は無いはずです。 その他、本題から外れるような点として: まず、戻り値を設定している箇所が見当たらないのに、これらの処理が、 Sub プロシージャではなく、Function プロシージャとして実装されている点が 私の目には奇妙にうつりました。 それから、接続処理が If MyDBopen(cn) = "-1" Then となっていますが、この String の "-1" という戻り値の意図も明確では無いと思います。 前後関係から、失敗時のコードなのかな? といった推測を立てる事はできますが、 他にどのようなコードが返される可能性があるのかは、伺い知る事ができませんよね。 > str = "Delete From tbl1 where ID='" & shoId & "'" str は予約語では無いので、変数名として使用可能ですが、それ自体は 「Str 関数」と競合するので、あまり良い命名とは言えないかと。 また、このコードの場合、SQL インジェクションの問題も孕んでいますね。 (変数 shoId 内に、「'」の文字が混入していた場合の対策など)
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.