
お世話になります。
Windows XP SP3、Access2003 で
CSVファイルをインポートする処理をつくっています。
読み込むCSVファイルが大きく、必要ないフィールドが多いのですが、
下記のようにLine Input で全部読み込んで
Splitでカンマ区切りでバラしてvarData(Variant型)にいれて
レコードセット(インポート先の既存テーブル)に入れる時に、
必要に応じてデータ型を変更して
フィールド指定ししていれるようにしています。
ところが、CSVファイルの中のデータで数件ほど
ちゃんと読み込めないものがあり、
レコードセットにいれるときにエラーでとまってしまいます。
調べてみると、フィールドで取得した値がずれており、
前の方の複数のフィールドでNull値があった場合?に
ずれ込むことがあるようです。
どうしたらこの現象はなおせるのか教えてください。
それとも・・・
このようにフィールド指定してレコードセットに入れ込むよりも
一度CSVファイルの全レコードを他のテーブルにインポートして、
そこからインポート先の既存の本テーブルにいれたほうがいいのでしょうか?
よろしくお願いいたします。
Open ---- For Input As----
Line Input #lngFileNum, strData
インポート先のテーブルをレコードセットで開く
DAO、トランザクション使用
Do Until EOF(lngFileNum)
Line Input #lngFileNum, strData
'データを配列へ
varData = Split(strData, ",")
With rs
.AddNew
!番号 = CLng(varData(0))
!名称 = varData(1)
!受付日 = DateValue(varData(8))
!種別 = varData(10), ""
!登録番号 = CLng(varData(11))
(以下略)
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
No4です。
No4の続きとして。
フィールド名は質問の通りの抜き出し番号になっていませんが、
リンクしたCSVをT1、追加先テーブルをT2として、以下のようなクエリ
で追加。
INSERT INTO T2 ( 番号, 名称, 受付日, 種別, 登録番号 )
SELECT CLng([フィールド1]) AS F1, T1.フィールド2, DateValue([フィールド3]) AS F3, T1.フィールド4, CLng([フィールド5]) AS F5
FROM T1;
あるいは、
>前の方の複数のフィールドでNull値があった場合
この意味が分かりづらいのですが、もしかしたら、
インポートしようとしているフィールドにNullデータ
が存在する、という意味ならば、
INSERT INTO T2 ( 番号, 名称, 受付日, 種別, 登録番号 )
SELECT IIf(IsNull([フィールド1]),Null,CLng([フィールド1])) AS F1, IIf(IsNull([フィールド2]),Null,[フィールド2]) AS F2, IIf(IsNull([フィールド3]),Null,DateValue([フィールド3])) AS F3, IIf(IsNull([フィールド4]),Null,[フィールド4]) AS F4, CLng(Nz([フィールド5])) AS F5
FROM T1;
これで対応できるものかな、というところですかね。
No.4
- 回答日時:
CSVをリンクテーブルとしてはどうですか。
「外部データの取り込み」から「テーブルのリンク」
を選択し、「ファイルの種類」を「テキストファイル」
とし、ファイルのあるフォルダを選択し、当該ファイルを
クリックするとウィザードが表示されます。
そこで、設定を選択し、フィールド区切り記号、
文字列の引用符を設定し、フィールドの情報で、
必要のないフィールドにチェックを入れてスキップ
を設定し、OKとして最後まで進み、リンクを設定します。
あとは、普通のテーブルとして別テーブルに
追加クエリなりでデータを移し変えて加工するなり、
そのまま参照テーブルとして使用することも
できます。
No.3
- 回答日時:
前述のリンクです。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
>前の方の複数のフィールドでNull値があった場合?に
>ずれ込むことがあるようです。
原因がはっきりしていないので、はっきりさせること。
インポート機能は、あくまでも標準機能。
ちょっとイレギュラー、不正データがあると対応できないものも多いです。
カンマ区切りがどうしてもダメなら
1行単位で読み込むとか一時的にスペース等にして代替処理、
別のアプローチも検討です。
No.2
- 回答日時:
今の方向で進めるなら・・・
Ubound(varData) で確認して×ならレコードセットに入れないで
エラー行として別のテキストファイルに書き込んでから
次の行に進むとか。
varDataの要素を一個ずつチェックするのは面倒ですねぇ。
ん~後は何だろ。
別案を検討されていますが、こちらでも
テキストを Access にインポートした際に 区切り位置がずれる場合の対処方法
http://support.microsoft.com/default.aspx?scid=k …
などがありますので、『前門の狼、後門の虎』かもしれない。
試してみる価値は大いにありそうですけどね。
インポートさえ出来てしまえば、あとは焼くなと煮るなとこっちの勝手気まま (^^ゞ
具体的に何処のステップで止まってしまうのか。
(エラールーチンはコメントアウトして)エラー番号。
エラーになる実際のstrDataの内容とかが分かれば識者から回答があるかもしれない。
No.1
- 回答日時:
参考
エクセルでお仕事
のサイト、VBA応用を参考
ズレるなら
それを使わない手でやる
か
それでやってもいいように仕向ける
怪しいと思われる,,を,"",に変えても同じですか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
性格悪い人が優勝
できるだけ性格悪い人になって回答をお願いします。
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
限定しりとり
文字数6文字以上の単語でしりとりしましょう
-
一番好きなみそ汁の具材は?
みんなで大好きなみそ汁の具材について語り合おうよっ!
-
自分用のお土産
国内や海外に旅行へ行った時、自分用のお土産ってどれくらい買いますか?
-
Accessにインポートしたら並び順が変わっちゃった
Access(アクセス)
-
Access2000 固定長テキストと特殊文字インポート定義
Access(アクセス)
-
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
-
4
どこにもフォーカスを当てたくない
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
差込印刷での全角表示について...
-
エクセルにおける「フィールド...
-
エクセルデータをワードで差し...
-
ACCESSのデータに自動で半角ス...
-
英数字のチェックをしたい ACC...
-
Acsess アクセス のクエリで...
-
Accessのハイパーリンクをクリ...
-
ACCESSでフィールド名の変更(...
-
エクセルのピポットテーブルで...
-
クエリーで、全角混じりデータ...
-
オープンしているレコードセッ...
-
エクセル・ピボットテーブルの...
-
アクセスの操作について
-
Access クエリの編集について
-
クエリで割り算する方法を教え...
-
【Access】レポートでテキスト...
-
ACCESS 重複データを1...
-
Access InStr関数 AかBが入...
-
Wordの差込印刷時間の表示について
-
ACCESSの入力文字数の制限について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
差込印刷での全角表示について...
-
エクセルにおける「フィールド...
-
クエリで割り算する方法を教え...
-
エクセルデータをワードで差し...
-
フィールドの更新がない
-
ACCESSのデータに自動で半角ス...
-
Acsess アクセス のクエリで...
-
Accessのハイパーリンクをクリ...
-
Word差し込み印刷のハイフン(...
-
クエリーで、全角混じりデータ...
-
【Access】レポートでテキスト...
-
ACCESS 重複データを1...
-
ACCESSで条件によってフォーム...
-
sqlserverにはグループ集計のfi...
-
Null値を並べ替えで・・・
-
ACCESSで複数の写真ファイルを...
-
varchar型の入力できる最大文字...
-
アクセスのクエリでパラメータ...
-
ACCESSでフィールド名の変更(...
-
Access VBAでCSVファイルをイン...
おすすめ情報