
帳票形式フォームの参照整合性設定された表形式サブフォームから全レコードを削除する為、下記のモジュールを作成しました。しかし、実行すると「28:スタック領域が不足しています。」のエラー表示でフリーズ状態となってしまいます。エラーとなるのは毎回ではありません。原因と回避方法をご教示下さい。
連鎖削除設定して主レコードを削除する方法しかないのでしょうか?
On Error GoTo Err_削除_Click
Dim MyAnswer As Variant, MyRs As DAO.Recordset
Set MyRs = Me.SubForm.Form.Recordset
MyRs.MoveFirst
Do Until MyRs.EOF
MyRs.Delete
MyRs.MoveNext 'ここでエラーとなります。
Loop
Recovery_削除_Click:
Set MyRs = Nothing
Exit_削除_Click:
Exit Sub
Err_削除_Click:
If Err.Number = 3021 Then
Resume Recovery_削除_Click
Else
MsgBox Err.Number & ":" & Err.Description
Resume Exit_削除_Click
End If
No.2ベストアンサー
- 回答日時:
削除クエリーの場合、サブフォームに#Deletedと表示
me!サブフォーム名.form.requery
じゃダメですかね。ゴミレス勘弁。
dao.recordset の件は分かりません。
調べる気力も体力もスキルも。。。
Access2010のヘルプでは
Sub SupplierID_AfterUpdate()
Dim rst As DAO.Recordset
Dim strSearchName As String
Set rst = Me.Recordset
strSearchName = CStr(Me!SupplierID)
rst.FindFirst "SupplierID = " & strSearchName
If rst.NoMatch Then
MsgBox "Record not found"
End If
rst.Close
End Sub
ともなっています。
Sub CheckRSType()
Dim rs as Object
Set rs=Forms(0).Recordset
If TypeOf rs Is DAO.Recordset Then
MsgBox "DAO Recordset"
ElseIf TypeOf rs is ADODB.Recordset Then
MsgBox "ADO Recordset"
End If
End
でRecordsetのどちらを使っているか判別できるようです。
投稿用にタブインデントは全角スペースにしています。
この回答への補足
ご教示頂いた方法でRecordsetのタイプを確認したところ、DAO Recordsetとなりました。現状DAO.を除いた宣言でエラーが出ないようですので、これで対応致します。種々お調べ頂き有難う御座いました。
補足日時:2013/08/21 13:07No.1
- 回答日時:
レコードセットを回して順次削除は行ったことがないのですが
MyRs.MoveFirst
Do Until MyRs.EOF
MyRs.Delete
MyRs.MoveNext 'ここでエラーとなります。
Loop
を考えるに
Delete しても実際には削除フラッグのようなものが立って
いるだけのような雰囲気ですね。
もしレコードが存在しないのなら、Current Recordの位置はどこになるのでしょう。
削除したレコードの次?
なら、その後で MoveNext してるのでレコードは飛び飛びに削除されてよさそうな。
削除したレコードの前?
なら、最初のレコードを削除した場合にどこが Currentになるのでしょう。
なのでどのタイミングかは不明ですがある段階まではAccess内部で記憶していると
考えてもよさそうです。
で、この記憶領域が不足したのかな?と。
削除クエリで行えませんか。
Currentdb.Execute("delete * from table where ○=" & forms!▽!□)
みたいな感じで。
この回答への補足
早速ご検討頂き有難う御座います。
うまくいく時は、全行削除されており、飛び飛び削除状態にはなっておりません。
うまくいかない時は、下の方の1-2行を残した状態となっていました。
削除クエリーの場合、サブフォームに#Deletedと表示されて見た目が悪く、フォームの再表示が必要になるので、この方法をトライしました。
今回、レコードセットオブジェクト変数をDAO.Recordsetと宣言しましたが、対象となるレコードセットが、データベースではなく、サブフォームに属するプロパティーでしたので、DAO.をはずし、Recordsetのみにして確認したところ、エラーが起こらなくなりました。このような区別があるのでしょうか?当面これで様子をみてみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Yahooフリマってどれくらい時間...
-
ウェブページへのアクセス不可 ...
-
喧嘩をしてLINE削除され、 また...
-
VBA:Openステートメントで開い...
-
教えて!gooはすぐに質問を削除...
-
outlook迷惑メールフォルダーに...
-
mp3の埋め込み画像の削除ができ...
-
フェイスブック 検索履歴削除
-
回答して解決したとお礼があっ...
-
インスタグラムのギャラリーの...
-
教えて!gooのヘルプには 1ヶ月...
-
これはやらせですよね?
-
言論統制を受けたことはありま...
-
アクセスにおいて間違って削除...
-
(Access)複数条件の重複デー...
-
google chromeのブックマークが...
-
政府にとって都合の悪い情報は...
-
エクセル 関数 指定の繰り返し...
-
YouTubeの初期音量が最大になり...
-
今日の日付が過ぎたらその行を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えてgooでガイドライン違反と...
-
教えてgooでコメントしてすぐ消...
-
先ほどした質問が削除されまし...
-
Yahooフリマってどれくらい時間...
-
言論統制を受けたことはありま...
-
スマホのアプリを削除すると、...
-
outlook迷惑メールフォルダーに...
-
告白してフラれた相手の連絡先...
-
指定した文字があった場合、そ...
-
Windows11に残されたWindows10...
-
もう関わりたくない人がいたらL...
-
ATMに登録されている振込先を削...
-
VBA:Openステートメントで開い...
-
ウェブページへのアクセス不可 ...
-
アクセスにおいて間違って削除...
-
バッチファイルを使用したsql@p...
-
喧嘩をしてLINE削除され、 また...
-
これはやらせですよね?
-
エクセルで住所の混在する「丁...
-
ORA-14452について
おすすめ情報