• 締切済み

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/17068)
回答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

  • VBからのsqlの呼び出し方

    VB6.0について質問です。。。 現在SQLを使用して二つのAccessファイルからデータを取得して CSV出力を行っているのですがかなり無駄な処理をしていそうなので もっと簡略化もしくは効率的に出来る方法はないですか? 取得する項目数が多いので以下のソースを何回も交互におこなっています>< ふたつの異なるデータベースをSQLで呼び出すのに毎回切断して接続の長々としたプログラムで見栄えもわるいです、、、 お知恵をおかしください。 dbs.Close Set MyWorkspace = Workspaces(0) 'iniファイルからmdbのパスを取得 Set dbs = MyWorkspace.OpenDatabase(PATH1) '指定のmdbファイルを開く Set ds = dbs.OpenRecordset("select XXX from abc where No = " & XXX & " ;") 'レコードカウントする tmp2 = tmp2 & ds.Fields(0).Value & "," dbs.Close Set MyWorkspace = Workspaces(0) Set dbs = MyWorkspace.OpenDatabase(PATH2) Set ds = dbs.OpenRecordset("select XXX from efg where No = " & XXX & " ;") tmp2 = tmp2 & ds.Fields(0).Value & "," ・ ・ ・

  • DAOのExcelVBAにてAccessのデータを更新したい

    ExcelVBAよりAccessデータの追記は、AddNewを使用してできたのですが、単純な更新ができません。 strWhere = "Select * From 集計テーブル Where [フィールド1]='001'" Set dbWS = DBEngine.Workspaces(0) Set dbWB = dbWS.OpenDatabase("C:\対象MDB.mdb) 'データベースを呼び出す Set dbRes = dbWB.OpenRecordset(strWhere, dbOpenDynaset) 上記はそもそも更新ステートメントがありません。どのように書けばよいのでしょうか?どうかアドバイスお願いします。

  • テーブルのリンク(ACCESS)

    ACCESS2003で下記の記述で「実行時エラー ’3219’ 無効な処理です。」というエラーメッセージがでます。 外部mdbでテーブルをリンクさせるとこのエラーがでます。同じmdbファイルにデータテーブルを置くと問題なく処理できます。 参照設定も過去ログを見てチェックしています。 Dim dbs As DAO.Database Dim rst As DAO.Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("テーブル名", dbOpenTable) ACCESS97では何の問題もなかったのですが, 2003ではうまくいきません。 どうかよろしくお願いします。

  • CSV変換

    現在VBからAccessにあるデータをCSVでエクセルに吐き出すという処理をおこなっているのですが、今やってる方法はAccessのテーブルにある項目を一つ一つプログラムによって出力しているのですがテーブルにある項目全てを一気にCSVに変換する方法はありますでしょうか?

  • Accessのリンクテーブル

    すみません、教えてください。 Accessで複数端末から一つのMDBにデータ登録をさせる為に、VBAでツールを作っています。以下のように記述をして いるのですが、MDBを閉じるたびに、リンク先のDBを認識しなくなってしまいます。テーブルでリンクを貼りなおすとまた動くようになるのですが、どうしたらリンクを貼りなおせずにできるようになるのか、どなたか教えてください。どうかお願いいたします。 Dim LinkDB as Database Dim RST AS Recordset Set LinkDB = WorkSpaces(0).OpenDatabase("リンク先のDBの名前") Set RST = LinkDB.OpenRecordset("テーブル名",DbOpenTable)

  • テキストボックスに入れた内容をAccessのテーブルに登録する方法を教えてください。

    はじめまして。 VBでフォームに作ったテキストボックス(text1、text2、text3)に値を入れてコマンドボタンを押したらAccessのテーブルに値を登録できるようにしたいのですが上手くいきません。自分で調べながらコーディングしたのですが上手く動かずどうすれば動くのかVBのコーディングを教えていただきたいです。よろしくお願いします。 [Accessのファイル名] db1.mdb [db1.mdbのテーブル名] ListName [ListNameの各項目] 名前、住所、生年月日 [VBのフォーム] text1.textbox、text2.textbox、text3.textbox Add.command [コーディングの内容] Microsoft DAO 3.6 Object Library参照設定 Private Sub Add_Click() Dim strSQL As String Dim dbName As String Dim dbs As DAO.Database Dim myset As DAO.Recordset Dim ws As DAO.Workspace Set ws = DBEngine.Workspaces(0) Set dbs = ws.OpenDatabase("C:\db1.mdb") If Dir("C:\db1.mdb") <> "" Then strSQL = "INSERT INTO Listname (名前,生年月日, _ 住所) values(text1.text, text2.text, text3.text)" Me.AutoRedraw = True Set myset = dbs.OpenRecordset(strSQL) End If End Sub ※無効な処理です。というエラーが出ます。

  • vb6でmdbのOpenDatabase時にエラー

    お世話になります。 PC98の環境でVB6でオフィスの入っていない環境です。 Set db1 = DBEngine.Workspaces(0).OpenDatabase(App.Path & "aaa.mdb",dbDriverComplete) を実行すると ”このプログラムは不正な処理を行ったので強制終了します。” となってしまいます。 昨日までは、エラーなく動いていたのですが原因がわかりません。 ご教授宜しくお願いします。

  • CSVファイルをアクセスのテーブルに出力する

    こんにちは Access VBA初心者です。 やりたい処理なのですが CSVファイルをmdb内であらかじめ作成されているテーブルに出力したいのですが、 最初にTransferTextwでワークのテーブルにインポートして そのワークテーブルを1レコードずつ読み込みmdbのあらかじめ作成されているテーブルにINSERTしていくという方法しか今思いつきません。 インポートするとワークテーブルはすべてテキスト型になっていますが、 それを違う型の項目にINSERTするということなど可能なのでしょうか? それとももっとスマートな方法があるのでしょうか? ざっくりと書いてしまいましたが、よろしくお願いいたします。

  • アクセスに登録した値を条件検索によりtextboxに反映させる方法を教えてください。

    はじめまして。お世話になります。 Accessで登録した値をVBのフォーム上のテキストボックスに 反映させる方法を教えてください。 [Accessのファイル名] db1.mdb [db1.mdbのテーブル名] ListName [ListNameの各項目] 日付、名前、住所、生年月日 [VBのフォーム] lbldate、text1.textbox、text2.textbox、text3.textbox、Select.command ※lbldateの内容は日付(テキスト型)でCaptionでとってきた値が「日付」項目に登録される。 3つのtextboxには入力した値は「名前」・「住所」・「生年月日」項目に登録される。(すべてテキスト型) [自分で調べ考えたコーディングの内容] Microsoft DAO 3.6 Object Library参照設定 Private Sub Select_Click() Dim strSQL As String Dim dbs As DAO.Database Dim myset As DAO.Recordset Dim ws As DAO.Workspace Set ws = DBEngine.Workspaces(0) Set dbs = ws.OpenDatabase("C:\db1.mdb") Me.AutoRedraw = True strSQL = "SELECT * FROM Listname where 日付 = '" & lbldate & "'; " Set myset = dbs.OpenRecordset(strSQL) Text1.Text = CStr(myset("名前")) Text2.Text = CStr(myset("生年月日")) Text3.Text = CStr(myset("住所")) myset.Close End Sub 上記の内容では上手くいきません。過去にテキストボックスに入力した値を教えていただきましたが今回は逆にレコードを検索して選択する方法が上手くいきません。 アドバイスをよろしくお願い致します。 ※求める機能としてlblnameに表示される値を条件にそれに対応するレコードを選択したいのですが検索時に該当する日付がなかった場合は3つのテキストボックスに値を何も返さないプログラムにしたいと思っています。よろしくお願い致します。

  • VB2005を使ってACCESSのテーブルを別のデータベースにエクスポートさせるには?

    例えば、VB2005を使ってACCESSのA.mdbにあるテーブルをB.mdbにエクスポートさせるには、どのようなプログラムを書けば良いのでしょうか? ちなみに、ACCESSのテーブルをデータセットに取得して、別のテーブルに書き込むと言うようなものを書いて見ましたが、処理が非常に遅いので使えませんでした。