• ベストアンサー

アクセス 日付を項目追加して取込

教えてください。 アクセスでtxt形式のデータを取り込む際に、一列追加した状態のものをテーブルへ 取り込みたいです。追加したい項目は取込した日付です。 どのような方法があるか、アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

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分を費やしてしましました。まあ、ここまで提示すれば質問者は苦もなく再現できるでしょう。頑張られてください。

mame1216
質問者

お礼

完璧な回答をありがとうございました。非常に助かりました。お手間おかけいたしました。

その他の回答 (2)

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.3

あらかじめテーブルに日付のフィールドを作成しておき その「既定値」 を 「=Date()」 としておくのが簡単かと思います。

mame1216
質問者

お礼

ありがとうございます。参考にさせて頂きました。

回答No.2

補足: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 のインポート機能を利用することはないでしょう。が、この初手の壁を越えたくなければ冒頭のような別手段もありです。

mame1216
質問者

お礼

補足説明頂き、ありがとうございました。参考にさせて頂きました。

関連するQ&A