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

このQ&Aのポイント
  • SQLネットワークエラーが発生した際の再接続について解説します
  • SQLServer2000とAccess2000でシステムを構築している場合、一定時間経過後にPCがシステムスタンバイ状態になり、再起動後に接続エラーが発生します
  • フォーム上のコードを一部変更することで一時的な接続が可能になりますが、一度フォームを閉じたり移動したりすると再びエラーが発生します。問題の解決方法をご教示ください
回答を見る
  • ベストアンサー

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

noname#192871
noname#192871

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

  • ベストアンサー
回答No.1

エラーとなる理由は、スタンバイ解除後の、フォームのクリックイベント時に実行され保存した変数等が、クリックイベント終了時に全て無くなるからです。この現象をスコープから外れる等と言います。 参考url : http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97 ちなみに、何らかの処理中にスタンバイ等になりネットワークが切断されてしまった場合は、そこでエラーとし、アプリケーションを強制終了し、再度、最初から実行させるのが一般的です。 ※そうしないと、データベースの整合性が崩れてしまう可能性があるため。

noname#192871
質問者

お礼

SherlockHolmes2さん ご回答ありがとうございました。 >スタンバイ等でネットワークが切断されてしまった場合は、そこでエラーとし、最初から実行させるの>が一般的。 やはりそうですか。 スタンバイ等にしないよう、運用で逃げることを考えます。 ありがとうございました。

関連するQ&A

  • VB6とSQL SERVER 2005のADO接続方法

    VB6とSQL SERVER 2005(Developer Edition)のADO接続方法がわかりません。 今までSQLSERVER2000で開発していたのですが、DBをSQLSERVER2005に 変更したところ接続できませんでした。 以下はSQLSERVER2000時のソースなのですが、 2005の場合ConnectionStringはどうやればいいのでしょうか? --------------------------------------- Dim rs As ADODB.Recordset Dim cn As ADODB.Connection Set rs = New ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "Provider=SQLOLEDB.1;" & _ "User ID=" & strUsr & ";" & _ "Data Source=" & strSvr & ";" & _ "Password=" & strPass cn.CursorLocation = adUseClient cn.Open --------------------------------------- 初歩的な質問で申し訳ありませんがどなたかお助けください。

  • 実行時エラー'-2147467259(80004005)':

    エクセルからADOでアクセスに繋ごうとしたときに 実行時エラー'-2147467259(80004005)': マシン'マシン名'のユーザー'Admin'がデータベースを開けない状態、またはロックできない状態にしています。 というエラーが出てしまいます。 書いているコードは以下です。 Public cn As ADOdb.Connection Set cn = New ADOdb.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb" test.mdb自体はテーブルもクエリもフォームも何も開いていない状態です。 一度アクセスを終了させて再起動させればうまくできるのですが、何が原因でこのメッセージが出るのでしょうか? もしわかれば教えてください。 よろしくお願いします。

  • VBでAccess DBにinset処理をかける

    Dim cn As ADODB.Connection '接続 (1)Set cn = CurrentProject.Connection '実行 cn.Execute strSqlm←SQLがはいっています。 '終了 cn.Close: Set cn = Nothing (1)でオブジェクトが必要です。というエラーがでます。 解決策をお願いします。

  • 【VB】データグリッドコントロールにデータベースを表示させたい

    お世話になります。 フォーム上にMicrosoft DataGrid Control 6.0(OLEDB)を置いて、 データベースと接続し、データベースを表示させたいのですが、 データベースエンジンがMicrosoft.Jet.OLEDB3.51だとうまく表示してくれますが 4.0だとなぜか表示してくれません。 原因、対策などわかるでしょうか? ソースは以下のように単純なものです。 Private cn As ADODB.Connection Private rs As ADODB.Recordset Private Sub Form_Load() Set cn = New ADODB.Connection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\パスワード管理.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open "パスワード", cn, adOpenStatic, adLockReadOnly Set DataGrid1.DataSource = rs End Sub

  • SQL文の最後に「;」はいらないのでしょうか?

    VBAのADOについて質問です。 SQL文の最後には「;」を付けなくちゃいけないものだと思っているのですが ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Private Sub test_Click() Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Set CN = CurrentProject.Connection Set RS = New ADODB.Recordset SQL = "SELECT * FROM Tテーブル" ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ でも問題なくコードが動きました。 SQL文の最後に「;」はいらないのでしょうか? ちなみに SQL = "SELECT * FROM Tテーブル;" でもエラーになりませんでした。

  • DataGridに表示されない

    VB6でMySQL4.1に接続して MySQL内にあるデータベース"sample"の テーブル"総合"をDataGridに表示したいのですが できません。 エラーメッセージは "実行時エラー '7004': 行セットにはブックマークを設定できません" とでます。 どうしたら表示されるのでしょうか? Private Sub form_load() Dim cn As ADODB.Connection 'オブジェクト Dim rs As ADODB.Recordset 'データベースに接続 Set cn = New ADODB.Connection 'データベース:Sheet1 cn.ConnectionString = "Provider=MSDASQL.1;" _ & "Data Source=sample" cn.Open 'レコードセットの取得 Set rs = New ADODB.Recordset rs.ActiveConnection = cn rs.Source = "総合" rs.CursorType = adOpenStatic rs.LockType = adLockOptimistic rs.Open Set DataGrid1.DataSource = rs End Sub

  • ADO1とADO2は意味は同じですか?

    Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection を簡素化したものが Dim cn As New ADODB.Connection になるのでしょうか?

  • ADO 「認証に失敗しました」

    ADOでデータベースに接続したいのですが ”実行時エラー -2147217843(80040e4d) 認証に失敗しました。” になります。 コードは Sub ado() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source" & CurrentProject.FullName ★ rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub です。 ★ 印の所でエラーになります。 宜しくお願いいたします。

  • ADO+ODBCでテーブルに接続する時のエラー

    VB6.0(SP6)から、ADOとODBCでMySQLに接続しました。 '-------------------------------------------- Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim strCn As String Set cn = New ADODB.Connection strCn = "dsn=MySQL;uid=user;pwd=" cn.CursorLocation = adUseClient cn.Open strCn Set rs = New ADODB.Recordset rs.Open "select * from tbl;", cn, adOpenDynamic, adLockPessimistic Set DataGrid1.DataSource = rs '-------------------------------------------- データグリッドコントロールにテーブルの内容を表示させようとしているのですが、rs.Openの行でエラーが出てしまいます。エラーメッセージは「複数ステップの操作でエラーが発生しました。各状態の値を確認してください」です。 SQL文を変えて試してみると、何故かデータ型がDECIMALのカラムが含まれているとエラーになります。 DECIMALだといけないかと思うと、挿入は問題なく出来ます。 cn.Execute "insert into tbl (id,decimal_clm) values (10,900);" ご存知の方がいらっしゃいましたら宜しくお願いします。

    • ベストアンサー
    • MySQL
  • VBからAccessへの接続でエラー

    OS:Win2K SP4 SOFT:VB6 ACCESS2K Dim strDatabase As String Dim cn As Object Dim rs As Object Sub xx() Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") strDatabase = "C:\出荷配送システム\mftbc.mdb" cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strDatabase ・       ・       ・ End Sub 上記ソースの「cn.OPEN」メソッドでエラーが発生します。 エラー内容は 'OPEN'メソッドは失敗しました。'_Connection'オブジェクト データベースに接続できません。 です。 何が原因なんでしょうか?? mdbのあるPath,File名は合っています。