こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【ACCESS】インポート定義を使わないCSVインポート

ACCESS VBAにてMDBにSQL文でCSVデータをINSERTしようとしています。INSERT自体はうまくいったのですが、データの型をうまくそろえられません。2日程ネットサーフィンしているものの良いサンプルを見つけられません。有識者の方、ご存知でしたら是非教えてください!

まず、CSVデータは以下のようなものです。
===aaa.csv===
00000001,2009/1/31
00000002,2009/1/31


A000001,2009/1/31
Z000002,2009/1/31
==========
これを 既存テーブル:aaa_TBLに取り込ませたく、以下のSQL文を書きました。

INSERT INTO aaa_TBL(カラム1,カラム2) SELECT FORMAT([aaa#CSV].F1,'0000000'),[aaa#CSV].F2 FROM aaa#csv IN 'C:\' 'Text;HDR=NO'

これにて「0000001」と「000002」等のレコードは正常に取り込むことができましたが、「A000001」「B000002」等のデータは取り込まれず、NULLにて登録されておりました。
(aaa_TBL自体はカラム1=テキスト型、カラム2=日付型でCreateされております。)

これを回避したく、いろんなサイトを訪問したのですが、ほとんどがインポート定義を使った方法を推奨しておりました。
しかしながら、私にはどうしてもインポート定義が理解できないんです!
「VBAにて○○.iniを作成する方法」などをよく見かけるんですが、できるだけ他の方法を検討したいと考えております。(今後、ACCESS VBAから他言語への乗り換えを考えているとか、他CSVにてインポートされるテーブルの数が30個程あるので、インポート定義ファイルの管理がつらいな・・・とか色々他にも理由はあるんですが・・・・)

何か良い方法はないでしょうか?!
やはりインポート定義を作らないとだめでしょうか?!
その場合、簡単なサンプルコードなどを頂けますと非常に助かります。。。(MSサイトのサンプルコードは理解できませんでした。。。)

まだVBAを勉強し始めて2週間なので、色々突っ込みどころはあると思いますが、どうぞよろしくお願いしますm(_ _)m

投稿日時 - 2009-01-06 08:13:59

QNo.4607533

すぐに回答ほしいです

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

テキストを直接Selectするなんてやったこと無かったので実験。

うむふむ。
おや?FORMAT([aaa#CSV].F1,'0000000')?
なんでカラム1をフォーマット?フォーマット無しで・・・

あら、カラム1の文字項目がエラーに

Web検索
ページ発見
http://www.accessclub.jp/bbs5/0029/vba9093.html
なんだそういう事か

実験から得た自分なりの結論。
やはりiniを作らないと駄目みたいですね。
Accessはiniが無い場合、先頭行の内容でカラムの型を
判断しているようですね
先頭行が全桁数字項目は数値項目として扱われその後に発生する
英数字混在はエラーになるようです
インサートするテーブルで型を指定しているのにと思っても
SELECTのカラムの型には影響しません

http://support.microsoft.com/kb/210073/ja
も見たけどiniはそれほど難しくないみたいですよ

投稿日時 - 2009-01-06 09:37:55

お礼

ありがとうございました。参照URLがすごく理解しやすくて、無事schema.iniでの取り込みができました。(VBAでschema.iniを作ると言う記事の複雑?なVBAを見て、及び腰になっていました。。。)
わざわざ実験までして頂いて、親身になって頂き、非常に感謝しています。
また機会がありましたら、どうぞよろしくお願いします!

投稿日時 - 2009-01-07 07:49:07

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問