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