Calender
Sun Mon Tue Wed Thu Fri Sat
 123456
78910111213
14151617181920
21222324252627
28293031   
<< July 2019 >>
広告
SEARCH

SELECTED ENTRIES
RECENT COMMENTS
RECENT TRACKBACK
CATEGORIES
ARCHIVES
LINKS
PROFILE
OTHERS
SKYPE
PC: skype.jojo.jp
chat
iPad: iphone.jojo.jp
chat call
THANKS



本日:
昨日:
多言語
広告
 ▼▲ 作業日報 ▼△
    What's under the hood?
<< 晩飯 | main | WinSCPで全角ファイル名のファイルを転送したい場合 >>
MDBのSQL出力をCSVへ書出 (対 PostgreSQL) mdb csv export
 mdbの場合CSV出力は、AccessオブジェクトのdoCmd TransferText機能を利用すれば簡単にできますが、MS.Accessアプリケーションが必要ですし、既存のテーブルかクエリー単位でしか出来ません
SELECT * INTO
 [Text;database=C:¥here¥is¥csvdbplace].[hogehoge.csv]
 FROM T_hogehoge
 ↑テキストファイルへ接続しファイルをテーブルとみなし、そこへテーブル作成クエリを発行するという方法です
但し項目をカスタマイズすることはできないようです↓
SELECT "00" as 追加項目,* INTO
 [Text;database=C:¥here¥is¥csvdbplace].[hogehoge.csv]
 FROM T_hogehoge

SELECT * INTO
 [Text;database=C:¥here¥is¥csvdbplace].[hogehoge.csv]
 FROM (SELECT "00" as 追加項目,* FROM T_hogehoge)
う〜んできない・・(追加項目は無視される)
 かといってmdbにCSV出力用SQLを登録するのも、出来たCSVを加工するも避けたい、、大体Accessオブジェクトを利用している所で汎用性が無くなってしまう。。
普通に行フェッチ-列加工-テキスト書出というルーチンにしないとだめかな・・

ADODBのみでやりたかったのでもう少し調べてみました

SELECT [aaaa].* INTO [Text;database=C:¥here¥is¥csvdbplace;HDR=NO;FMT=Delimited(,);CharacterSet=65001;].[hogehoge.csv]
FROM [SELECT "00" as 追加項目,* FROM hogehoge]. AS [aaaa];
デキタ━━━━ヽ(・∀・` )ノ━━━━!!!!
tableに対するaliasを定義、ヘッダなし、上記の場合はUTF-8
※COPYコマンドに要求されたCSVエンコードはUTF-8、、
 CharacterSet=Unicode .....UTF-16
 CharacterSet=20932 .......EUC-JP

作成しょうとするCSVファイル(hogehoge.csv)は存在するとエラーとなります

PostgreSQLにてこのCSVを取り込みは
copy "hogehoge" from '/tmp/csv/hogehoge.csv' DELIMITERS ',' CSV QUOTE AS '"';



リンク:
CSVへのリンクをTransferTextを使わずに作成する方法
CSV形式のファイルをDataTableや配列等として取得する
PostgreSQL 8.2.6 Documentation COPY

サンプル関数:
Option Explicit

main()

function main()
 '*******************************************
 '* MDB to CSV Export..sample
 '* MDBに含まれる全テーブルを [テーブル名].csvファイルへ export
 '* 例として "店"項目に"01"を CSVに追加します
 '* 全テーブルに 店項目としてSHOPIDを追加します
 '*******************************************
 Const STRMDB = "E:¥pg8_csv¥db¥mc20shop01.mdb" '元ねたMDBのDBパス
 Const CSVPATH = "E:¥pg8_csv¥csv" '出力先CSVのパス ¥終始しない!

 Const SHOPID = "01" '店情報としてこの文字列を設定します
 '*******************************************

 dim objFs
 dim objTables
 dim objTable
 dim objCat
 dim objConn
 dim strConn
 dim strSQL
 dim i
 dim strCsv '出力CSVファイル名

 set objConn = CreateObject("ADODB.Connection")
 set objFs = CreateObject("Scripting.FileSystemObject")
 Set objCat = CreateObject("ADOX.Catalog")

 if Err.Number > 0 then
   msgbox Err.Description
   Exit function
 end if

 'ファイルの所在を確認
 if objFs.FileExists( STRMDB ) then
 on error resume next

 strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & STRMDB

 objCat.ActiveConnection = strConn 'カタログの作成
 set objConn = objCat.ActiveConnection

   Set objTables = objCat.Tables
   for i = 0 to objTables.Count-1
     set objTable = objTables(i)

     if (objTable.Type = "TABLE") then
       'CSVファイル名
       strCsv = CSVPATH & objTable.name & ".csv"
       '*********この辺のクエリをカスタマイズします********
       strSQL = "SELECT aaaa.* INTO [Text;database=" & CSVPATH & "]." & objTable.name & ".csv " & _
        "FROM [SELECT """ & SHOPID & """ as 店,* FROM " & objTable.name & "]. AS aaaa;"
       '***************************************************
       objConn.Execute strSQL
       '***************************************************
       if (Err.Number > 0) or (objConn.Errors.Count > 0) then
         WScript.Echo objTable.name & "... " & Err.Description & objConn.Errors(0)
         Err.Clear
       else
         WScript.Echo objTable.name & objTable.Type & "... ok"
       end if
     end if
   next
   objConn.Close
   Set objCat = Nothing
 end if
on error goto 0

 '各種オブジェクトの破棄
 Set objFs = Nothing

end function
| 開発関連 | 10:24 | comments(2) | trackbacks(0) |
管理者の承認待ちコメントです。
| - | 2013/05/31 8:06 PM |
管理者の承認待ちコメントです。
| - | 2013/05/31 8:12 PM |









http://blog.jojo.jp/trackback/815721