Visual Basic Tips


Jetデータベース(DAO)テーブルのCSVファイルインポート


JetデータベースのテーブルにCSVファイルからインポートします。テーブルの中に既にデータが格納されている場合、キーが重複しているとそのレコードは追加されません。

!注意!
本サンプルを使用してインポートを行うとCSVファイルの内容が全てインポートされていなかったり、インポートされな いフィールドがあることあります。CSVファイルのデータフィールドが文字列型の時、データがダブルコーテーションで括られていればこの問題はおきません。もしダブルコーテーションで括られていない文字列型のフィールドをインポートする場合はschema.iniの作成を参照してください。

※サンプル中で使用されているMakeFileNameとStripFileNameに関しては
  パス名からファイル名取得
  パス名からファイル名を除く
  を参照して下さい。 

Private Sub Form_Load()
  
Call Import(App.Path & "\work.mdb", "新規テーブル", App.Path & "\export.csv")
End Sub

Sub Import(strDbPath As String, strTblName As String, strTxtPath As String)
  
Dim ws As Workspace
  
Dim db As Database
  
Dim rs As Recordset
  
Dim wsTxt As Workspace
  
Dim dbTxt As Database
  
Dim rsTbl As Recordset
  
Dim strConnect As String
  
Dim strSql As String
  
Dim intRet As Integer

  
On Error GoTo ErrHandler

  
Set wsTxt = DBEngine.Workspaces(0)
  
Set dbTxt = wsTxt.OpenDatabase(StripFileName(strTxtPath), 0, 0, "Text;")

  
Set ws = DBEngine.Workspaces(0)
  
Set db = ws.OpenDatabase(strDbPath, False, False)

  strConnect = "[Text;database=" & StripFileName(strTxtPath) & "]."
  
'テーブルにテキストデータの内容を追加します(見出しレコードがないとエラーになります"同名のフィールドを作成する事はできません")
  strSql = "INSERT INTO " & strTblName & " SELECT * FROM " & strConnect & MakeFilename(strTxtPath)
  db.Execute strSql

  db.Close
  dbTxt.Close
  ws.Close
  wsTxt.Close
  Exit Sub
ErrHandler:
  intRet = MsgBox("<" & Err & ">" & Error(Err), vbOKOnly, "Import")
End Sub


DownLoad vbtips019.lzh 8KB (VB6.0)