プロが教える店舗&オフィスのセキュリティ対策術

フォーム、サブフォームを削除後、はじめのレコードに戻るボタンを作りたいです。
削除まではできたのですが、はじめのレコードにもどることができません。
エラーは出ておらず、削除後の#deletedが各テキストボックスに入った状態で動きが止まってしまいます。
Frm見積書明細がサブフォーム名、T見積書がフォーム名、見積IDはテキストボックスです。
どう修正すればよいでしょうか?

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim vsql As String
Dim i As Variant
Dim x As Variant

Set db = CurrentDb()

x = Me!Frm見積書明細.Form.Recordset.RecordCount

If x = 0 Then
MsgBox "見積書明細の入力がない為削除できません"
Else

i = 見積ID

vsql = "select * from T見積書 where 見積ID = '" & i & "'"
Set rs = db.OpenRecordset(vsql, dbOpenDynaset)
If MsgBox("削除しますか?", vbYesNo) = vbYes Then
DoCmd.SetWarnings False
Me!Frm見積書明細.SetFocus
DoCmd.RunCommand acCmdSelectAllRecords
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True

rs.Delete
DoCmd.GoToRecord , , acFirst

rs.Close
db.Close
End If
End If

ご回答よろしくお願いします!

A 回答 (5件)

こんばんは。



ご質問文から、フォームウィザードで作成された連結フォームかなと想像しますが、そう仮定すると、

DoCmd.RunCommand acCmdDeleteRecord
rs.Delete

などに違和感を感じるのです。レコードセット rs を開いても、その後に何ら処理があるわけでもありません。
ご提示のソースにある DAO は非連結フォームでレコードを表示する場合の例です。

したがって、ネット検索で一生懸命勉強されているものと推察しますが、色々と混じってしまい混乱されているのではないか、、と。

一度作り直すぐらいの気持ちで整理しましょう。


■ 連結フォームでレコード削除を実現するには

1. まずリレーションシップの設定が必要です。
 (添付図参照)
https://hamachan.info/access2019-relation/
2. T見積書をフォームウィザードで親フォームを作成
3. 2. をデザインビューで開き、サブフォームを作成
  既存のテーブルを使用、T見積明細を選択
4. 削除ボタンのクリックに設定するイベントプロシージャは次の様な感じ。

Private Sub btn_Delete_Click() '<--ボタン名はご自身のものに合わせる

  If Me.NewRecord Then Exit Sub
  
  Dim res As VbMsgBoxResult
    res = MsgBox("表示中のレコードを削除しますか?", _
           vbOKCancel + vbDefaultButton2 + vbInformation)
  If res = vbCancel Then
    Exit Sub
  Else
    DoCmd.SetWarnings False
    DoCmd.RunCommand acCmdDeleteRecord
    DoCmd.SetWarnings True
    DoCmd.GoToRecord acActiveDataObject, , acFirst ’<--データ削除後先頭へ
  End If
  
End Sub
「docmd.gotorecordを起動す」の回答画像3
    • good
    • 1

テーブルの構成など細かい説明をしてませんが、当方で#3の説明の通り作成して動作確認しました。


ごめんなさい、原因はわかりません。

ソースはサブの方ではなく、親フォーム側に貼ってますか?
    • good
    • 0
この回答へのお礼

もう一度やり直してみたら出来るようになりました!
どこか入力する場所を間違えていたかもしれません。
ご丁寧に教えて頂きありがとうございました!

お礼日時:2022/06/24 15:22

添付図のようなフォームを想像してます。


適当に作ったのでイメージのご参考までに。

頑張って!☆
「docmd.gotorecordを起動す」の回答画像4
    • good
    • 0
この回答へのお礼

お返事遅くなり申し訳ありません!
ご丁寧にいろいろとご回答頂きましてありがとうございます。

ご回答を基に直してみましたがレコードに移動できませんでした・・・
レコード移動までの削除動作はしっかり動いてくれました。

親フォーム、サブフォーム共に連結フォームです。
リレーションシップの組み方を確認しました。
添付図で送って頂いたフォームのイメージで間違いございません。
1つ目のレコードのみエラーが出ずにうまく動作してくれます。

他に見直すところがあれば教えて下さい。
宜しくお願いします。

お礼日時:2022/06/21 08:42

親フォームのT見積書は連結フォームですか?


サブフォームは連結フォーム?

連結フォームと非連結フォームとありまして、用語の意味は検索してみて下さい。

コード全体に違和感があります、、
    • good
    • 0

こんにちは。



恐らくですが、、
見積IDで検索し、レコード1件のレコードセットで、それを削除したらレコードの移動はできなくなるのでは?

レコード削除後に改めてフォームに全件レコードセットなりを設定し直す必要があるのではと思いました。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

rs.deleteの後にme.requeryを書き足してみたのですが下記のエラーが出てしまいました
実行時エラー2759 オブジェクトを起動するときにエラーが発生しました
書き足す場所が良くないのでしょうか?

お礼日時:2022/06/17 16:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています