2017-02-21 9 views
2

後でOracleに転送するAccessでデータベースを作成することになっています。毎年、何百万行ものデータを含むcsvファイルをインポートすることになっています。これは1985年のことです。私はAccessがこのすべてのデータを保持することはできないと考えています。csvファイルをそれぞれ新しいデータベースにインポートします

年ごとにデータベースを作成するにはどのようなコードが必要ですか?

これは私がこれまで持っているものです。

DocLocate = InputBox("Input Document Location") & "\" 
StartYear = InputBox("Input Start Year") 
EndYear = InputBox("Input End Year") 
i = StartYear 

strPath = DocLocate 

strTable = strFile 

strFile = "mar31_wts_" & i & ".csv" 
Do Until i > EndYear 
    strPathFile = strPath & strFile 
    DoCmd.TransferText acImportDelim, acSpreadsheetTypeText, strFile, strPathFile, blnHasFieldNames 
    i = i + 1 
    strFile = "mar31_wts_" & i & ".csv" 
Loop 

答えて

2

は、AccessデータベースにCSVデータをインポートするさまざまな方法があります。 DoCmd.TransferTextメソッドを使用すると、コードが実行されるアプリケーションの現在のデータベースにインポートされます。あなたのVBAコードを実行するよりも、別のデータベースにインポートする場合は

、あなたはそこに接続先データベースを別のApplicationオブジェクトを作成して開く必要があります:

Dim app As Application 
Dim strDBPath As String 

' create the database 
strDBPath = "<path_to_db>\db.accdb" 
DAO.CreateDatabase(strDBPath, dbLangGeneral).Close 

' open the database in a new Access Application 
Set app = New Application 
app.OpenCurrentDatabase strDBPath 

' import the csv file into that database 
app.DoCmd.TransferText acImportDelim, acSpreadsheetTypeText, strFile, strPathFile, blnHasFieldNames 

' close the database and the Access application 
app.Quit acQuitSaveNone 

を使用したい場合新しく作成されたデータベースに存在しなければならないインポート仕様です。その場合は、DAO.CreateDatabaseで新しいデータベースを作成する代わりに、必要なもの(たとえば仕様など)と上記のコードを既に含む空のテンプレートデータベースを手動で作成して、テンプレートデータベースのコピーを作成する方がよいでしょう。

あなたがメインのデータベースにリンクされ、様々な新しいデータベース内のすべてのそれらの輸入のテーブルをしたい場合は、あなたがこれを呼び出すことができます。

DoCmd.TransferDatabase acLink, , strDBPath, acTable, strFile, strFile 
+0

毎年新しいデータベースを作成しますので、反復処理するための最良の方法は何ですか。私はしました: 'Do Until i> EndYear' –

+0

また、リンク先を置くのに最適な場所はどこですか? –

+0

データがインポートされた後にする必要があります。おそらく最後に 'app.Quit'の後に最適でしょうか? – Leviathan

関連する問題