こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLネットワークエラー時の再接続

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

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

投稿日時 - 2012-10-16 13:37:01

QNo.7751204

すぐに回答ほしいです

質問者が選んだベストアンサー

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

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

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

投稿日時 - 2012-10-16 14:05:18

お礼

SherlockHolmes2さん

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

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

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

投稿日時 - 2012-10-16 15:31:59

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-