VBA修正後にADOが実行できなくなる問題の解決方法

このQ&Aのポイント
  • VBA修正後にADOが実行できなくなる問題について解説します。アクセス2003やVistaを使用している場合に発生する可能性があります。
  • 問題が発生した際に表示されるエラーメッセージや原因について詳しく説明します。
  • 問題の解決については、いくつかの情報源を参考にしましたが、完全な解決策は見つかっていません。
回答を見る
  • ベストアンサー

vbaを修正するとADOが実行できなくなる。

アクセス2003、vistaを使用しています。 vbaを使っていて、ADOを使っています。 アクセスを使っている間に いくつか修正したいところがあり、vbaコードをいじって保存し、 vbaを実行すると、 CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.FullName ←の部分で RS.Open "Qタイトル", CN, adOpenStatic, adLockPessimistic 実行時エラー '-2147467259(80004005)' 「マシン '<マシン名>' のユーザー 'Admin' が データベースを開けない状態、またはロックできない状態にしています。」 となります。 一度ファイルを閉じて再度開くと問題なく作業できますが これは何故起こるのでしょうか? 一応調べてみましたが http://www.accessclub.jp/bbs/0017/beginers7727.html http://okwave.jp/qa4388870.html 解決には至りませんでした。 よろしくお願いします。

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

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

確認ですが、 >RS.Open "Qタイトル", CN, adOpenStatic, adLockPessimistic ではなく、 RS.Open "Qタイトル", CurrentProject.Connection, adOpenStatic, adLockPessimistic でエラーになるわけですね?

nifufu2
質問者

お礼

失礼しました。 CurrentProject.Connection, adOpenStatic, adLockPessimistic でうまくいきました。 再度有難うございます。

その他の回答 (1)

回答No.1

http://www.accessclub.jp/ado/04.html によると、 >CurrentProjectオブジェクトは、現在使用中のデータベースを表すオブジェクトです。 つまり、CurrentProject.FullNameはすでに「Open済み」ということになります。それをまた「Open」しようとしていることに原因があると思われます。上記URLを参考にすれば、 >CN.Open "Provider=・・・" はナシにして、 RS.Open "Qタイトル", CurrentProject.Connection, adOpenStatic, adLockPessimistic のみでどうでしょう?

nifufu2
質問者

お礼

早速のご回答ありがとうございます。 なるほど。なんだかわかりました。 ちなみに CN.Open "Provider=・・・"をなしにして いきなり RS.Openにすると "この操作を実行するために接続を使用できません。このコンテキストで閉じているかあるいは無効です。" となってしまいます。 これまたなんででしょうね?

関連するQ&A

  • 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 カレントレコードを取得したい

    フォーム1にテーブル1をドラッグしました。 そして図の状態で 現在カーソルがあるレコードの値をadoで取得することは可能ですか? 図ではカレントレコードは2レコード目なのに CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.FullName RS.Open "テーブル1", CN, adOpenStatic, adLockPessimistic MsgBox RS("書名") とすると1レコード目の値が表示されます。 本当は2レコード目の 「「なりたい自分」になれる中、、、」 を取得したいです。 どうすれば▲(横)ボタンのあるレコードをカレントレコードとして、 そのレコードの値を取得することが可能でしょうか? ご教授よろしくお願い致します。

  • ADO フィルタ 変数

    Sub test() Dim 月 As Long cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.FullName rs.Open "Tテーブル", cn, adOpenStatic, adLockPessimistic 月 = 5 rs.Filter = " 処理日 = '" & #"& 月 &"/29/2009# & "'" MsgBox rs.RecordCount Set rs = Nothing Set cn = Nothing End Sub のように月に変数を入れ、フィルタをかけたいのですが 上記のコードでエラーになってしまいます。 アドバイスよろしくお願いします。

  • アクセス2007でADOは使えないのでしょうか?

    デスクトップにあるDatabase1.accdbを開いて ツールの参照設定で Microsoft ActiveX Data Objects 2.8 Library にチェックを入れ Sub a() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName とやろうとしたら、 ************************************************************ 実行時エラー '-20147467259(80004005)': データベースの形式'C:\Users\○○\Desktop\Database1.accdb'を認識できません。 ************************************************************ となってしまいます。 再起動しても同じです。 ADOは2007では使えないのでしょうか?ご回答よろしくお願いします。

  • 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でBetween は使えないのでしょうか?

    ADOで期間で抽出したいのですが rs.Open strテーブル, cn, adOpenStatic, adLockPessimistic rs.Filter = "計上日 = #2015/01/01#" は問題なく通るのですが、 rs.Open strテーブル, cn, adOpenStatic, adLockPessimistic rs.Filter = "計上日 Between #2015/01/01# And #2015/01/31#" だと 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 と言うエラーになります。 adoでBetween は使えないのでしょうか?

  • アクセス2003 「ODBC--リンク テーブル'テーブル1'での更新に失敗しました。」となる。

    Sub test() Public cn As New ADODB.Connection Public rs As New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.FullName rs.Open "Qクエリ", cn, adOpenStatic, adLockPessimistic rs("進捗") = "" rs.Update  ←ここでエラー rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub のコードを実行すると アクセスが「応答なし」になり、その後 「ODBC--リンク テーブル'テーブル1'での更新に失敗しました。」となります。 Qクエリはテーブル1とテーブル2でできています。 毎回発生するエラーではなく、エラーにならない時もあります。 何か原因がわかる方いらっしゃいますか? ご教授よろしくお願い致します。

  • 実行時エラー'-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自体はテーブルもクエリもフォームも何も開いていない状態です。 一度アクセスを終了させて再起動させればうまくできるのですが、何が原因でこのメッセージが出るのでしょうか? もしわかれば教えてください。 よろしくお願いします。

  • Excel VBA について教えて下さい

    Excel VBA でAccess接続します 今までは Sub aaa() Set cn = CreateObject("ADODB.Connection") cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub のように使っていましたが(単一プロシージャ) Set cn = CreateObject("ADODB.Connection") の部分をパブリックにして Sub bbb() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub 別のプロシージャからも、使えるためには パブリックにするための方法を教えて下さい

  • 【ADO】「Execute」を使うときは「Update」は不要?

    Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic cn.Execute "DELETE FROM テーブル1" rs.Update '保存 Set rs = Nothing Set cn = Nothing End Sub を実行したとき テーブル1にデータがあるときはエラーにはならないのですが 何もデータがないときは「rs.Update」でエラーになります。 なので「Update」は消して実行していますが 「Update」がなくても「Execute」を実行した後は自動的に保存されるのでしょうか? よろしくお願いします。

専門家に質問してみよう