Excel VBA で CSVファイル を SQL Server に登録してみる

環境はWin10 Pro x64 + Excel2013 x32 + SQL Server 2016 Express x64

使用したデータはこちら郵便番号検索の17ISHIKA.CSV

使用したテーブルはこちら

検索してみると native driver 使ってる例が多いんだけど、odbcで試してみる

CSVのバリデーションチェックは どういうのがいいんだろうなぁ・・・

Connection.CursorLocation = adUseClient の記述がないと Recordset.RecordCount = -1 に固定となること位かな?

メモなので 必要な部分のみ抜き出し(transaction 位 書けとも思うが)

    Dim adoCon      As ADODB.Connection
    Dim adoRst      As ADODB.Recordset
    Dim vAry        As Variant
    Dim host        As String
    Dim user        As String
    Dim pass        As String
    Dim conn        As String
    Dim strSQL      As String
    Dim fd          As Integer
    Dim strLine     As String
    Dim fName       As String

    host = "SQLSVODBC32"    'コンパネから odbc 32bit で設定
    user = "userName"
    pass = "passwd"
    fName = "/path/to\17ISHIKA.CSV"
    fd = FreeFile

    conn = "DSN=" & host & ";UID=" & user & ";PWD=" & pass
    Open fName For Input As #fd

    Set adoCon = New ADODB.Connection
    adoCon.ConnectionString = conn
    adoCon.CursorLocation = adUseClient

    Call adoCon.Open
    strSQL = "TRUNCATE TABLE POSTAL"
    Call adoCon.Execute(strSQL, 0)

    While Not EOF(fd)
        Line Input #fd, strLine

        strLine = Replace(strLine, """", "")
        vAry = Split(strLine, ",")
        strSQL = "INSERT INTO POSTAL (POSTAL, CITY, ADRLINE1) VALUES "
        strSQL = strSQL & "('" & Trim(vAry(2)) & "','" & Trim(vAry(7)) & "','" & Trim(vAry(8)) & "')"
        Call adoCon.Execute(strSQL, 0)
    Wend

    adoCon.Close
    Set adoCon = Nothing
    Close #fd