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側に送るイメージ。