帳票形式フォームの参照整合性設定された表形式サブフォームから全レコードを削除する為、下記のモジュールを作成しました。しかし、実行すると「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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) VBA 行削除した連番 4 2023/06/27 16:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで住所の混在する「丁...
-
教えてgooの機能に関するアンケ...
-
バッチファイルを使用したsql@p...
-
エクセルVBAで行削除時にエラー...
-
もう関わりたくない人がいたらL...
-
ORA-14452について
-
指定した文字があった場合、そ...
-
Gboardの予測変換についての質...
-
恋愛相談かてで
-
秀丸で一行おきに行を削除する...
-
マクロで特定の行まで削除する...
-
アクセスにおいて間違って削除...
-
(Access)複数条件の重複デー...
-
同じ質問
-
ダブルクォーテーションの削除...
-
今日の日付が過ぎたらその行を...
-
【C#】ifと#ifの違い、そして#e...
-
【エクセル】セル内の右側のみ...
-
回答してる間に質問が消えるっ...
-
喧嘩をしてLINE削除され、 また...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA:Openステートメントで開い...
-
「医者も看護師も自分に嫌がら...
-
ハメ撮りが流出したら
-
指定した文字があった場合、そ...
-
教えて!gooにはどのカテゴリが...
-
もう関わりたくない人がいたらL...
-
真剣な質問ほど消されるのはど...
-
Facebookメッセンジャーの不具合
-
インスタグラムのギャラリーの...
-
エクセルで住所の混在する「丁...
-
回答してる間に質問が消えるっ...
-
アクセスにおいて間違って削除...
-
喧嘩をしてLINE削除され、 また...
-
バッチファイルを使用したsql@p...
-
Facebookに自分が四つもアップ...
-
ウェブページへのアクセス不可 ...
-
同じ質問
-
日テレニュースHP、記事削除は...
-
女友達にLINEしたら、既読スル...
-
エクセルVBAで行削除時にエラー...
おすすめ情報