- 龍虎(たつとら)
- 会議室デビュー日: 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
|