
■ VBA&ado
Excelからoo4oでOracleに接続して色々出来るようになった(oo4oでExcelから接続してみた(接続・切断))のですが、oo4oはOracleに接続するためのものなので、他のRDB(SQLServer、Access)などに接続しようとすると、ちょっと具合が良くないです。
そこで、oo4oの部分をADOに置き換えてみました。それ自体は上手く行って、SELECT文を発行してデータを抜けるところまできました。
んで、SQL文を実行して、取得したデータをCSVファイルに出力する処理を作ったのですが、テキストファイルへの書き出しで異常終了してしまいます。

はて?
■ 状況
ソースはこんな感じ。ADOでOracleに接続してデータを抽出する部分は今回の記事と関係ないので端折りました。
'読み取り専用でファイルを開きます。このファイルに書き込むことはできません。
Public Const ForReading As Integer = 1
'ファイルを開き、ファイルの末尾から書き込みます。
Public Const ForAppending As Integer = 8
'システムの既定値を使ってファイルを開きます。
Public Const TristateUseDefault As Double = -2
'Unicode としてファイルを開きます。
Public Const TristateTrue As Double = -1
'ASCII ファイルとしてファイルを開きます。
Public Const TristateFalse As Double = 0
Sub TEST()
'----- 省略 Start --------
'
' Oracleに接続して、SQL(SELECT)文を実行。
' 実行結果を、myRs(レコードセット)に取得する。
'
'----- 省略 End ----------
'ファイルシステムオブジェクトの宣言
Dim myFs As Object
Set myFs = CreateObject("Scripting.FileSystemObject")
Dim myOutFile As Object
'出力ファイルの作成とオープン
myFs.CreateTextFile ("D:¥CSVTEST.csv")
Set myOutFile = myFs.OpenTextFile("D:¥CSVTEST.csv", ForAppending, False, TristateFalse)
'データ全件出力
Do Until myRs.EOF
'出力
myOutFile.WriteLine (myRs.Fields.Item(0).Value)
'カーソルを次行に変更します。
myRs.MoveNext
Loop
End Sub
すると、テキストファイルに書込みするWriteLineでエラーが発生します。
何を書き込もうとしているかと思ってイミディエイトウィンドウに書き出してみました。

気になるのが、最後の?です。この時点で、文字化けの疑いが濃厚になってきました。実際に、別のツールで見ると、こういうデータになっています。
小樽地区 H26年11月〜
どうやら、〜が文字化けしているみたいです。
■ 暫定対応
VBAは、内部的にはUNICODEで処理をしていると聞いたことがあります。んで、Oracle側の文字コードはshift-jis。この辺りが原因かと思って、StrConv辺りで色々と変換してみたのですが、余計ひどく文字化けする有様です。
色々と思う所はあったのですが、この時は急ぎでした。なので、Oracleへの接続方法を実績のある方法をoo4oに変えてみたのですが、こちらでは文字化けしません。
・・・うーん、なんだろ?
■ 後書き
全てが終わった後で思ったのですが、WriteLineで異常終了するってことは、ファイルに書き込めないってことですよね。
出力ファイルを開く時にASCIIを指定していたいのですが、Unicodeにした所、異常終了はしなくなりました。
Set myOutFile = myFs.OpenTextFile("D:¥CSVTEST.csv", ForAppending, False, TristateTrue)
ただ、エディタによっては文字化けしたままだったりと、微妙な結果です。やっぱり、抜本的な原因を突き止めないとダメですね。
解決編:ExcelVBA&ADOでOracleからデータ抽出で文字化け(解決編)
投稿記事の一覧:http://harikofu.web.fc2.com/
--- blog end ---
スポンサードリンク


