dポイントプレゼントキャンペーン実施中!

VBでCSVデータをMDB

ACCESSがあれば簡単ですが、その環境が無い時用に
CSVデータをアクセス2000形式の.mdbに移すプログラムを作りたいと思いました。

Visual Basic 2010 Expressをダウンロードしてあります。
ネットで手法を検索してみましたが、これはというサイトを見つけられず
大きな本屋で関連書籍を探してみましたが、逆の方法は見つかるのですが
CSV→MDBは見つかりませんでした。

アドバイスや参考サイトなどありましたら
是非教えて頂きたいと思い質問しました。

宜しくお願いします。

A 回答 (4件)

> ただ、Excel2003ではデータ件数が溢れてしまい


> 無理なようです。
> 使うデータは〒番号です。
EXCELのワークシートにのせる必要はありません。

MDBへの接続を確立(DAOでもADOでもお好きなほうで)
CSVファイルを単なる入力ファイルにして、EOFまでのループを作る。
  ループ内で、項目分けしてレコード単位でテーブル書き込み。
入力ファイルのEOFでDBをクローズして終了。
「上記をVBAで書く」ということです。
    • good
    • 0

>逆の方法は見つかるのですがCSV→MDBは見つかりませんでした。


逆の方法が見つかっているのであれば、それのFromとToを逆さにするだけです。

ただし単純なCSVしか、この方法では対応できません。
カンマ以外の区切り文字を使用したりする場合などは、「schema.ini」という定義を作成し、それから取り込む必要があります。


'http://blog.livedoor.jp/akf0/archives/51408939.h …
'http://homepage2.nifty.com/inform/vbdb/dao_expor …
Imports System.Data.OleDb
Module Module1

  Sub Main()
    Imp("C:\db1.mdb", "C:\Test\456.csv", True)
  End Sub


  Sub Imp(ByVal p_strMdbFile As String, ByVal p_strCsvFile As String, ByVal CSVの先頭はフィールド名 As Boolean)
    'MDBへの接続
    Using l_oleCnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & p_strMdbFile & ";")
      l_oleCnn.Open()

      Dim l_strHead As String = IIf(CSVの先頭はフィールド名, "YES", "NO")
      Dim l_finf As New IO.FileInfo(p_strCsvFile)
      Dim l_strTableCSV As String = String.Format("[Text;HDR={0};FMT=Delimited;DATABASE={1}].[{2}]", l_strHead, l_finf.Directory.FullName, l_finf.Name)

      Dim l_strTableImp As String = IO.Path.GetFileNameWithoutExtension(l_finf.Name)

      'テーブルの存在チェック
      Dim l_strSQL As String
      Dim l_strTables As DataTable = l_oleCnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
      If (l_strTables.Select("TABLE_NAME='" & l_strTableImp & "'").Length > 0) Then
        'データ追加
        l_strSQL = String.Format("INSERT INTO [{0}] SELECT * FROM {1}", l_strTableImp, l_strTableCSV)
      Else
        'テーブル作成と追加
        l_strSQL = String.Format("SELECT * INTO [{0}] FROM {1}", l_strTableImp, l_strTableCSV)
      End If

      'SQL文の発行
      Using l_oleCmd As New OleDbCommand(l_strSQL, l_oleCnn)
        l_oleCmd.ExecuteNonQuery()
      End Using

      l_oleCnn.Close()
    End Using

  End Sub
End Module
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

SQLは書籍すら持っていないので全く分からりません。
ただ、書いた頂いたコードは何をするのかが何となくわかります。

fromとtoを逆にする方法も含めて、実際に自分でやって検証してみたいと思います。

お礼日時:2010/06/08 01:22

データーベースはあまり詳しくはないのですが、私がサンプルを作った時に調べた限りでは、


VB.NET 系では、直接 mdb ファイルを作成する機能はないようです。
従って、ADOX の機能を使って、ADO.NET で作成するか又は、事前に mdb の空ファイルを用意して
おくとVB.NET の機能だけで作成する事ができます。

[VB2005 ADOX mdb] をキーに検索すればサンプルや参考文献が見つかるでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

空のmdbファイルを用意する方法は、何か行けそうな気がします。
こちらの手法で一度チャレンジしてみたいと思います。

お礼日時:2010/06/08 01:18

EXCEL VBAで、ADOライブラリを参照させて処理可能。


「EXCEL VBA MDB 操作」でサンプルを探せると思います。


Excel2007以降については未検証。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
前にExcelから.mdbのファイルに接続させた事があります。

VBAの本は結構持っているので、この方法は出来ると思います。

ただ、Excel2003ではデータ件数が溢れてしまい
無理なようです。
使うデータは〒番号です。

お礼日時:2010/06/07 07:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!