- ベストアンサー
アクセス 日付を項目追加して取込
教えてください。 アクセスでtxt形式のデータを取り込む際に、一列追加した状態のものをテーブルへ 取り込みたいです。追加したい項目は取込した日付です。 どのような方法があるか、アドバイスをお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
AAA1,BBB1 AAA2,BBB2 AAA3,BBB3 例えば、このようなデータを添付図のようにテーブルに追加するには、一般的には VBA コードをシコシコと書きます。 理由1、重複インポートを回避するため。 理由2、各列のデータを必要に応じてチェックするため。 理由3、列を省いたり、追加したりするため。 理由4、列の順序を変えることもあるため。 理由5、列のデータを変換・置換することもあるため。 挙げれば切りがありませんが、このような理由で一般的には VBA コードをシコシコと書きます。 【私が書いたVBAコードの概要】 1、インポートSQL文の雛形を準備。 strSQL = "INSERT INTO Test (Field1, Field2, Field3) " & _ "VALUES ('2014/10/27', 'XXXXX', 'YYYYY')" 2、テキストを配列に読み込む strReadCols() = FileReadArray(strFileName) ここでは、File Scripting Runtime を利用した関数を利用。 3、インポート文を作成し実行。 strImport = Replace(strSQL, "XXXXX", Trim(CutStr(strReadCols(I), ",", 1))) strImport = Replace(strImport, "YYYYY", Trim(CutStr(strReadCols(I), ",", 2))) DoCmd.RunSQL strImport 【私が書いたVBAコードの全体像】 DIM文とREM文とは省いた全体の行数は21行です。 ' --------------------------------- ' 読み込むファイルのチェック ' --------------------------------- strFileName = "F:\Temp\Test.txt" isFound = FileExists(strFileName) If isFound Then ' ------------------------- ' インポートSQL文を準備 ' ------------------------- strSQL = "INSERT INTO Test (Field1, Field2, Field3) " & _ "VALUES ('2014/10/27', 'XXXXX', 'YYYYY')" ' ------------------------- ' Access の警告をなしに ' ------------------------- DoCmd.SetWarnings False ' ------------------------------- ' テキストを配列に読み込む ' ------------------------------- strReadCols() = FileReadArray(strFileName) N = UBound(strReadCols()) For I = 0 To N ・・・・・ Next I ' ---------------- ' 終了処理 ' ---------------- Message (N + 1) & "行を追加しました!" ' ------------------------- ' Access の警告を復活 ' ------------------------- DoCmd.SetWarnings True Else Warning "'F:\Temp\Text.txt'は、見つかりません!" End If AccessのVBA、あるいはプログラミングそのものに従事したのは1996年まで。ですから、FileExists()、FileReadArray()、Warning()などの関数を書いてテストし、それからインポートコードを書いてバグを取るのにアタフタ。結局、90分を費やしてしましました。まあ、ここまで提示すれば質問者は苦もなく再現できるでしょう。頑張られてください。
その他の回答 (2)
- m3_maki
- ベストアンサー率64% (296/460)
あらかじめテーブルに日付のフィールドを作成しておき その「既定値」 を 「=Date()」 としておくのが簡単かと思います。
お礼
ありがとうございます。参考にさせて頂きました。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
補足:VBAコードを書きたくないのであれば・・・。 1、テキストファイルを編集する。 2、インポート後に追加する。 などかと。 strImport = Replace(strSQL, "XXXXX", Trim(CutStr(strReadCols(I), ",", 1))) strImport = Replace(strImport, "YYYYY", Trim(CutStr(strReadCols(I), ",", 2))) DoCmd.RunSQL strImport の部分を strSQL = Replace(strSQL, "XXXXX", Trim(CutStr(strReadCols(I), ",", 1))) strSQL = Replace(strSQL, "YYYYY", Trim(CutStr(strReadCols(I), ",", 2))) DoCmd.RunSQL strImport と書いて雛形から"XXXXX"と"YYYYY"を消したために全てが1行目をインポートする羽目に。このバグ取りに45分。実に90分の半分を浪費。まあ、私みたい者が下手にVBAコードを書くとこういうチョンボも。まあ、一度、こういうインポートコードを手中にすると、Access のインポート機能を利用することはないでしょう。が、この初手の壁を越えたくなければ冒頭のような別手段もありです。
お礼
補足説明頂き、ありがとうございました。参考にさせて頂きました。
お礼
完璧な回答をありがとうございました。非常に助かりました。お手間おかけいたしました。