以前に以下のサンプルコードを紹介しましたが、
【VBScript】SQLServerに接続してSQL(SELECT)を実行
今回はこの発展系で、且つ需要があると思われる、SELECTで取得したデータをCSVファイルに出力するサンプルコードを紹介させて頂きます。
Option Explicit Call Main() Sub Main() Dim objCon Dim query Dim objRS Dim srvName, dbName, loginName, loginPass Dim objFS 'CSV出力で使用するオブジェクト変数 Dim CsvFileFullName 'CSVファイルの出力先※ファイル名を含むフルパス Dim objOutputCsv 'CSVの書き込みで使用するオブジェクト変数 'データベース接続情報を定義します。' srvName = "DBサーバ名" dbName = "DB名" loginName = "DBユーザ名" loginPass = "DBパスワード" 'CSVの出力先を定義します。 CsvFileFullName = "C\:テスト出力先\テスト.CSV" 'SQLServerへ接続します。*************************************************************************************************** On Error Resume Next Set objCon = CreateObject("ADODB.Connection") objCon.Open "Driver={SQL Server}; server=" & srvName & "; database=" & dbName & "; uid=" & loginName & "; pwd=" & loginPass & ";" 'エラー処理' If Err.Number <> 0 Then Msgbox("エラーが発生しました。 " & " エラーナンバー:" & Err.Number & " エラー詳細:" & Err.Description) Set objCon = Nothing Exit Sub End If Err.Clear On Error Goto 0 'SQLを実行してレコードセットに格納します。********************************************************************************* query = "" query = query & "SELECT " query = query & " カラム1 " query = query & " ,カラム2 " query = query & " ,カラム3 " query = query & "FROM テーブル名 " query = query & "WHERE " query = query & " カラム1 = xx" On Error Resume Next '定義したSQLを実行してレコードセットに格納します。' Set objRS = objCon.Execute(query) 'エラー処理' If Err.Number <> 0 Then Msgbox("エラーが発生しました。 " & " エラーナンバー:" & Err.Number & " エラー詳細:" & Err.Description) objCon.Close Set objRS = Nothing Set objCon = Nothing Exit Sub End If Err.Clear On Error Goto 0 'レコードセットのデータを表示します。*************************************************************************************** On Error Resume Next 'レコードセットのデータ件数が0件の場合は処理を終了します。 If objRS.EOF Then Msgbox("対象データが存在しない為、処理を終了します。") objCon.Close Set objRS = Nothing Set objCon = Nothing Exit Sub End If 'FileSystemObjectを生成します。 Set objFS = CreateObject("Scripting.FileSystemObject") '空のCSVファイルを作成します。 objFS.CreateTextFile CsvFileFullName, True 'CSVファイルを開いてデータを書き込める状態にします。引数2の2は上書き可の指定、Trueはファイルがパスに存在しなければ新規作成 Set objOutputCsv = objFS.OpenTextFile(CsvFileFullName, 2, True) 'レコードセットの行数分ループします。 Do Until objRS.EOF '一行ずつレコードセットのデータをCSVファイルに書き込みます。 objOutputCsv.WriteLine objRS("カラム1").Value & "," & objRS("カラム2").Value & "," & objRS("カラム3").Value '次のレコードセットに移動します。 objRS.MoveNext Loop 'エラー処理' If Err.Number <> 0 Then Msgbox("エラーが発生しました。 " & " エラーナンバー:" & Err.Number & " エラー詳細:" & Err.Description) objCon.Close Set objRS = Nothing Set objCon = Nothing Set objFS = Nothing objOutputCsv.Close '開いたCSVファイルを閉じます。 Set objOutputCsv = Nothing Exit Sub End If Err.Clear On Error Goto 0 '終了処理をします。。******************************************************************************************************* 'オブジェクトを破棄します。 objCon.Close Set objRS = Nothing Set objCon = Nothing Set objFS = Nothing objOutputCsv.Close '開いたCSVファイルを閉じます。 Set objOutputCsv = Nothing End Sub
SQL実行→CSV出力の連携は実業務でも定番の処理ですので、参考にして頂ければ幸いです。