QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

ACCESSへCSV形式ファイルをインポートする

CSV形式ファイルを既存のAccessデータベースへインポートさせたいのですが
以前質問したときに回答していただいた下記のコード



「参照追加」→「COMタブ」→「Microsoft Access Library」
Dim mdbPath As String = "C:\\\\test\\\\foo.mdb"   'mdbのパス
Dim oAccess As Access.ApplicationClass
oAccess = New Access.ApplicationClass()

oAccess.OpenCurrentDatabase(mdbPath)

Dim schemaFile As String = ""               'エクスポート定義ファイル名
Dim tableName As String = "ImportTable"     'テーブル名
Dim csvPath As String = "C:\\\\test\\\\bar.csv"   'CSVのパス
Dim hasFieldNames As Boolean = False        'ファイルの先頭行が列名の場合 True

oAccess.DoCmd.TransferText( _
    Access.AcTextTransferType.acImportDelim, _
    schemaFile, _
    tableName, _
    csvPath, _
    hasFieldNames)

oAccess.Quit()

というのを利用して



  Dim file_values As String
        Dim mdbPath As String = Application.StartupPath & "\\\\DataBase1.mdb"
        Dim appAccess As Access.ApplicationClass
        appAccess = New Access.ApplicationClass
        appAccess.OpenCurrentDatabase(mdbPath)

        Dim fileName As String
        Dim use_table As String ="[インポートするテーブル名(データベース内の既存テーブル名)]"
        OFD.InitialDirectory = Application.StartupPath & "\\\\[CSV形式ファイル保存フォルダ]"
        OFD.Filter = "CSV形式(*.csv)|*.csv|全ての形式(*.*)|*.*"

        OFD.RestoreDirectory = True

            If OFD.ShowDialog = DialogResult.Cancel Then
                Exit Sub
            End If
            fileName = OFD.FileName
            appAccess.DoCmd.TransferText(Access.AcTextTransferType.acImportDelim, "", use_Table, fileName, False)
            appAccess.Quit()

と記述してみました。
しかしCSV形式ファイルの数(列)とテーブルの数(列)は同じのはずなのに
「貼り付け先の '[既存テーブル名]' テーブルには 'F1' フィールドがありません」とエラーが帰ってきます。
テーブル名を存在していないものにすると、ちゃんとインポートされます。
何か間違ってるのでしょうか?
ご指導お願いします

乱文長文にて失礼いたします。

PS COMを利用した場合AccessがインストールされていないPCでこのアプリを起動した場合利用できるのでしょうか?
それも同時に教えてください
もし無理ならばほかにインポートするのにいいコードがあるか教えてください
_________________VB.NET経験不足(初心者とも言う)
説明不足などがあれば指摘お願いします

質問者:龍虎(たつとら)

回答

どうも、はじめましてまさと申します。

龍虎(たつとら)さんの書き込み (2005-07-26 16:28) より:



            appAccess.DoCmd.TransferText(Access.AcTextTransferType.acImportDelim, "", use_Table, fileName, False)

Accessにてcsvを既存テーブルにインポートするには、インポート定義を作成する必要があります。
該当MDBをAccessで開き、csvをインポートする際に表示されるインポートウィザード内でインポート定義を作成可能です。
作成したインポート定義名は、TransferText メソッドの第2引数に設定してください。

PS COMを利用した場合AccessがインストールされていないPCでこのアプリを起動した場合利用できるのでしょうか?

それも同時に教えてください

もし無理ならばほかにインポートするのにいいコードがあるか教えてください

AccessオートメーションですのでAccessがインストールされていなければ、実行できません。
一応AccessRuntimeというものもありますが、配布するためにVSTO(Office2003の場合)かOffice Develoer(OfficeXP以前 ただし生産終了)が必要な上、オートメーションのコードが通常のAccessの場合と異なってきます。
Accessを使わないで処理をする方法になると、DataSetに繰り返しで行を追加するようなイメージになると思うんですが、ぱっとサンプルがかけません。。。

投稿者:まさ

編集 履歴 (0)

PS COMを利用した場合AccessがインストールされていないPCでこのアプリを起動した場合利用できるのでしょうか?

それも同時に教えてください

もし無理ならばほかにインポートするのにいいコードがあるか教えてください

最も無難なのは、MDBとCSVをADO.NETで処理することじゃないでしょうか。
ODBCでDSNを設定して、.NET Framework Data Provider for ODBCから呼び出すという形かな?
ADO時代にCSV⇔MDBなアプリを作ったのですが、ADO.NETでも本質は変わらないのでできると思います。
[ メッセージ編集済み 編集者: じーえす風 編集日時 2005-07-27 09:21 ]

投稿者:じーえす風

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。