• 締切済み

VBからのCSV一括変換

現在、Visual Basic6からAccessにあるデータをCSVで吐き出すという処理をおこなっています。今やってる方法はAccessのテーブルにある項目を一つ一つプログラムによって出力しているのですがこれでは項目数が100を超えているため手間が掛かってしまいます、、、テーブルにある項目全てを一気にCSVに変換する方法はありますでしょうか? 現在の処理 Set MyWorkspace = Workspaces(0) Set dbs = MyWorkspace.OpenDatabase("D:" & "\ExScan.mdb") Set ds = dbs.OpenRecordset("select * from abc;") ff = FreeFile Open App.Path & "\" & "aaa" & ".CSV" For Output As ff Print #ff, ds!りんご & "," & ds!バナナ & "," & ds!みかん・・・ Close ff ds.Close dbs.Close

みんなの回答

  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.2

DAOを使用するのではなくADOを使用するなら GetStringメソッドで一気にCSV化されたデータを取得することができます。 【例】 Dim db As ADODB.Connection Dim rs As ADODB.Recordset Dim strData As String 'DBへ接続(プロバイダはJET4.0を使用して「c:\ExScan.mdb」へ接続) Set db = New ADODB.Connection Call db.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\ExScan.mdb;Persist Security Info=False") 'レコードセットを取得 Set rs = db.Execute("select * from abc") 'データをCSVの形式で「strData」に取得 strData = rs.GetString(adClipString, -1, ",", vbCrLf, "") 'レコードセット開放 rs.Close Set rs = Nothing 'DB切断 db.Close Set db = Nothing '取得した文字列をファイル「c:\test.csv」に出力 Open "c:\test.csv" For Output As #1 Print #1, strData Close #1 ※注意点としてはデータ行数が多い倍には「データ取得」を全件(第2引数=-1)で取得するのではなく、1000行単位(第2引数=1000)とかで区切りながら取得しないとメモリ不足になって落ちるので注意が必要です。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

下記2つを検討されてはどうでしょう。 朝急いでいて、(1)の例は手抜きですみませんがポイントが伝わりますように。 (1)Fields(i)の利用 例 Sub test03() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("市区町", dbOpenDynaset) Do Until rs.EOF For i = 0 To rs.Fields.Count - 1 MsgBox rs.Fields(i) Next i rs.MoveNext Loop rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub (2)DoCmd.TransferText の利用 Sub test04() DoCmd.TransferText acExportDelim, , "社員2", "社員c.csv", True End Sub

関連するQ&A

専門家に質問してみよう