• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access2003でスタック領域不足エラー)

Access2003でスタック領域不足エラー

このQ&Aのポイント
  • 帳票形式フォームの参照整合性設定された表形式サブフォームから全レコードを削除する際に、スタック領域が不足してエラーが発生します。
  • エラーの原因としては、連鎖削除設定して主レコードを削除する方法しかないことが考えられます。
  • スタック領域不足エラーを回避するためには、削除処理の回数を制限するなどの対策が必要です。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答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のどちらを使っているか判別できるようです。 投稿用にタブインデントは全角スペースにしています。

psgrade
質問者

補足

ご教示頂いた方法でRecordsetのタイプを確認したところ、DAO Recordsetとなりました。現状DAO.を除いた宣言でエラーが出ないようですので、これで対応致します。種々お調べ頂き有難う御座いました。

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.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!▽!□) みたいな感じで。

psgrade
質問者

補足

早速ご検討頂き有難う御座います。 うまくいく時は、全行削除されており、飛び飛び削除状態にはなっておりません。 うまくいかない時は、下の方の1-2行を残した状態となっていました。 削除クエリーの場合、サブフォームに#Deletedと表示されて見た目が悪く、フォームの再表示が必要になるので、この方法をトライしました。 今回、レコードセットオブジェクト変数をDAO.Recordsetと宣言しましたが、対象となるレコードセットが、データベースではなく、サブフォームに属するプロパティーでしたので、DAO.をはずし、Recordsetのみにして確認したところ、エラーが起こらなくなりました。このような区別があるのでしょうか?当面これで様子をみてみたいと思います。

関連するQ&A

専門家に質問してみよう