- ベストアンサー
任意のCSVファイルをAccessに取り込むには?
同様の質問が発見できなかったため質問させて頂きます。 アクセスを利用して日々の電力監視のデータを管理しようと思います。 データを出力するシステムの都合で、日々のデータがcsv形式で毎日1ファイル生成されます。 ファイル名は[AT20070925.csv]のような形です。 このファイルをアクセスにインポートする際、ファイル名をダイレクトに指定しなくてもインポートするファイルを指定することは出来るのでしょうか? 具体的には (1)毎日指定した時間にデータを取り込むものとして、本日の(または前日の)ファイル名のデータを取り込む (例えば9月26日0時2分に9月25日のデータ[AT20070925.csv]を自動的にインポートする) (2)処理を行う際に随時指定した日付のファイル名のデータを取り込む (フォームで日付を指定し、例えば9月25日と指定したら[AT20070925.csv]を随時インポートする) インポートするファイル名に変数を使うことは可能なのでしょうか? また実際にはインポートでなくリンクを使用する可能性もあるのですが、リンクでも同じ様な処理は出来るのでしょうか? 良い方法等ありましたらご教授いただければと思います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>インポートするファイル名に変数を使うことは可能なのでしょうか? 可能です。 1、2ともに「AT20070925.csv]という文字列(日付部分が変化)を生成する方法がわかればよいですよね? サンプルを書きましたので参照されてください。(ファイルがCドライブ直下にある場合の定義です。C:\AT20070925.csv というような文字列になります。) (1)のパターン 「昨日」 FileName = "C:\AT" & Format(Date-1, "yyyymmdd") & ".csv" (2)のパターン 「フォーム内のTextBox1の値」 FileName = "C:\AT" & Format(Me.TextBox1.Value, "yyyymmdd") & ".csv" これで変数FileNameにご希望の文字列が格納されます。 あとは、DoCmd.TransferTextメソッドでこのFileNameを引数に指定してあげれば希望のテーブルにインポート/リンク可能です。インポートの場合の例は下記のとおりです。リンクの場合もほぼ同じです。(デリミトの形式はCSVは省略可です、、、確か。) 'TableName = "任意のテーブル名(インポート先)" DoCmd.TransferText acImportDelim, , TableName, FileName 今回は書いていませんが、エラー処理等を忘れずに。
その他の回答 (2)
変数を使用してファイルをインポートする方法は既に解答がでているようです。しかし 「任意のCSVファイルをAccessに取り込む」 のではなく、「定められたフォルダに規則性のあるファイル名で生成されるファイル」が対象のようです。それならば 1.一定間隔(一日一回?)フォルダを監視する。新しいファイル名があればデーターベースに取り込む 2.インポートフラッグの立っていないファイル名に対し、インポート処理を行い、処理日時を書き込み、インポートフラッグを立てる このようにした方がデーターベースらしいし、取りこぼしのなさや、トラブル発生時に、色々解析しやすいのでは?
お礼
たしかにデータベースの基本的考え方だとそうかもしれません。ただ今回の場合処理の都合上どうしてもこの方法をとらないといけなかったので今回はこの方法で行く予定です! また何かありましたらよろしくおねがいいたします。
- irija_bari
- ベストアンサー率73% (70/95)
できると思います。 ちょっとやってみたのでマクロコードを出しておきますね。 見れば大体わかりますよね? filePath = "AT20070925.csv" の記述を、日付関数を用いて置き換えてやればOKだと思います。 日付関数参考URL) http://www.geocities.jp/cbc_vbnet/function/date.html 「AT20070925 インポート定義」「AT20070925 リンク定義」は、一度手動でインポート/リンクを行い、 その時の設定を保存したものです。 ==== Macro ==== Option Compare Database '------------------------------------------------------------ ' マクロ1 ' '------------------------------------------------------------ Function マクロ1() On Error GoTo マクロ1_Err Dim filePath As String Dim dist As String filePath = "AT20070925.csv" dist = "table1" DoCmd.TransferText acImportDelim, "AT20070925 インポート定義", dist, filePath DoCmd.TransferText acLinkDelim, "AT20070925 リンク定義", "AT20070925", filePath マクロ1_Exit: Exit Function マクロ1_Err: MsgBox Error$ Resume マクロ1_Exit End Function ==== end of Macro ====
お礼
なるほど。インポート定義はしてあったのでこれで解決します!ありがとうございました。
お礼
なるほど、前日であってもDate関数でいけるのですね!大変参考になりました!ありがとうございました。