.Providerの書き方は、どっち?

このQ&Aのポイント
  • SQLでExcelのデータを参照、更新、挿入、削除する関数の作成に挑戦中。ADODB.Connectionの.Providerの指定要領について疑問。
  • ADODB.Connectionの.Provider指定には「MSDASQL」と「Microsoft.ACE.OLEDB.12.0」の2つの方法があるが、どちらでも問題なく動作する。
  • 皆さんはどちらの方法で書いているか、また、2つの方式の存在理由について教えてください。
回答を見る
  • ベストアンサー

.Providerの書き方は、どっち?

 一昨日よりSQLでExcelのデータを参照、更新、挿入、削除する関数の作成に挑戦しています。で、一応は、動作しているように思えます。で、その過程で一つの疑問が・・・。それは、ADODB.Connectionの.Providerの指定要領が2つあるってことです。   .Provider = "MSDASQL"   .Provider = "Microsoft.ACE.OLEDB.12.0"  両者は、対象ファイルの指示要領が違うようです。が、どちらも問題なく動きます。 【質問】皆さんは、どちらで書いておられますか?  また、この2つの方式は、なぜ存在しているのでしょうか? PS、なお、この回答で先の質問の結果を添付図で示しておきます。  回答された方に、改めてお礼申し上げておきます。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

小生は、初心者で、熟達者ではないので、参考になりそうな、記事程度を挙げてみます。 質問者の直前の質問もみて感じたのですが、目についた、WEB記事を拾い集めたために、その解説記事が前提にしている、「プロイダ」にも目に行かず、こういうところへ来てしまったと思います。 まず主目的が、エクセルのブックのシートを読んだりして、その際SQLを使いたい、ための勉強でしょうか。その場合はエクセルのMSクエリとそれをVBAで使うのもあります(参考)。 ーー さて、プロバイダとは、「処理してもらうデータベースエンジン(1つのミドルウエア的ソフト)」の名称です。 https://www.grapecity.com/developer/support/powernews/column/how_to_database/006/page05.htm の 「プロバイダ 」にあるように、質問者(の利用環境や関心)に関係のない、プロバイダもあり、WEB照会すると、関係のない(他のケースの)WEB記事も混じるわけです。あまり、その記事のことを、使える「前提」を明記してない記事も多いです。 >MSDASQLに関しては https://teratail.com/questions/36859などの記事があります。 >MSはこの項目において方針転換を繰り返しており、いくつかのサイトを読む限り現在はODBCが推奨に変わっていると読み取れます。「oledb サポート終了」で検索してみてください。 ただし、今も使えるのではないですか。 >ADOとDAO https://support.microsoft.com/ja-jp/help/168335/info-using-activex-data-objects-ado-via-visual-basic >Microsoft Access(.mdb、.accdb)のODBC、OLEDBドライバーに関するまとめ http://qlikview-training.ashisuto.co.jp/microsoft-access-odbc-oledb-driver/ >oledb 速度 - OLE DBとODBCデータソースの違いは何ですか? https://code.i-harness.com/ja-jp/q/192ff >Jet / ACE エンジン http://dxr165.blog.fc2.com/blog-entry-117.html

関連するQ&A

  • DBパスワードありVBAアクセスについて

    Access2010を使用しております。 Excel2010からAccessにVBAからSelect文でデータセット取得しようとしております。 接続には以下の記述で接続しようとしてますが、オートメーションエラーになります。 Set con = New ADODB.Connection con.Provider = "Microsoft.Ace.OLEDB.12.0" con.Properties("Jet OLEDB:Database Password") = Password con.Open "C:\\Directory" または con.Provider = "Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Directory;Jet OLEDB:Database Password=Password" con.Open などいろいろ試してますがうまくいきません。 パスワードがなければ以下の記述で開けるのですが。 con.Provider = "Microsoft.Ace.OLEDB.12.0" con.Open "c:\\Directory" アドバイス等お願いします。

  • Newがどのような役割をしているのかわからない

    エクセルからアクセスの更新クエリを実行する際に エクセル側のコードで Sub ACCESSのアクションクエリを実行する() Dim cn As ADODB.Connection Dim myCmd As ADODB.Command Set cn = New ADODB.Connection Set myCmd = New ADODB.Command cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ".accdb;Jet OLEDB:Database" だとうまくいきませんでしたが、 Dim cn As New ADODB.Connection にしたらうまくいきました。 Newを付けることによって成功したのですが、 Newがどのような役割をしているのかわからないので教えてください。

  • 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があってもエラーにならない理由を教えてください。

  • 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 になるのでしょうか?

  • パスワードがかかってる場合どのようにVBAで指定す

    Set cnEx = CreateObject("ADODB.Connection") With cnEx .Provider = "Microsoft.ACE.OLEDB.12.0" .Properties("Extended Properties") = "Excel 12.0" .Properties("Data Source") = "C:\Users\\test.xlsm" .Open End With VBAでこのコードでエクセルファイルを開く時に パスワードがかかってる場合どのようにVBAで指定すればいいでしょうか?

  • 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のOPENで実行時エラー

    VB6.0でACCESS2000のデータに接続しようとしていますが、Openの箇所で「実行時エラー -2147024769(8007007f) 'Open'メソッドは失敗しました:'_Connection'オブジェクト」になり困っています。 参照設定:Microsoft ActiveX Data Objects 2.7 Library Dim oConn As ADODB.Connection Set oConn = New ADODB.Connection Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\OLDATA.MDB") ご回答よろしくお願いします。

  • 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にアクセスするのはどのようにしたらよろしいでしょうか?

  • 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 です。 ★ 印の所でエラーになります。 宜しくお願いいたします。

  • ASPでのSQLインジェクション対策

    ASPにて、ADOでAccessにアクセスする際にSQLインジェクション対策はどのようにしたらよいでしょうか。 現状は以下の様にしています。(name)は画面から受け取ったパラメータです。 Set aConn = CreateObject("ADODB.Connection") aConn.Provider = "Microsoft.Jet.OLEDB.4.0" aConn.ConnectionString = Server.MapPath("DB.mdb") aConn.open SQL = "SELECT A FROM TBL WHERE NAME = " & name ...... 宜しくお願いします

専門家に質問してみよう