• 締切済み

Accessへの大量データ登録

Access VBAの初心者です。 現在、VBAにてAccessのテーブルに100万レコード程度のデータを登録しようとしています。 最初は1レコード毎、SQLでinsertしようとしていたのですが、時間が想定以上にかかるので断念しました。 次に、CSVに一回書き出してDocmd.TransferTextすることを検討しましたが、読み込んだテーブルにselectした結果が安定しないため色々調べたところ、DoCmdは非同期で動くらしいです。 とすると次のクエリをかけるにはちゃんと全レコード読み込んだかを確認し、読み込んでいなければウェイトをかける処理を入れる必要があり、これも馬鹿馬鹿しいのでやりたくありません。 そこでお聞きしたいのですが、このような場合、どのような処理をするのが定石なのでしょうか。 皆様のお知恵をお借りできれば幸いです。 宜しくお願いいたします。

みんなの回答

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.3

こんにちは 書き出したCSVファイルにリンクを張るだけではダメなのでしょうか? 或いはリンクを張って、そのデータを必要なテーブルに追加クエリで追加するとか。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

現状において、出来ていて手元にあるデータ(のファイル形式)は、何ですか? CSV、エクセル、その他DBなどのうち、どれですか?この大切なことを質問に書いてないのはおかしくないですか。100万件ということなので、今からや最近行った手入力のデータではなく、事業系の(商売・会社・団体がらみの)の本番処理の後の、お下がり(メインシステムからもらうデータなど)の(EUC用の)データではないのですか。 達成後はアクセスに入れて、メインは主に何をするのですか。分析?照会用? ーー 一番歴史的に早くできた方式の、下記記事による方法のデータ処理を試してはどうですか。 複雑な処理や、データため込みをしないので、単純といえる分、読み込みや書き込み処理は早いかも。 また100万件を適当に数個に原データを分割して、1つづつ処理すると、よいことがあるかも。 http://vba-geek.jp/blog-entry-203.html CSVファイルを順次読んで、mdb(質問以バージョンも書いてないのでmdb)に「レコード」処理的(この意味は分かる?)に書きこんでゆくやり方です。(SQLのインサートやアクセスのインポートに頼らないやり方) ーー mdbについて、バージョンとの関連で https://support.office.com/ja-jp/article/Access-2007-%25E3%2581%25A7%25E4%25BD%25BF%25E7%2594%25A8%25E3%2581%258C%25E6%258E%25A8%25E5%25A5%25A8%25E3%2581%2595%25E3%2582%258C%25E3%2582%258B%25E3%2583%2595%25E3%2582%25A1%25E3%2582%25A4%25E3%2583%25AB%25E5%25BD%25A2%25E5%25BC%258F-a9530032-e4bc-4116-acf7-b204833cf73b?ui=ja-JP&rs=ja-JP&ad=JP&fromAR=1

Terios19
質問者

お礼

回答ありがとうございます。 1件毎に追加していくのは非常に時間がかかり耐えられないため、一括での読み込みを検討しています。 いずれにせよ、アドバイスありがとうございました。

回答No.1

>SQLでinsertしようとしていた・・ ということなのでデータの取得は出来ているのでしょうから それを追加クエリ Or テーブル作成クエリ(用途にあった方)に変更してください。 DAOかADOのExecuteメソッドで currentdb.Execute (SQL文 Or クエリ名) currentproject.Connection.Execute ( Executeでしたら処理が終了するまで次に行くことはありません。

Terios19
質問者

お礼

回答ありがとうございます。 1レコード毎、AddNewとかで更新するとかなり遅くて実用に耐えないため、CSVで一括読み込みできないか検討しています。 ありがとうございました。

関連するQ&A

  • AccessでSQL結果を直接csvに書き出すには?

    Access2003,WinXP お世話になります。 自作のSQLを書いて、結果をTransferTextで手軽にCSVにできないかと考えてこんなのを書いてました。 Dim strSql AS String Dim strPath AS String strSql = 自作SQL文 strPath = c:\test.csv Docmd.TransferText acExportDelim, , strSql, strPath, True しかし、TransferTextでは「テーブル」か「クエリ」名を直接書くように指示してあり、これだと動かない?んでしょうか。 SQLは300個くらい出力する必要があるため(クエリ300個作れば解決するのですが・・・)上のようなコードをループして動かしたいのですが、何か他の簡単な出力方法があるのでしょうか。 よろしくお願いいたします。

  • Accessで複数のクエリを1つのCSVファイルにエクスポートする方法

    Accessで複数のクエリを1つのCSVファイルにエクスポートする方法はないでしょうか? 現在は下記のような記述でそれぞれCSVファイルを作成しています。 クエリ1~3を1つのCSVファイルにエクスポートする方法があれば教えて頂きたいです。 よろしくお願いします。 DoCmd.TransferText acExportDelim, , "クエリ1", "C:test1.csv", True, "" DoCmd.TransferText acExportDelim, , "クエリ2", "C:test2.csv", True, "" DoCmd.TransferText acExportDelim, , "クエリ3", "C:test3.csv", True, ""

  • ACCESS2000での大量データ処理

    CSVファイルの情報をACCESS2000にインポートして集計処理をしたいと考えてます。 CSVファイルの構成は、20フィールド(全て文字属性)で1レコード、1400レコードで1件となっております。(この仕様を変更する事は出来ないのが条件です。) 言い直せば、1名分の情報は1400レコードあるとなります。但し、集計に使用する情報はその内の400レコードであり、1000レコードは不要です。 処理する人数は3万件ぐらいあります。 (1)1400レコード×3万件の情報をインポート出来るのでしょうか?    テーブル制限の1Gを超えないのでしょうか(テーブルサイズの参照方法も?) (2)CSVをインポートする際に、必要なフィールド400だけインポートできるVBAはあるのでしょうか?  必要不要の判別フィールドはあります。 (3)インポート後、ACCESSで400項目を1レコードにする事はできないか?255以上のフィールドのテールを処理する方法はあるのでしょうか? (4)このような大量集計を可能にするには、みなさんは何を使用しているのでしょうか? よろしくお願いいたします。

  • ACCESS2000について

    よろしく、お願いいたします。 ACCESS2000+WinXPを使用しております。 VBAにてボタンに、 DoCmd.TransferText acImportDelim, , "テーブル", "c:データ" というように書いて、ボタン一つで、データをテーブルに格納できるように致しました。 データは、csvまたはtxtなのですが、格納すると、 電話番号のようなデータの、最初の”0(ゼロ)”が消えてしまいます。 テーブルは、「テキスト型」にしてあります。 何か良い方法はありませんでしょうか? よろしく、お願いします。

  • accessでcommitができますか?

    accessで複数のテーブルから1つのテーブルに書き込みをしています。VBAでSQL文を作成しDoCmd.RunSQLでinsertを実行しています。データが多いと遅くなるようです。Commitとか実行できるのでしょうか?そうすれば早くなりますか?ご指導のほどお願いいたします。

  • ACCESSのDoCmd.TransferText

    Access初心者です。 VBAを使ってCSVファイルをテーブルにインポート、テーブルからCSVへのエクスポートをしたいと思っています。 DoCmd.TransferTextを使おうと思っているのですが、データ型の定義を行いたいので、TransferTextの第2引数にschema.iniが必要になるのだと認識しています。 ですが、今までにschema.iniを作ったことがないので、どのように作ればいいのか?(どのようなレイアウトにすればいいのか?)さっぱりわかりません。schema.iniの作り方をご教授ください。

  • Access VBA DoCmd.TransferTextについて

    ACCESS VBAでテーブルの情報をDoCmd.TransferTextを用いて CSV出力しようとしています。 しかし、"YYYY/MM/DD"形式のデータがどうしても"YYYY/MM/DD HH:mm" 形式で出力されてしまいます。 このメソッドを用いると必ずこうなってしまうのでしょうか? よろしくお願いいたします。

  • ACCESSのテーブルをCSVファイルに

    こんにちは。 ACCESSテーブル内のフィールド値をカンマ付きのテキストファイルまたは CSVファイルで出力したいのですがなにか良い方法はないのでしょうか? ちなみにDoCmd.TransferTextだのDoCmd.OutputToを試してみたので すが、うまくいきませんでした。 よろしくお願いします。

  • Access CSVデータのエクスポート

    Access CSVデータのエクスポート 下記のようにCSVデータをエクスポートしています。 最後をTrueに設定すると1行目がタイトルとしてエクスポート出来るはずが出来ません。 エクスポート定義が原因でしょうか? 対処方法を教えて下さい。 ※ちなみに下のようにエクスポート定義を使用しないと1行目をタイトルしてエクスポート出来ます。 DoCmd.TransferText acExportDelim, "エクスポート定義", "テーブル名", Format(Now(), "yyyymmdd") & "test.csv", True DoCmd.TransferText acExportDelim, , "テーブル名", Format(Now(), "yyyymmdd") & "test.csv", True

  • AccessVBA(2003)でExcelデータの作成

    Access2003で社内のシステムを構築しています。 OSはWindowsXPです。 AccessVBAでテーブルもしくはクエリから、Excelで取り込める CSV形式でExportしたいのですが、なかなかうまく行きません。 (他のシステムへのインターフェース) DoCmd.TransferText acExportDelim を使用した例などを教えていただければ幸いです。 それとも他に良い方法はあるのでしょうか?。 よろしくお願いします。

専門家に質問してみよう