(VBA)エクセルからアクセスのレコード削除が遅い?

このQ&Aのポイント
  • エクセルで作成した契約管理アプリで、ACCESSのデータベースにアクセスし、契約内容を管理する仕様のものがあります。
  • レコードのオール削除の部分が異常なほどに時間がかかるのです。たぶんコードがおかしいんでしょうけど…。
  • レコード数が1000近くあったりするんで、これをループで削除の作業をしようとしているので、時間がかかるのではとも思うのですが、何かもっと格段に早い方法はないのでしょうか?
回答を見る
  • ベストアンサー

(VBA)エクセルからアクセスのレコード削除が遅い?

エクセルで作成した契約管理アプリで、ACCESSのデータベース にアクセスし、契約内容を管理する仕様のものがあります。 (複数拠点で仕様する為、エクセルだけだと一つのものでの 管理が困難なのでこのようにしています。ACCESSは共有フォルダに おいています。) それで、管理する工程の中で、一度データベースのレコード すべてをオール削除したい場合があります。 「今月契約」というテーブルを、月が変わったので、レコード が0の状態から再度、管理を始める場合等・・・。 「今月分セットアップ」というボタンで、先月分のデータを特定 の場所に保存したり、新たに契約管理を始める為に、テーブルの データを削除したりと一連の作業を自動で行うような仕様で 作成をしました。 その中で、レコードのオール削除の部分が異常なほどに時間が かかるのです。たぶんコードがおかしいんでしょうけど…。 コードの一部を示しておきます。 fileName = P:\契約管理DB.mdb Set dbobj = OpenDatabase(fileName) Set dbRecord = dbobj.OpenRecordset("今月契約", dbOpenDynaset) dbRecord.MoveFirst Do Until dbRecord.EOF dbRecord.Delete dbRecord.MoveNext Loop レコード数が1000近くあったりするんで、これをループで削除 の作業をしようとしているので、時間がかかるのではとも思う のですが、何かもっと格段に早い方法はないのでしょうか? どなたかご教授お願いいたします。

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

  • ベストアンサー
  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.1

> レコード数が1000近くあったりするんで、これをループで削除 > の作業をしようとしているので、時間がかかるのではとも思う > のですが、何かもっと格段に早い方法はないのでしょうか? Set dbobj = OpenDatabase(fileName) dbobj.Execute "DELETE FROM 今月契約", dbFailOnError で、どうでしょうか?

yk3291
質問者

お礼

回答ありがとうございます。 できました。非常に処理が早くなりました。 こういう方法があったのでうね。勉強になりました。 本当にありがとうございました。

関連するQ&A

  • access テーブル内のレコードの編集を不可に。

    よろしくお願いします。 仕様環境(access2003,access2007) access データベースを作っています。 データベース内にテーブルがいくつかあるのですが、 他人に勝手に変更(レコードの追加や削除)してもらいたくない テーブルがあります。 (どんどん件数が足される仕様のものではないので) 何かいい方法はありますでしょうか? データベースウィンドウ全体(2007だとナビゲーションウィンドウ)を 隠す方法は知ってますが、違う方法を考えています。 ちなみにリンクテーブルは使っていません。 教えてください、よろしくお願いします。

  • アクセスのクエリでレコード削除ができません。

    アクセス超初心者です。 テーブルを商品コードでくっつけて、クエリのデザインビューで表示しました。 いらないレコードを削除しようとしたところ、できません。 くっつける前の、テーブルではできますが、クエリで実行させ、レコードを削除しようとしたところできません。 どうしたらよいのか教えてください。 あと、もうひとつ、クエリで、出力したいフィールド名をドラッグしたあと、削除したいときには、どうすればよいでしょうか? 表示しないなら、できるのですが・・・。削除がわかりません。 よろしくお願いいたします。

  • アクセスVBA 初心者 レコードの削除

    アクセス初心者 VBAに初挑戦です。 何度もこちらで助けていただき、あと一歩のところまできましたが、またつまづきました。 教えてください。 有給休暇の年次更新プログラムを作成中です。 一連の更新計算処理を行ったあと、サブフォームに入力すみの、消化履歴レコードをテーブルから削除する部分を作っています。 テーブルは、 社員コード、年月日、消化日数 で1レコードです。 下の記述で組んでおり、エラーも出ず、メッセージを確認する限りは、きちんと動いて、当該レコードの場合には”削除しました”のメッセージも出て、きれいに終わっているのですが、実際にはレコードが削除されていません。 チェックすべき点は、どこでしょうか? ご教示おねがいいたします。 '********************** '*** 消化履歴クリア *** '********************** '実行の確認ポーズ yn = MsgBox("有休の履歴をクリアしますか?", vbYesNo, "確認!") If yn <> vbYes Then Exit Sub End If '消化履歴(有給休暇:テーブル) 当該社員の全レコードを削除しクリアする Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset Dim tbl As String Set cnn = CurrentProject.Connection Set rs = New ADODB.Recordset tbl = "有給休暇" Call rs.Open(tbl, cnn, adOpenForwardOnly, adLockBatchOptimistic) rs.MoveFirst Do While rs.EOF = False MsgBox "form社員コード= 【" & [Forms]![フォーム基本情報]![社員コード] & "】", , "確認" MsgBox "tbl社員コード= 【" & rs("社員コード").Value & "】", , "確認" If rs("社員コード").Value = [Forms]![フォーム基本情報]![社員コード] Then rs.Delete MsgBox "削除しました【" & rs("社員コード").Value & "】", , "確認" End If Call rs.MoveNext Loop Call rs.Close Set rs = Nothing Set cnn = Nothing

  • Access2000でのExcel行の削除法

    Access2000でPC貸し出しの受付けシステムを開発中ですが、テーブルにリンクされたエクセルのシートがあります。 ある座席番号を入力して貸し出し中であれば貸し出した時に入力したレコードがテーブルから削除されるようになっているんですが、リンクテーブルのためAccessでレコードを削除できないと判明しました。そこでAccessからExcelのレコード(行)を削除するにはどのようなコードになるか教えていただけませんでしょうか? 説明が不十分なら補足をお願いします。

  • Access2000のレコード削除について

    Access2000のVBAにより、フォームに配置したコマンドボタンを押すことで、テーブルの全レコードを一度に削除したいのですが、どの様にすればよいのですか? 構文で教えて頂けると助かります。とても困っています。よろしくお願いします。

  • Accessでデータベースからレコードを削除するには?

    Accessについての質問です。 データベースへのデータの登録はフォームを使って行なうようですが、データの削除はどうやってやるんでしょうか? レコード単位で削除したいです。

  • Access2003レコードの連鎖削除について教えてください

    Access2003レコードの連鎖削除について教えてください テキスト学習の経験のみです。 現在アクションクエリの操作をしていて疑問になったので教えてください。 「T会員マスター」で退会者も一緒に管理しているが、退会者の人数が多くなったので テーブル作成クエリで「T退会者テーブル」を作った。 その後退会者を「T会員マスター」から削除クエリを使用して削除する。という操作です。 「連鎖削除」にチェックを入れて「T購入履歴データ」からもその会員のレコードを削除する流れになっています。 <質問> 退会者のマスターは「T退会者テーブル」で今後も管理ができるのでいいと思うのですが、「購入履歴」はまったく削除されてしまうのは、問題がないのでしょうか? もし、問題があるとすれば「T退会者の購入履歴」というテーブルを作るものでしょうか? よく「削除クエリは実務では怖くて使わないよ」とありますが、やはりそういうものでしょうか? 実務経験があまりないので質問が分かりにくいと思いますが、よろしくお願いします。

  • Accessでレコード削除ができなくなってしまいました

    助けてください。 Access2000を使用しています。 ASPでデータのやりとりできるようにプログラムを作成しているのですが、 何かの拍子にテーブル内のデータを消すことができなくなりました。 直接アクセスで削除しようとしても 「レコードに検索キーが見つかりませんでした」 っていうメッセージがでてきて削除できません。 その他データを変更することもできなくなってしまいました。 新規に追加はできます 以上よろしくお願いします

  • Access VBA Me.Requery レコードは削除されています エラー

    Me.Requery すると「レコードは削除されています」エラー 予約テーブル → 確定テーブルにデータ移し、予約テーブルのレコードは削除 という処理をしています。 予約詳細というクエリを作り、フォームで開きました。 [確定]ボタンを設置し、フォームの値を確定テーブルに追加できるようにしました。 確定済みの予約レコードは、削除します。 ここまでは成功したのですが、フォームには、確定済みの予約レコードが表示されたままです。 Me.Requery というコードを追加しましたが、エラーになります。 「レコードは削除されています」エラーです。 単純に[削除]ボタンで1レコード削除した後、 Me.Requery した場合には、問題なく、きれいに再表示されます。 -------------------------------- Private Sub 削除ボタン_Click() Dim ADOcmd As ADODB.Command Set ADOcmd = New ADODB.Command ADOcmd.ActiveConnection = CurrentProject.Connection ADOcmd.CommandText = "Delete from 予約 where 予約ID=" & me.予約ID ADOcmd.Execute Set ADOcmd = Nothing Me.Requery ' <<<< これは成功します。gannersさん感謝<(_ _)> End Sub -------------------------------- 途中で何かのプロパティが変化しているからでしょうか? 解決方法わかる方いらっしゃいますか?

  • レコードの削除ができない

    アクセス2007です。 デザインで一つのフォームを作り そこにテーブル1をドラッグしてサブフォームにしました。 そしてサブフォームのテーブル1はデータシートビューで表示しています。 例えば、画像のように4レコード目を削除しようと思いカーソルを持っていき 右クリックすると 「レコードの削除(R)」が選択できない状態です。 2007では、サブフォームでレコードの削除はできないのでしょうか? アドバイスよろしくお願いします。

専門家に質問してみよう