【Access97】取り込みエラー

このQ&Aのポイント
  • txtファイルで保存してあるデータをAccessへ取り込む作業をしています。
  • txt内の「日付」形式が『d-m-y』なのでAccessのフィールド書式も『日付(M)』にしてあるのですが取り込みエラーとなってしまいます。
  • この作業を毎回しているのですが、Excel上ではなくtxt上で直接『d-m-y → yyyy/mm/dd』に変換、もしくは『d-m-y』のままtxtから直接Accessに取り込む方法はありませんか?
回答を見る
  • ベストアンサー

【Access97】取り込みエラー

【Access97】取り込みエラー txtファイルで保存してあるデータをAccessへ取り込む作業をしています。 項目毎の区切りはカンマ区切(,)になっており、データ内容は「数値」「テキスト」「日付」等各種あります。 txt内の「日付」形式が『d-m-y』なのでAccessのフィールド書式も『日付(M)』にしてあるのですが取り込みエラー(データ型の変換エラー)となってしまいます。 そこで、txtファイルをExcelで開いて[データ-区切り位置]で区切り、書式設定で「日付」を『yyyy/mm/dd』に変更してからAccess(フィールド書式を『日付(S)』に変更)へコピーしています。 <例> txtデータ:01-AUG-10 → Access:2010/08/01 この作業を毎回しているのですが、Excel上ではなくtxt上で直接『d-m-y → yyyy/mm/dd』に変換、もしくは『d-m-y』のままtxtから直接Accessに取り込む方法はありませんか? 尚、データは数千件あり「日付」もバラバラな為”置換”機能だとかなりの時間がかかってしまうので”置換”機能は使っていません。

  • KO1014
  • お礼率97% (536/551)

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

  • ベストアンサー
  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

固定文字列9文字なら「01-AUG-10」から 「01」「AUG」「10」に分けることも可能?。 「AUG」を月変換テーブル12レコードでも作って 「08」にしてやるくらいかと思います。

KO1014
質問者

お礼

ご回答ありがとうございました。 そうか、その手がありましたか!! 思いつきませんでした。 別テーブルや変換用データを用意する必要がありますが、Left・Mid・Right関数だったらしょっちゅう使用しているので、これだったら初心者でも出来そうです。

その他の回答 (3)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

Access97ならばテキストファイルをテーブルとして リンクし、他のテーブルに日付を変換しながら 移し変えればいいのでは。 リンクするときはツールバーのファイルから 外部データの取り込み、テーブルのリンク、 と進み、ファイルの種類をテキストファイル とし、対象のテキストファイルを選択して クリックするとリンクウィザードが出るので、 区切りをカンマを選択し、フィールドのオプションで テキストファイルに項目を設定していなければ ここでフィールドの名前を設定し、各フィールドは 数値、テキストと設定し、日付をテキストに設定。 以後、完了まで進みます。 一応、フィールドの名前と型を以下のようにします。 数値(数値型)、テキスト(テキスト型)、日付(テキスト型) 次に、同じフィールド名を持つテーブルを作ります。 ただし、日付のフィールドは日付型にしておきます。 コードは以下のような感じですが。 テキストファイルおよび、テーブルの名前を変数に しておいて、テキストボックスにファイル名、テーブル名を 入れてそれを変数で受け取り、コードに反映するように しておけばいいのではと思います。たとえば以下ののように、 テキストボックス名をtxファイル名、txテーブル名にして、 Private Sub cmdインポート_Click() Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim myTxt As String Dim myTbl As String Set db = CurrentDb Set rs1 = db.OpenRecordset(Me!txファイル名, dbOpenDynaset) Set rs2 = db.OpenRecordset(Me!txテーブル名, dbOpenDynaset) rs1.MoveFirst Do Until rs1.EOF rs2.AddNew rs2!数値 = rs1!数値 rs2!テキスト = rs1!テキスト rs2!日付 = DateValue(rs1!日付) 'あるいは以下までする必要があるかは不明ですが '必要ならば以下に変更。または必要に応じて変えてください。 'rs2!日付 = Format(DateValue(rs1!日付), "yyyy/mm/dd") rs2.Update rs1.MoveNext Loop rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing db.Close: Set db = Nothing End Sub 要点は、リンクするときにテキストファイルの日付をテキスト型 に設定しておくことです。

KO1014
質問者

お礼

ご回答ありがとうございました。 初心者には難しそうですね・・・

回答No.2

こんにちは。 あぁ・・・、月がAUGとかになってるんですね・・・。 こりゃ無理です。 VBAでも使わないと・・・。

KO1014
質問者

お礼

再度のご回答ありがとうございました。

回答No.1

こんにちは。 インポートウィザードの左下のボタンから、詳細設定で日付区切り文字を選べると思いますが・・・。

KO1014
質問者

補足

[日付順]を『日月年』にしてみたり、[日付区切り記号]を『-』にしてみたり、いろいろやってみましたがやはり同じエラーになってしまいます。

関連するQ&A

  • アクセス インポートファイルの再インポートを防ぐ

    アクセス2003を使用しています。 アクセスにて、エクセルファイルをインポートしています。 既にインポートしたエクセルファイルを再度インポートしないように、再取込みを行おうとした場合、 「既に取り込んでいるファイルです」とエラーメッセージを表示させて、取込み防止を行おうとしています。 クエリの重複チェックを設定していたのですが、行き詰ってしまいました。 アクセスのテーブル先頭フィールドの日付データ(yyyy/mm/dd)でチェックしたいと思っています。 教えてください。よろしくおねがいいたします。

  • 【access】テキストから日付へ変換するとエラーになる

    環境 OS:windowsXP pro Access:access2000 こんにちは。いつもお世話になっております。 テキスト形式(20080119)のデータをクエリで日付型(2008/01/19)にしたいのですが上手くいきません。 過去ログ等からCDATE(format([フィールド名],"yyyy/mm/dd"))とすれば良いというのはわかったんですが クエリを実行すると「#Error」となってしまいます。 ちなみに書く場所は選択クエリの「フィールド:」の所でいいんですよね?別フィールドを隣に挿入して記入しました。 テーブルのプロパティから書式を日付(S)に変更するとデータが消えてしまったのでそれは避けたいです。 他のやり方などありましたらご教授願います。よろしくお願い致します。

  • アクセス2007 複数フィールドで最古日を表示

    以下のテーブルがあります。  フィールドA=受注日付 (日付型 yyyy/mm/dd)  フィールドB=申込日付 (日付型 yyyy/mm/dd)  フィールドC=着手日付 (日付型 yyyy/mm/dd)  フィールドD=”ここに関する質問です。”(日付型 yyyy/mm/dd)  フィールドA~Cの中で、一番昔の日付レコードをフィールドDに表示させるための関数の入れ方が分かりません。  単一フィールドにあるレコードで、最古日、最新日を抽出する方法はほかの質問でも挙がっているのですが、複数フィールドの中から選択肢、新たなフィールドに表示させる方法が中々見当たらず質問させていただきました。  例)   [A]      [B]    [C]       [D] 2011/11/1  2012/1/1 2012/3/1  → 2011/11/1  ※A~Cの中で一番古いのは「A」なので、DにAの日付を表示させる。 何方かご教授、よろしくお願いいたします。

  • Access ADOで文字列を日付型へinsert

    VBScriptでCSVファイルのデータをADO経由でAccessにinsertしたいのですが、日付型へのinsertがうまくいきません。 CSVファイルにある「8桁日付」(例:20110101)をAccessの日付型フィールドへinsertするのに、以下の試みをしましたが、型不一致etcのエラーがでてしまいました。 どうしたら、insertできるのでしょうか? 1.8桁日付を yyyy/mm/dd に編集(mid使用) してinsert →型不一致エラー 2.CDATE(yyyy/mm/dd) をinsert →型不一致エラー 3.CDATE(#yyyy/mm/dd#) をinsert →型不一致?エラー ハマってしまって困っています。ご存知の方がいらっしゃいましたら是非是非教えてください。

  • ACCESSのデータをEXCELにコピーすると日付が必ずYYYY/MM

    ACCESSのデータをEXCELにコピーすると日付が必ずYYYY/MM/DD→DD-MONTH-YYになります。書式を変えずにコピーする方法を教えてください。 WIX XP SP3 ACCESS 2007

  • Access2013で翌日のデータのみのクエリ

    お世話になります。 Access2013を使用しており、2つの日付フィールドを比較して 翌日のレコードのみ抜き出したい場合のクエリについて質問で ございます。 日付Aフィールド と 日付Bフィールドが あり、それぞれ日付と時刻が書式yyyy/mm/dd hhmmss で格納されております。 このうち、クエリで抽出したいのは、 日付Bフィールドに格納されている、 日付Aフィールドの翌日のレコードのみを 抽出したいです。 その際、時刻(hhmmss)は無視して翌日のレコードを 抽出したいです。 例えば、 日付Aフィールドに 2016/08/24 15:00:00 2016/08/24 16:00:00 2016/08/24 17:00:00 というデータが格納されていて、 日付Bフィールドに 2016/08/25 00:00:00 2016/08/25 17:00:00 2016/08/26 00:00:00 というデータが格納されていた場合、 日付Bフィールドの 2016/08/25 00:00:00 2016/08/25 17:00:00 のみ抽出したいです。 この場合のクエリの設定方法を教えてください。 どうぞ宜しくお願いいたします。

  • ACCESSで日付型のフィールドにYYMMDDで入力したい

    会社にてACCESSのフォーム上に日付を大量に入力する指示を 出しているのですが、フィールドを日付型にしないといけないため 『YYYY/MM/DD』と入力しなければならず煩雑だと不満が出ております。 皆さん日付は『080731』等で入力するのに慣れているもので・・・ 書式を『YYMMDD』に変更したのですが変わったのは見た目の表示だけで、 『080731』と入力してもエラーになってしまいまい、『2008/7/31』と 入力しないといけない状態です。どうすれば『080731』と入力するだけで 日付型と認識できるようになるでしょうか。初歩的な質問かもしれず 申し訳ないですが、どなたか教えていただけると幸いです。 どうかよろしくおねがいいたします。

  • ACCESSの日付形式

    テーブルに日付形式のフィールドがあり、エクスポートすると、形式がyyyy/mm/dd hh:mm:ddになってしまいます。 yyyy/mm/dd形式でエクスポートするには、どのようにしたらよいでしょうか。 VBAのDocmd.TransferTextで行いたいと思います ちなみにAccess97です。 よろしくお願いします

  • Accessの日付フィールドデータの取得について。

    VbScriptでオブジェクトに、Accessの日付フィールドデータを取得するのですが、その際、 "YYYY/MM/DD HH:MM:SS" の形式で取得するにはどのようにしたらよいのでしょうか。 よろしくお願いします。

  • 「yyyy/mm/dd hh:mm」が「yyyy/mm/dd hh:nn」へ変化する

    access2003を使用しています。 時刻の「分」の表示形式で気になることがあるのですが テーブルのデザインで フィールド1のデータ型を「日付/時刻型」にし 書式を「yyyy/mm/dd hh:mm」と入力しても 「yyyy/mm/dd hh:nn」に変化してしまいます。 問題なく「2009/02/28 20:33」と表示されるのですが なぜmからnへ変化してしまうのでしょうか? また デザインで書式を「hh:mm」だけ入力した場合は 「時刻 (S)」へ変化します。 何か少しでもわかる方ご回答よろしくお願いします。

専門家に質問してみよう