• ベストアンサー

Access カレントレコードがありません

フォーム社員情報からレコードを削除するボタンを作成してレコードの削除を行いたいのですが、全て削除をして1件もなくなった場合にデータベースを閉じる時に「カレントレコードがありません」というエラーが出てしまいます。OKをクリックすると閉じる事は閉じれるのでこのエラーが出ないようにしたいのですが。。。 よろしくお願いします。 'エラー開始 On Error GoTo err_RTN: '接続 Set cnADO = CurrentProject.Connection 'レコードセットを取得 Set rsADO = New ADODB.Recordset rsADO.Open "T社員情報", cnADO, adOpenKeyset, adLockOptimistic '削除 ret = MsgBox(Me!txt氏名.Value & Chr(13) & "を削除しますか?", vbYesNo + vbQuestion, "削除") Select Case ret Case vbYes rsADO.Delete Me.Requery Case vbNo Exit Sub End Select '終了 rsADO.Close: Set rsADO = Nothing cnADO.Close: Set cnADO = Nothing

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

再びmaruru01です。 うーん、ちょっと分からないですね。 なので、別の方法を。 やりたいことは、フォームのtxt社員No.と一致する社員No.のレコードを削除するということですね。 なのでレコードセットを開かずに直接SQLを実行します。 (確認のIf文の中に) mySQL = "DELETE * FROM T社員情報 " & "WHERE 社員No. =" & Me!txt社員No. DoCmd.RunSQL mySQL ただし、アクションクエリの確認メッセージが出ますので、 Accessのメニュー[ツール]→[オプション]→[編集/検索]タブ→[確認]→[アクション クエリ]のチェックは外しておきます。 なお、この「アクション クエリの確認」はVBAから次のように変更出来ます。 '確認オフ Application.SetOption "Confirm Action Queries", False '確認オン Application.SetOption "Confirm Action Queries", True これを、一番最初のフォームの読み込み時にオフにして、一番最後のフォームを閉じる時にオンすればいいでしょう。 ところで、フィールド名などに"."(ピリオド)を使用するのはやめた方がいいですよ。 では。

その他の回答 (3)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 Me.Requeryを削除してみたらどうなりますか。 Requeryを行うと、レコードセットが更新され、先頭のレコードにカレントを移動しようとしますが、その時レコードが1件もないので、エラーが出るかもしれません。 というか、何故ここにRequeryメソッドを置いているのでしょう。 ちなみに残り1件で削除してレコードが無くなった場合にエラーが出るなら、No.1の方のやり方では意味がありません。 これはすでにレコードが1件もないかどうかを判定しているので。 では。

t-tomo
質問者

補足

1つ書き忘れていましたが、 mySQL = "SELECT * FROM T社員情報 " _ & "WHERE 社員No. =" & Me!txt社員No. rsADO.Open , mySQL , cnADO, adOpenKeyset, adLockOptimistic という所を間違っていました。すいません。 Me.Requeryを削除したところ、#Deleted という表示が出てしまいます。 Me.Requeryのままで実行すると、フォームを開いたり閉じたりする時にエラーは出ないのですが、アクセスを終了する時に Docmd.Quit で終了しているのですが、この時にエラーが出てしまいます。 エラーが出てOKをクリックすれば問題なく終了は出来るのですが、出来ればこのエラーを表示したくありません。よろしくお願いします。

  • oka123
  • ベストアンサー率31% (69/219)
回答No.2

すいません あまり、知識がないもので。 ------------------------------- エラーメッセージから推測すると 0件レコードを読んだ時のエラーと 思いましたのでEOFやBOF命令で 解決することが経験上ありましたもので EOF命令を紹介した次第です あと参考までですが私の場合は DAO命令で処理を書いてモジュールを 作成しています SQL命令では必要かもしれないのですが 閉じるときには rs.Close は書きますが Set rs = Nothingは 書いていません 参考になるかどうかは自信がありませんが とりあえずのご連絡まで。

  • oka123
  • ベストアンサー率31% (69/219)
回答No.1

>Set rsADO = New ADODB.Recordset >rsADO.Open "T社員情報", cnADO, adOpenKeyset, >adLockOptimistic の後に IF rsADO.EOF GOTO OWARI(CLOSEの手前にラベルを) とすればいかがでしょうか

t-tomo
質問者

補足

ご返事ありがとうございます。 早速、oka123さんのご指示の通り(勘違いをしているかもしれません。) 書いたつもりなのですが、やはりデータベースを閉じる時にエラーが出てしまいます。 '接続 Set cnADO = CurrentProject.Connection 'レコードセットを取得 Set rsADO = New ADODB.Recordset rsADO.Open "T社員情報", cnADO, adOpenKeyset, adLockOptimistic If rsADO.EOF Then GoTo OWARI: '削除 ret = MsgBox(Me!txt氏名.Value & Chr(13) & "を削除しますか?", vbYesNo + vbQuestion, "削除") Select Case ret Case vbYes rsADO.Delete Me.Requery Case vbNo Exit Sub End Select OWARI: '終了 rsADO.Close: Set rsADO = Nothing cnADO.Close: Set cnADO = Nothing

関連するQ&A