アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLServer2000とAccess2000(adpファイル)でシステムを組んでいます。

データベースとの接続は、アプリケーションの「データリンクプロパティ」内で設定してあり、初期立ち上げフォームに次のコードを記述して接続しています。

Option Compare Database
Option Explicit
Public cn As ADODB.Connection

Sub p_接続開始()  ‘データベースとの接続を行うプロシージャ
Set cn = Application.CurrentProject.Connection
cn.CursorLocation = adUseClient ‘カーソルをユーザークライアントにする
End Sub

その後、フォームを開いた状態で一定時間経過すると、PCが「システムスタンバイ」状態になり、スタンバイを解除すると次のエラーが出て接続できません。

「[DBNETLIB][ConnectionWrite(send()).]一般的なネットワークエラーです」

しかしいろいろ試した結果、フォームのクリックイベント時に、次のコードを記述したところ、一時的に接続できるようになり、入力フォーム上のデータがSQLServerに保存出来るようになりました。

Set cn = New ADODB.Connection
cn.ConnectionString = Application.CurrentProject.Connection
cn.Open

しかしその後、このフォームを閉じたり、他のフォームに移動したりすると、「[DBNETLIB][ConnectionWrite(send()).]一般的なネットワークエラーです」が出てエラーとなります。

データベースを終了し、再度開き直すと、完全に元通りに復活しますが、上記でフォームを閉じたり、移動したときに、エラーが出ないようにするにはどうしたらいいでしょうか?

Set cn = New ADODB.Connection
cn.ConnectionString = Application.CurrentProject.Connection
cn.Open

この記述は、試行錯誤の末、出来たものであり、これが本当に正しいかどうかわかりません。
どなたかわかる方教えてください。

A 回答 (1件)

エラーとなる理由は、スタンバイ解除後の、フォームのクリックイベント時に実行され保存した変数等が、クリックイベント終了時に全て無くなるからです。

この現象をスコープから外れる等と言います。

参考url : http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%B3% …

ちなみに、何らかの処理中にスタンバイ等になりネットワークが切断されてしまった場合は、そこでエラーとし、アプリケーションを強制終了し、再度、最初から実行させるのが一般的です。
※そうしないと、データベースの整合性が崩れてしまう可能性があるため。
    • good
    • 2
この回答へのお礼

SherlockHolmes2さん

ご回答ありがとうございました。

>スタンバイ等でネットワークが切断されてしまった場合は、そこでエラーとし、最初から実行させるの>が一般的。

やはりそうですか。
スタンバイ等にしないよう、運用で逃げることを考えます。
ありがとうございました。

お礼日時:2012/10/16 15:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す