Microsoft Access 掲示板

ADOでの接続について / 1

1 コメント
views
4 フォロー
1

そもそも、csvもexcelもデータベースとして扱っているはずなのに、
Data Source=を使用しないのは、なぜなのでしょうか?

Data SourceはADODB.Connectionの必須プロパティになりますので
使用していない」 のではなく
タークンさんの記述方法では 「明示していない」 というのが正確な表現になります

Sub Sample1()
    Dim adoCn As ADODB.Connection
    Dim incantation As String
    Dim testDir As String
    
    testDir = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\VBA\hoge\hogehoge"
    
    Set adoCn = New ADODB.Connection
    adoCn.Provider = "Microsoft.ACE.OLEDB.12.0"
    adoCn.Properties("Extended Properties") = "Text;HDR=No"
    adoCn.Open testDir
    incantation = adoCn.ConnectionString
    adoCn.Close
    
    adoCn.Open incantation
    Debug.Print adoCn.State
    adoCn.Close
    Set adoCn = Nothing
    
    MsgBox "接続文字列中のData Sourceの位置は " & _
               InStr(1, incantation, "Data Source", vbTextCompare)
End Sub

  
ちなみに CSVをレコードセットとしてOpenするのが目的でしたら、以下のような簡略表記も可能です

Sub Sample2()
    Dim adoRs As ADODB.Recordset
    Dim testDir As String
    Dim strSQL As String
    
    testDir = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\VBA\hoge\hogehoge"
    strSQL = "SELECT * FROM [Text;DATABASE=" & testDir & ";HDR=NO;].holiday.csv;"
    
    Set adoRs = CurrentProject.Connection.Execute(strSQL)
    If Not adoRs.EOF Then MsgBox "CSVの列値: " & adoRs.Collect(0)
    adoRs.Close
    Set adoRs = Nothing
End Sub
通報 ...