Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
SELECT文の結果セット (DAOまたはADO) をUTF8のCSVとして保存したい。
投稿日時: 18/06/08 11:03:02
投稿者: run_no_where

http://tsware.jp/tips/tips_578.htm
 
上記のコードでできそうですが、1レコードずつ読み取って処理する Do Loop の反復処理の部分の性能が気になります。
※ 性能検証はしていませんが、一見して非効率で遅そうな印象を受けます。
 
1レコードずつの処理ではなく、レコードセット全体を一括でCSVに保存する効率のよい方法はないでしょうか。
Shift_JISでよければ、Excelシートに.CopyFromRecodsetメソッドで貼り付け後、.SaveAs FileFormat:="xlCSV"
でよいのですが、この方法ではUTF8で保存することができず、Shift_JISの文字セットにない情報が失われてしまいます。
 
ご存知の方、コメントを頂けますと幸いです。
宜しくお願い致します。

回答
投稿日時: 18/06/08 11:38:30
投稿者: eden

あまり詳しくはないですが
最初にGetRowsメソッドで配列に格納してしまうのはどうでしょうか。

回答
投稿日時: 18/06/08 11:51:58
投稿者: sk

引用:
上記のコードでできそうですが、1レコードずつ読み取って処理する
Do Loop の反復処理の部分の性能が気になります。

引用:
1レコードずつの処理ではなく、レコードセット全体を一括で

GetString メソッドを使用なさればよろしいかと。
 
引用:
http://tsware.jp/tips/tips_578.htm

T'sWare より:
http://tsware.jp/tips/tips_170.htm
 

投稿日時: 18/06/08 14:59:58
投稿者: run_no_where

コメント頂いた皆様、ありがとうございます。
 
GetString メソッドで問題なく実装できました。
ちなみに、ダブルクオートありのCSVにするため、
ColumnDelimiter := ""","""
RowDelimiter := """" & vbCrLf & """"
としました。
そして、この方法では、最終行のEOFの直前にダブルクオートが1つ余分に付くため、最後の1文字を除いて出力する処理としました。
もっとよい方法があるのかもしれませんが、取り急ぎ目的は果たせました。
 
ありがとうございました。