
半角スペースを含むcsvファイルを、accessのテーブルとしてインポートした際、スペースがnullとして扱われてしまいます。
これを0文字の空白に置換しているのですが、時間がかかり、かつ、成功したのかどうかよく分からないために困っています。
下記の2つの方法でnullを0文字の空白に変換してみたのですが、レコード数が多すぎるのか、置換がすべて成功していない模様です。
テーブルのフィールドを選択し、「置換」する
フィールドのnullを見つけ、更新するクエリーを書く
できれば、インポート元のcsvファイルやインポート後のテーブルを分割させずにメンテナンスを行いたいのですが、こういう場合に有効な対処方法というのはどのようなものがあるのでしょうか?
1.置換を高速化するアイディア
2.インポート段階で変換する方法があるかどうか?
3.置換結果を確認する方法
私は今までデータベースというものを全く使ったことがないので、これ以上のことがわかりません。ぜひ、専門家のご意見を頂きたいと思います。
よろしくお願いいたします。
【csvファイル仕様】
データ規模:100万行、1行あたり10~20列
元データはフィールド毎に固定長
データ形式:テキスト型、長整数型が混在
複数のテキスト型フィールドに半角スペースを含む
長整数型のフィールドは0を含む
【mdbファイル仕様】
マスタテーブルを格納する。他のmdbにあるクエリから参照される。
テーブル形式
テキスト型フィールド:255文字(今のところ・・・)
数値型フィールド:長整数型
規模:
インポート後のmdbサイズは1テーブルあたり300MB程度。
そのmdbは同規模のテーブルを最高3程度まで保持する。
【使用環境条件】
OS:windows XP 最新SP
DB:Access 2003
mdbファイルはネットワーク上にある。
ローカルHDDにコピーして作業することは可
CPU:Celeron 2.0GHz
Memory:2GB Memory
HDD:空き40GB以上
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
定形化されたインポートでないので、
TransferTextは使わない、での回答のつもりです。
「,,」を「," ",」に置き換えてから
1項目単位にテーブルへ追加で・・・、ということでどうでしょう。
No.3
- 回答日時:
ACCESSはこういうレコード編集については
更新クエリや標準のインポート定義でやるには向いていないかもしれません。
「インポート→テーブルに出来上がる→更新クエリ→更新後テーブルが出来上がる」
これでは何万件を何度も処理します。効率悪いと思います。
「置換しながらインポートしたい」ことをモジュールで記載します。
・CSVファイルを開く
・出力はテーブルにする。ここで出来上がるテーブルは直っている状態。
・EOFになるまで繰り返す
・1レコード分読み込み
・null値を置き換えながらレコードをテーブルのフィールドへ出力
このモジュールを実行させるために
フォームでボタン1つ用意し押せば実行、とします。
やりたいことはこれに近いですが、そのまま使えるかは確認してください。参考です。
http://vine-linux.ddo.jp/access/materials/file/f …
情報ありがとうございます。
DoCmd.TransferText メソッドでtableにrecordを追加すると思いますが、1行ずつnull置換ができるかどうがポイントのようですね。
No.2
- 回答日時:
私が銀行で100万件を超えるデータをWindows98時代にAccess97で処理させられた時の方法ですが、何かの参考になればと思い書きました。
私が処理した方法はインポートするCSVと同じフィールド名を持つ空のテーブルを別に用意ました。
そして取り込んだCSVのデータを店舗番号で条件抽出したクエリを作製→この際にNullを置き換えるフィールドを関数で変換しておきました。
後はこの条件抽出をしたクエリを元に別に用意した空のテーブルに追加クエリーを実行し追加していきました。
この条件抽出したクエリをSQLに変換し、店舗番号をFor...Next...で変化させて追加クエリもSQLに変換しDocmd.RunSQLで実行するモジュールを記述すればボタン一つで自動化できます。
この方法で一気に100万件の変換をかけるより早く処理でき、しかも取り込んだCSVはそのままテーブルとして残るので、店舗番号と預金等の科目と口座番号をキーとした不一致クエリを作ることで、変換結果の確認が可能となりました。
その後にネットワーク上のDBにデータを渡してあげれば作業終了です。
本来であれば細かくモジュールの記述等もあわせて記載すれば良いのでしょうが、何事もヒントを元に考えた上で経験するのが一番と思い、あえてモジュール等の記載は避けました。
ちなみにこの方法はAccess2003でも動きますし、一気に処理するより確実に早かったです。
また、CSVをテーブルとしてインポートするのではなく、リンクテーブルとして使用することでハードディスクのデータ容量もある程度削減できます。
ある程度のところまではウィザードで作れると思いますので、実力アップのために頑張って下さい。ここにいる全員はきっとあなたのお力になれる人ばかりですから。
お返事が遅くなりすみません。
書き込み頂いた内容で、処理のイメージが膨らみました。
「店舗番号」では無いのですが、似た役割を持つデータがありますので、そのデータを使って処理を細かく分けたいと思います。
この書き込みをしてから、別の仕事が入ってしまったので作業中断中でありますが、トライしてみたいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS検索★ある文字を複数のフ...
-
【Access】フォームで自動計算...
-
Access 昇順・降順で並び替え...
-
accessのレポートで元になるテ...
-
Excel 2019 のピボットテーブル...
-
【続続】Access2002で連番のつ...
-
OCNのwebメールを開くとき、シ...
-
保存された情報として表示され...
-
再計算って出来ますか?
-
Accessで、複数のテーブルで随...
-
Accessのクエリでデータの入力...
-
accsessで顧客コードで氏名を呼...
-
どれがPrimary Key、ForeignKey...
-
datファイルからaccessにインポ...
-
下記の事を行うSQLがわかりませ...
-
Countと受付状態の表示に...
-
Access クロス集計クエリについて
-
デザインビューで、連結式 を...
-
Access2000 更新のタイミング?
-
カウントが出来ません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Access】フォームで自動計算...
-
ACCESS検索★ある文字を複数のフ...
-
SQLServer2005のSQL文での別名...
-
ACCESSで400以上のフィールドが...
-
Accessのフィールド数が255しか...
-
INSERT INTO ステートメントに...
-
ACCESSでの改行コード
-
accessのレポートで元になるテ...
-
ACCESSでテーブルのチェックを...
-
ExcelのデータをコピーでACCESS...
-
Accessでテーブルの値をテキス...
-
主キーはオートナンバー型のID...
-
ACCESS VBAにてCSV...
-
ファイルメーカーでCountifの様...
-
アクセスのテーブルデータをCSV...
-
固有レコード識別子の選択とは??
-
ACCESSで和暦を西暦に・・・
-
Access 昇順・降順で並び替え...
-
アクセス A列コピー B列貼り...
-
フィールド数の多すぎる・フィ...
おすすめ情報