• ベストアンサー

ExcelVBAでのAccessデータベースとの接続

ExcelのVBAによるAccessデータベースの操作を勉強中(始めたばかり)です。 ソフトバンク パブリッシング出版の「Excel VBA データベース構築」で勉強しているのですが、その中で、外部データとの接続に関して以下のような例文がありました。 Sub openADOdb() Dim myADOcon As ADODB.Connection Set myADOcon = New ADODB.Connection myADOcon.Open _ "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\残高DB.mdb" myADOcon.Close Set myADOcon = Nothing End Sub これを実行すると、myADOcon.Open ”Provider~ のところで、以下のエラーが発生しました。 実行時エラー’3706’: プロバイダが見つかりません。正しくインストールされていない可能性があります。 これはExcelもしくはAccessが正しくインストールされていないということなのでしょうか。対処法としてはどのような方法がありますか。 また、本には「プロバイダ名には、どのOLE DBプロバイダを使用するかをしていします。この文字列は、OLE DBプロバイダのマニュアルやヘルプを調べると記載されています。」と出ているのですが、OLE DBプロバイダのヘルプとはどのようにしたら見れるのでしょうか。 なお、Excel97とAccess97を使っています。 以上2点よろしくお願いします。

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

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

97ではADOは使えません。 ADOは2000からです。 2000の場合はAccess2000の形式のデータベースに接続する場合プロバイダは Microsoft.Jet.OLEDB.4.0 以上のバージョンを指定します。 "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\残高DB.mdb" ではなく "Provider=Microsoft.Jet.OLEDB.4.0;" & _"Data Source=C:\残高DB.mdb" で出来るはずです。 97で同様の処理をするならDAOを使えばできます。 DAOを使用してAccessデータベースに接続するんです。 OpenDatabase メソッドの引数にデータベース名を指定します 「参照設定」で [Microsoft DAO 3.5 Object Library] に参照します。 Dim ws As DAO.Workspace, db As DAO.Database Dim rs As DAO.Recordset Set ws = DBEngine.Workspaces(0)  'デフォルトのワークスペースを定義 Set db = ws.OpenDatabase("C:\残高DB.mdb") 'データベースを開く Set rs = db.OpenRecordset("Table1", dbOpenDynaset) 'テーブル名を指定してレコードセットを作成する こんな感じで出来ますよ。

takaandhiro
質問者

お礼

ありがとうございました。 よく分かりました。

その他の回答 (3)

回答No.3

Excelはちょっとわかりませんが、AccessのADO接続は2000からですので、 97では無理だと思います。 OFFICEをバージョンアップするか、DAOの勉強をするかですね・・・

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

OSは何でしょう?Jet.OLEDB.3.51がインストールされていないと思われます。 OSやIEのバージョンによってはOLEDBのバージョンが異なるものが標準で入っていることのほうが多いので、バージョンの個所を変えれば接続できると思います。 私がよくやっている”インチキ”な確認方法です。 1.どこでもいいんで、拡張子が.udlのファイルを作成する(空でかまわない)。アイコンが変わればADO(MDAC)がインストールされている。 2.ファイルをダブルクリックで開くと”データリンクプロパティ”が表示されるので、プロバイダのタブを選択し、インストールされているJetプロバイダのバージョン番号を確認する。 ちなみに私のWin2000マシンでは、4.0が入っていました。 なお、Office97ではADOはインストールされません。 というか、Office97のあとに世に出てきたものなんで。

takaandhiro
質問者

お礼

ありがとうございました。 お教えいただいた確認方法は便利そうなので、私も使わせていただきます。

  • mld_sakura
  • ベストアンサー率20% (264/1282)
回答No.1

myADOcon.Open _ "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\残高DB.mdb" ↑「Open」ではなく、「ConnectionString」ではないでしょうか? 上記の接続を確率してから、「myADOcon.Open」だと思います。

関連するQ&A

  • ExcelVBAからAccessにアクセスする

    ExcelVBAからパスワード付きAccessにアクセスする ExcelVBAからADOでAccessに次のようにしてアクセスしています。 Dim Cnn As ADODB.Connection Set Cnn = New ADODB.Connection Cnn.ConnectionString = \"Provider=Microsoft.Jet.OLEDB.4.0;\" _ & \"Data Source=\" & mdbのフルパス Cnn.Open パスワード付きのmdbにアクセスするのはどのようにしたらよろしいでしょうか?

  • EXCEL vbaからACCESSのクエリを開く

    EXCEL2010 WEBを参照してEXCEL VBAでACCESSのクエリを開くマクロを流用しました。 下記がマクロの内容です。 Private Sub Import() Dim db As ADODB.Connection Dim rs As ADODB.Recordset 'ACCDBファイルに接続します Set db = New ADODB.Connection db.Provider = "Microsoft.Ace.OLEDB.12.0" db.Open "C:\work\TEHAI.accdb" 'レコードセットを開きます Set rs = New ADODB.Recordset 'Accessのクエリを開く rs.Open Source:="TEHAI", ActiveConnection:=db If rs.EOF Then MsgBox "抽出した結果、レコードが見つかりません。" Else ' レコードをシートへ貼り付ける Range("A1").CopyFromRecordset rs End If rs.Close Set rs = Nothing Set db = Nothing End Sub これを実行すると、 抽出した結果、レコードが見つかりません。 が表示されます。 ACCESS単体でTEHAIクエリを実行したら、約3万件くらいヒットします。 EXCELマクロから実行したらACCESSからデータをもってこられません。 なぜレコードが見つかりません、 となるのでしょうか? マクロのどこがおかしいのか、教えていただきたく。 ちなみに、もともとの内容から変更したのは db.Open "C:\work\TEHAI.accdb" rs.Open Source:="TEHAI", の2ヶ所だけです。

  • VB6.0とaccessのDBを接続する

    初めまして。 件名のようなことを実行する際、 以下のソースを参考にしようと思ったのですが、 ******************************************* Dim cn As New ADODB.Connection Dim rc As New ADODB.Recordset ' 接続を確立する cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\My Documents\db1.mdb;" ' テーブル名を指定してレコードセットを作成する rs.Open "Table1", cn, adOpenKeyset, adLockOptimistic ************************************* > cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ > "Data Source=C:\My Documents\db1.mdb;" この部分の接続文字はどのようにしたら取得できるのでしょうか? SQLserverのときは、コンポーネントから Microsoft ADO Data Control 6.0(AP4)(OLEDB) を追加し、プロパティでOLE DBプロバイダを選択して接続文字を取得したのですが、accessに繋ぐのは初めてで、わかりません。 どなたか宜しくお願いいたします!!

  • ASPによる アクセス2000のデータベース更新について

    アクセス2000で作成したデータベースに ASPでデータベースを更新しようとしたのですが、エラーとなって更新できずにいます。 (アクセスデータベース内容) ID F1 F2 1 TEST1 TEST2 2 1 2 3 4 5 4 23 ※ID の 5  に 23 を登録したい。 (ASP内容) <% ' データベースへの接続を開始 Set cn = Server.CreateObject("ADODB.Connection") cn.Open "Driver={Microsoft Access Driver (*.mdb)}; " & _ "DBQ=" & Server.Mappath("TESTdb1.mdb") cn.Execute"INSERT INTO TTT(ID,F1) VALUES(5,23);" %> (エラー内容) エラー タイプ Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [Microsoft][ODBC Microsoft Access Driver] 更新可能なクエリであることが必要です。 /SQL-TEST/ncsch1.asp, line 7 アクセスの追加クエリで、INSERT INTO TTT(ID,F1) VALUES(5,23); を 実行したら、問題無く 5 23 が登録できましたので、データベース自体に他からの実行の場合、更新出来ないような 設定になっていると思うのですが、対処方法がわかりません。 どうすればよいか教えて頂けないでしょうか?

  • データベースを切り替えて使う方法

    初心者です。 環境:WindowsXP,VB6,Access2000 Access2000のデータベースを切り替えて使いたいのですが、うまく動作しません。 ADO使用しています。 普通に考えて、いったんつないでいたDBを mRs.Close mCn.Close Set mRs = Nothing Set mCn = Nothing で接続をいったん切断して、 Call ConnectType で再度DBに接続しましたが、接続されているのは前のDBです。 1 原因がわかりません。 2 DBを切り替えて使う方法がわかりません。 もちろん切り替えの処理以外は現在正常に動作しています。 ご教授よろしくお願いいたします。 <プログラム> Private mCn As ADODB.Connection Private mRs As ADODB.Recordset Private DBfile As String Private Const DEF_CONNECT As String     = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\word.mdb" Private Const DEF_SQL As String = "Select * From tango_tbl" Private Sub ConnectType() Set mCn = New ADODB.Connection mCn.ConnectionString = DEF_CONNECT mCn.Open Set mRs = New ADODB.Recordset mRs.Source = DBfile mRs.ActiveConnection = mCn mRs.CursorType = adOpenDynamic mRs.LockType = adLockOptimistic mRs.Open End Sub

  • 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 別のプロシージャからも、使えるためには パブリックにするための方法を教えて下さい

  • データグリッドコントロールに表示されません!

    OS:XP、VB6、ACCESS2000の環境でADOの勉強をしています。 ある参考書を見て、次のサンプルを実行しました。 【サンプル】 フォームにデータグリッドコントロールを貼り付ける。 フォームのLoadイベントプロシージャ内でデータベース(MDB)に接続し、レコードセットを取得して、データグリッドコントロールに取得したレコードセットを表示させる。 データベースはACCESS97で作成されたものです。 (ソース) --------------------------------------------------------------- Option Explicit 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.3.51;Data Source=G:\VB_TEST\Book.mdb" cn.Open 'レコードセットを取得 Set rs = New ADODB.Recordset rs.Open "本", cn, adOpenStatic 'データグリッドコントロールに取得したレコードセットを表示 Set DataGrid1.DataSource = rs End Sub --------------------------------------------------------------- 上記のプログラムを実行するともちろんうまく表示されました。 が、接続プロバイダ名を "Provider=Microsoft.Jet.OLEDB.3.51;"  ↓↓↓↓↓ "Provider=Microsoft.Jet.OLEDB.4.0;" にすると表示されません。 そこで、データベースをACCESS2000で作成し直し、実行してもダメです。 この処理はJet4.0では出来ないのでしょうか?

  • 【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

  • エクセル側からアクセスへデータ転送

    エクセル側からアクセスにデータ転送する時に Sub Data_Add() Dim db As New ADODB.Connection Dim Rs As New ADODB.Recordset db.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Users\Owner\Desktop\1.mdb;" アクセス2003にデータを転送する場合はこれでうまくいきましたが、 アクセス2007にデータを転送しようと、 \1.accdb;"とすると、データベースの形式を認識できません。となってしまいます。 どうしたらいいでしょうか? だれか教えて頂けませんか?

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

専門家に質問してみよう