• ベストアンサー

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名は合っています。

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

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

※1 別のMDBを利用しても同じですか? ※2.その部分をVBスクリプトに実行すると、エラーは発生しますか? 以下のコードをメモ帳に張って、拡張子をVBSにして、実行してみてください。 Set cn = CreateObject("ADODB.Connection") cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\出荷配送システム\mftbc.mdb" cn.Close Set cn = Nothing msgbox "処理終了" ※3 2で行ったスクリプトを別のMDBにしてもエラーが発生しますか? cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\出荷配送システム\mftbc.mdb" ↓ cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb"

INOPII
質問者

補足

*1~*3をテストしましたが、全てエラーでした。 スクリプトのエラーメッセージは 「DLLでエラーが発生しました」でした。 で、色々調べていたのですが、今テストしてるPCだけで発生しているようです。 そこで、気になる所を見つけたのですが・・・ そのPCには  Office 2000 SR-1 Professional <- Access2000 と  MS Access 2002 RunTime がインストールされています。 これが何か悪さをしてしるのでしょうか?

その他の回答 (3)

  • m2m10
  • ベストアンサー率0% (0/11)
回答No.4

>Dim strDatabase As String >Dim cn As Object >Dim rs As Object Sub xx() Dim の宣言は SUB の中では??           外 は  Public 等では?

回答No.3

「Office2000と他バージョンのランタイムの同居」 まさにこれが原因っぽいですね。 Office 2000をアンインストール後/インストールしてみて、解消するかな?(想像の世界) すいません。自信は持てません。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

1050YENさんと同様ですが・・ cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strDatabase を cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\出荷配送システム\mftbc.mdb;" にして接続はできるのでしょうか? Dim cn As New ADODB.Connction Dim rs As New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\出荷配送システム\mftbc.mdb;" 'レコードセット処理 rs.Open "・・・・・ 上記では接続どうでしょうか?

INOPII
質問者

補足

すみません。 最初の記述が「Data Source=C:\出荷配送システム\mftbc.mdb;」でした。 で、日本語がダメなのかな?って思ったので変数に代入しました。 因みに「OLDDB.4.0」を「OLEDB.3.51」にしたら "Providerがありません"って怒られました。 ACC97なんて入ってないので当たり前ですが・・・ 下の方の補足にも書きましたが、 Office2000とMS Access2002RunTimeの同居が怪しいので RunTimeをアンインストールして、ダメならOffice2000の再インストールをしてみます。

関連するQ&A

  • アクセス VBAのエラー

    以下のコードをwindowsXPで問題なく使っていましたが、windows7で使ったところ 「保存できません」というエラーメッセージが出ます。ただ全く同じコードを(だと思うのですが)リストボックスのダブルクリックで実行すると作動します。参考に二つのコードを書いておきます。 何か原因に心当たりのある方よろしくお願いします。 (コマンドボタン) Private Sub コマンド選択_Click() Dim namecode As String namecode = リスト会員 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "MT_会員", cn, adOpenKeyset, adLockOptimistic rs.Find "会員IDkai = " & namecode rs!Selectedkai = True '-1 rs.Save Me!リスト会員.Requery リスト印刷会員.Requery rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub (ダブルクリック) Private Sub リスト会員_DblClick(Cancel As Integer) Dim namecode As String namecode = リスト会員 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "MT_会員", cn, adOpenKeyset, adLockOptimistic rs.Find "会員IDkai = " & namecode rs!Selectedkai = True '-1 rs.Save Me!リスト会員.Requery リスト印刷会員.Requery rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub

  • Driver={Microsoft Access

    アクセス2007です。 Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MyFile As String MyFile = "C:\test.accdb" cn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=D:\" & MyFile & ";" rs.Open "SELECT * FROM テーブル1", cn MsgBox "テーブルに接続出来ました。" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ********************************************************* を実行しても実行時エラーになります。 cn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=D:\" & MyFile & ";" を cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & MyFile に変えればうまくいきますが なぜ、"Driver={Microsoft Access Driver (*.mdb)}; DBQ=D:\"じゃダメなのでしょうか? 教えてくださいませ。

  • Access ADOについて質問です。

    Access ADOについて質問です。 以下コードでレコードセットを返す関数を使用しています。 動作的には問題ないのですが、標準モジュール内のレコードセットをClose及びNothingしていないのが気になります。 Private Sub Form_Open(Cancel As Integer) Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset Set rs2 = CreateRecordSet("SELECT * FROM T_Standard;") Set Me.Recordset = rs2 rs2.Close: Set rs2 = Nothing end sub '標準モジュール Public Function CreateRecordSet(strSQL As String) As ADODB.Recordset Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=O:\標準DB\StandardBackEnd.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open strSQL, cn, adOpenStatic, adLockReadOnly Set CreateRecordSet = rs ' rs.Close: Set rs = Nothing   ←この部分 ' cn.Close: Set cn = Nothing   ←この部分 End Function 標準モジュール内ではCloseやNothingしなくてもメモリの開放は行われているのでしょうか? アドバイスよろしくお願いいたします。

  • NEWキーワードとCreateObjectは同じ?

    NEWキーワードとCreateObjectは同じことをするのでしょうか? Sub ADO_Sample1() Dim cn As New ADODB.Connection Set cn = CreateObject("ADODB.Connection") cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" & _ "D:\Mail.mdb;Jet OLEDB:Database;" Debug.Print "ファイルに接続できました。" cn.Close: Set cn = Nothing End Sub このようなコードの時、 Set cn = CreateObject("ADODB.Connection") は、あってもなくても問題ないようです。 NEWとCreateObjectがある場合は、 2度データベースに接続してしまうのでしょうか? NEWとCreateObjectがあってもエラーにならない理由を教えてください。

  • 【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」を実行した後は自動的に保存されるのでしょうか? よろしくお願いします。

  • ADO 「Set」は使ったほうがいいのでしょうか?

    Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordse End Sub Sub test2() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset End Sub この二つは同じ意味ですか? 「Set」は使ったほうがいいのでしょうか? よろしくお願いします。

  • ADOでAccessファイルに接続して、ファイルの

    ADOでAccessファイルに接続して、ファイルの更新日時を取得するには? access2003です、 Private Sub 更新日時を取得() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MyFileName As String MyFileName = "D:\My Documents\システム.mdb" cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & MyFileName 'ここで更新日時を取得 rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub この状態で、更新日時を取得するにはどうすればいいでしょう? ご教授よろしくお願いします。

  • VBSでADOを使ってaccessのテーブルに接続

    VBSでADOを使ってaccessのテーブルに接続する方法は? Sub ADO_test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & "D:\【Access】サンプル.mdb" rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic MsgBox "test成功です" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub をACCESSVBAで実行すると成功しますが 全く同じコードをメモ帳に貼り付けてtest.vbsで保存し、ダブルクリックすると、 行:3 文字:11 エラー:ステートメントの末尾が不正です。 コード:800A0401 のエラーになります。 VBAは少しわかるのですが、VBSに関しては初心者です。 どこを修正すればコードが通るのか教えてください。

  • ACCESS VBA

    ACCESSで検索フォームを作りたいと思っています。 VBAを使って行きたいと思うのですが、うまくいきません。 希望としては、該当するレコードのデータを抽出したいです。 よろしくお願いいたします。 ※現段階でのソースを書いてみました。 最終的に行いたい処理とは違うのですが、根本的に間違っているようなので簡略化しました。 /------------------------------------------------/ Private Sub コマンド1_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim sql As String '接続 Set cn = CurrentProject.Connection 'レコードセットを取得 Set rs = New ADODB.Recordset sql = "SELECT * FROM 従業員データ " & _ "WHERE 年齢=30" rs.Open sql, cn, adOpenDynamic, adLockReadOnly rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub /------------------------------------------------/

  • Access VBAでExcel連携時のエラー(ワークシート指定時)

    いつもお世話になっております。 現在、ExcelファイルのデータをAccessに取り込むVBでエラーが起こります。 (問題のおこる部分のみ、ソースを下記に記します。) ★の部分で、「実行時エラー1004 'Worksheets'メソッドは失敗しました:'_Global'オブジェクト」 というエラーが、出ます。 しかも、毎回ではなく、出たりでなかったりします。 これはなぜでしょうか? 定義の指定やappの指定に問題があるのでしょうか。 おわかりになる方がいらっしゃいましたら、ご指導願います。 宜しくお願いします。 --------------------------------------------------- Private Sub 取込み_Click() '■変数 Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim app As Object Dim iRow As Long Dim iUsed As Long Dim iCnt As Long (中略) '■接続 Set cn = CurrentProject.Connection '■Excelアプリの起動及びファイルオープン Set app = CreateObject("Excel.Application") app.Workbooks.Open filename:=CurrentProject.Path & "\h.xls" '■レコードセットの取得 Set rs = New ADODB.Recordset rs.Open "マスタ", cn, adOpenForwardOnly, adLockOptimistic '■DBへのレコード追加 'h.xlsの取り込みスタート行設定 iRow = 13 ''h.xlsの最終使用行 取得および設定 iUsed = Worksheets(1).UsedRange.Rows.Count'★ 'MsgBox "使用行は" & iUsed & "です。" (以下略)。。。。

専門家に質問してみよう