2014-05-20
SQLServer覚書 Excel→DB
Excelのデータを1行ずつ挿入していくのが面倒なので、シートまるっとINSERTをやってみた。
引数は以下の通り
workbook_path:元データのブック
sheet_name:workbook_pathのどのシートを元データとするのか指定
db_src:DBの場所
db_name:DBの名前
login_id:DBのユーザID
login_pw:DBのユーザパスワード
table_name:DBのどのテーブルを操作するのか(ここではデータの投入先)
Private Function ExportFromXLSX(workbook_path as String,sheet_name as String, db_src as String, db_name as String,login_id as String, login_pw as String, table_name as String) As Boolean
Dim cn as ADODB.Connection
Dim recs_aff as Long
On Error Goto ErrFunc
Set cn = New ADODB.Connection
'2007バージョンのExcelファイルを開く
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & workbook_path & ";" & _
"Extended Properties=Excel 12.0"
'Jetプロバイダを使用してインポート
sql = "INSERT INTO [odbc;Driver={SQL Server};" & _
"Server=" & db_src & ";" _
& "Database=" & db_name & ";" _
& "UID=" & login_id _
& "PWD=" & login_pw _
& "]." & table_name _
& " SELECT * FROM [" & sheet_name & "$]"
cn.Execute sql, recs_aff, adExecuteNoRecords
cn.Close
Set cn = Nothing
ExportFromXLSX = True
Exit Function
ErrFunc:
'エラーメッセージ表示
' ---- (省略) ----
If Not cn Is Nothing Then
If cn.State=1 Then cn.Close
Set cn = Nothing
End If
End Function
こんなことやらなきゃいけないのは、SQLServer側からExcelシートの内容をとってこようとしたときに、分散クエリほにゃほにゃ・・・というエラーが出てしまったからなのだ。
なのでExcelシートから、SQLServer側に送るイメージ。