goo blog サービス終了のお知らせ 

Re:SALOON & VBA

しばらくは、過去BBSの倉庫、および
作成した EXCEL VBA の置き場(公開)として

番外:VBScript版 Oracle⇒CSV

2016年02月17日 17時01分00秒 | VBScript

番外:Java版 Oracle⇒CSV
やったことを、VBSでやったらどうか・・・

いうことで、以下

文字コード等、まだ未考慮の部分は多いですが・・・
取り敢えず、やってみたということでご容赦下さい。

勿論、理解は浅く
ネットで検索して、寄せ集めです。

でも、これだけで、ORACLEテーブルをCSV出力できるのだから大したものです。

**********************************************************************
Dim oPara
Set oPara = WScript.Arguments
If oPara.Count < 1 then<br />  Wscript.Echo "パラメータが不足しています"
  Wscript.Quit
End If

Dim cn
Dim fso
Dim rs
Dim csv
Dim sql
Dim i
Dim TextLine

Set cn = CreateObject("ADODB.Connection")
Set fso = CreateObject("Scripting.FileSystemObject")
Set rs = CreateObject("ADODB.Recordset")
Set csv = fso.CreateTextFile(oPara(0) & ".csv", True )

cn.Open(" Driver={Microsoft ODBC for Oracle};CONNECTSTRING=ORCL;UID=TESTUSER;PWD=TESTPWD;")
sql = "SELECT * FROM " & oPara(0) & " ORDER BY 1"

on error resume next
rs.Open sql,cn
if Err.Number <> 0 then
  cn.Close
  Wscript.Echo Err.Description
  Wscript.Quit
end if

on error goto 0

TextLine = ""
For i = 0 to rs.Fields.Count - 1
  TextLine = TextLine & rs.Fields(i).name & ","
Next
csv.WriteLine(TextLine)

Do While not rs.EOF
  TextLine = ""
  For i = 0 to rs.Fields.Count - 1
   TextLine = TextLine & rs(i).value & ","
  Next
  csv.WriteLine(TextLine)
  rs.MoveNext
Loop

csv.Close
rs.Close
cn.Close

Set fso = Nothing
Set rs = Nothing
Set cn = Nothing

Wscript.Echo oPara(0) & "に出力しました"



最新の画像もっと見る

1 Comments(10/1 コメント投稿終了予定)

コメント日が  古い順  |   新しい順
Unknown (frontflug)
2024-03-20 10:14:06
'---------------------------------------------------------------------
'Oracle TableをCSVファイルに出力。OraOLEDB.Oracle接続 + UTF8 + TAB区切
'---------------------------------------------------------------------
Option Explicit
'On Error Resume Next

Dim oPara
Set oPara = WScript.Arguments
If oPara.Count < 1 then
  Wscript.Echo "パラメータが不足しています"
  Wscript.Quit
End If

'-----------------------------------
' オブジェクト定義
'-----------------------------------
Dim oraCon
Dim constr
Dim rs
Dim sql
Dim csv
Dim i
Dim j
Dim TextLine
Dim pInputTbl  '入力TBL
Dim pOutputFile '出力ファイルパス

pInputTbl = oPara(0)
pOutputFile = "D:\TEST\file\out" & pInputTbl & ".dat"

Set oraCon = CreateObject("ADODB.Connection")
Set constr = CreateObject("ADODB.Command")
Set rs = CreateObject("ADODB.Recordset")

'tnsnames.ora ファイルのネットサービス名'
Const STRDATASOURCE = "TESTDB"

Const USERNAME = "TESTUSER"    '接続するデータベースのユーザー名
Const PASSWORD = "TESTPWD"    'パスワード

constr = "Provider=OraOLEDB.Oracle"
constr = constr & ";Data Source=" & STRDATASOURCE
constr = constr & ";User ID=" & USERNAME
constr = constr & ";Password=" & PASSWORD

oraCon.ConnectionString = constr
oraCon.Open

sql = "SELECT * FROM " & pInputTbl & " ORDER BY 1,2"

rs.Open sql,oraCon
if Err.Number <> 0 then
  oraCon.Close
  Wscript.Echo Err.Description
  Wscript.Quit
end if

Set csv = CreateObject("ADODB.Stream")
csv.Type = 2      '2:テキストファイル
csv.Charset = "UTF-8"  '文字コード
csv.Open

TextLine = ""
'見出し行の出力
For i = 0 to rs.Fields.Count - 1
  if i > 0 then
   TextLine = TextLine & vbTab 'タブ区切り
  end if
  TextLine = TextLine & rs.Fields(i).name
Next
csv.WriteText TextLine, 1   '0 : 文字列のみ書き込み・1 : 文字列 + 改行を書き込み

'データ行の出力
j = 0
Do While not rs.EOF
  TextLine = ""
  For i = 0 to rs.Fields.Count - 1
   if i > 0 then
     TextLine = TextLine & vbTab 'タブ区切り
   end if
   TextLine = TextLine & rs(i).value
  Next
  j = j + 1
  csv.WriteText TextLine, 1  '0 : 文字列のみ書き込み・1 : 文字列 + 改行を書き込み
  rs.MoveNext
Loop

'書き出しファイルの保存
csv.SaveToFile pOutputFile, 2  '1 : 指定ファイルがなければ新規作成・2 : ファイルがある場合は上書き

csv.Close
rs.Close
oraCon.Close

'-----------------------------------
' オブジェクト開放
'-----------------------------------
Set rs = Nothing
Set oraCon = Nothing

Wscript.Echo pOutputFile & " を ( " & j & " ) 件、出力しました。"
返信する

post a comment

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。
ブログ作成者から承認されるまでコメントは反映されません。