
半角スペースを含む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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Outlook(アウトルック) 【 Windows 10 】アドレス帳に正しくインポートを完了させたい。 3 2023/04/23 13:41
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
accessのレポートで元になるテ...
-
Accessのフィールド数が255しか...
-
INSERT INTO ステートメントに...
-
ACCESSで表が作りたく、そのた...
-
ExcelのデータをコピーでACCESS...
-
アクセス エラーを数値「0」に...
-
ACCESSでの改行コード
-
Access:リンクテーブルマネー...
-
主キーはオートナンバー型のID...
-
アクセス A列コピー B列貼り...
-
【Access】フォームで自動計算...
-
ACCESSで400以上のフィールドが...
-
ACCESSDBで、NULLデータをすべ...
-
アクセス メモ型 255文字...
-
固有レコード識別子の選択とは??
-
SQLServer2005のSQL文での別名...
-
accessで重複を防ぎたい
-
ACCESS2000「定義されているフ...
-
ACCESSでオートナンバーを任意...
-
Access⇒エクセルへのエク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INSERT INTO ステートメントに...
-
Accessのフィールド数が255しか...
-
ACCESSで400以上のフィールドが...
-
SQLServer2005のSQL文での別名...
-
アクセス エラーを数値「0」に...
-
accessのレポートで元になるテ...
-
Accessでテーブルの値をテキス...
-
ACCESSでの改行コード
-
ACCESSでテーブルのチェックを...
-
ExcelのデータをコピーでACCESS...
-
ACCESS検索★ある文字を複数のフ...
-
Access 昇順・降順で並び替え...
-
アクセス メモ型 255文字...
-
アクセス A列コピー B列貼り...
-
【Access】フォームで自動計算...
-
ACCESSでオートナンバーを任意...
-
Access:リンクテーブルマネー...
-
ACCESS VBAにてCSV...
-
Accessで、固定アルファベット+...
-
主キーはオートナンバー型のID...
おすすめ情報