家の中でのこだわりスペースはどこですか?

フォーム社員情報からレコードを削除するボタンを作成してレコードの削除を行いたいのですが、全て削除をして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

A 回答 (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

これを、一番最初のフォームの読み込み時にオフにして、一番最後のフォームを閉じる時にオンすればいいでしょう。

ところで、フィールド名などに"."(ピリオド)を使用するのはやめた方がいいですよ。
では。
    • good
    • 1

こんにちは。

maruru01です。

Me.Requeryを削除してみたらどうなりますか。
Requeryを行うと、レコードセットが更新され、先頭のレコードにカレントを移動しようとしますが、その時レコードが1件もないので、エラーが出るかもしれません。
というか、何故ここにRequeryメソッドを置いているのでしょう。

ちなみに残り1件で削除してレコードが無くなった場合にエラーが出るなら、No.1の方のやり方では意味がありません。
これはすでにレコードが1件もないかどうかを判定しているので。

では。

この回答への補足

1つ書き忘れていましたが、
mySQL = "SELECT * FROM T社員情報 " _
& "WHERE 社員No. =" & Me!txt社員No.
rsADO.Open , mySQL , cnADO, adOpenKeyset, adLockOptimistic
という所を間違っていました。すいません。

Me.Requeryを削除したところ、#Deleted という表示が出てしまいます。

Me.Requeryのままで実行すると、フォームを開いたり閉じたりする時にエラーは出ないのですが、アクセスを終了する時に Docmd.Quit で終了しているのですが、この時にエラーが出てしまいます。
エラーが出てOKをクリックすれば問題なく終了は出来るのですが、出来ればこのエラーを表示したくありません。よろしくお願いします。

補足日時:2002/07/19 16:06
    • good
    • 0

すいません


あまり、知識がないもので。
-------------------------------
エラーメッセージから推測すると
0件レコードを読んだ時のエラーと
思いましたのでEOFやBOF命令で
解決することが経験上ありましたもので
EOF命令を紹介した次第です

あと参考までですが私の場合は
DAO命令で処理を書いてモジュールを
作成しています
SQL命令では必要かもしれないのですが
閉じるときには
rs.Close
は書きますが
Set rs = Nothingは
書いていません

参考になるかどうかは自信がありませんが
とりあえずのご連絡まで。
    • good
    • 0

>Set rsADO = New ADODB.Recordset


>rsADO.Open "T社員情報", cnADO, adOpenKeyset, >adLockOptimistic
の後に
IF rsADO.EOF GOTO OWARI(CLOSEの手前にラベルを)

とすればいかがでしょうか

この回答への補足

ご返事ありがとうございます。
早速、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

補足日時:2002/07/19 14:00
    • good
    • 0

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

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

関連するカテゴリからQ&Aを探す


おすすめ情報

このQ&Aを見た人がよく見るQ&A