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 Stringhost = "SQLSVODBC32" 'コンパネから odbc 32bit で設定
user = "userName"
pass = "passwd"
fName = "/path/to\17ISHIKA.CSV"
fd = FreeFileconn = "DSN=" & host & ";UID=" & user & ";PWD=" & pass
Open fName For Input As #fdSet adoCon = New ADODB.Connection
adoCon.ConnectionString = conn
adoCon.CursorLocation = adUseClientCall adoCon.Open
strSQL = "TRUNCATE TABLE POSTAL"
Call adoCon.Execute(strSQL, 0)While Not EOF(fd)
Line Input #fd, strLinestrLine = 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)
WendadoCon.Close
Set adoCon = Nothing
Close #fd