- PR -

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

1
投稿者投稿内容
龍虎(たつとら)
会議室デビュー日: 2005/06/01
投稿数: 7
投稿日時: 2005-07-26 16:28
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/19
投稿数: 4
お住まい・勤務地: 千葉
投稿日時: 2005-07-26 23:00
どうも、はじめましてまさと申します。

引用:

龍虎(たつとら)さんの書き込み (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に繰り返しで行を追加するようなイメージになると思うんですが、ぱっとサンプルがかけません。。。

じーえす風
会議室デビュー日: 2005/07/26
投稿数: 12
投稿日時: 2005-07-27 09:20
引用:
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 ]
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-07-27 10:56
参考
MS-Access を使わずに Jet Database Engine
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsGnrHowToUseJetWithoutMSAccess.html
1

スキルアップ/キャリアアップ(JOB@IT)