OCN光で最大124,800円おトク!

アクセス初心者 VBAに初挑戦です。
何度もこちらで助けていただき、あと一歩のところまできましたが、またつまづきました。
教えてください。

有給休暇の年次更新プログラムを作成中です。
一連の更新計算処理を行ったあと、サブフォームに入力すみの、消化履歴レコードをテーブルから削除する部分を作っています。

テーブルは、
社員コード、年月日、消化日数 で1レコードです。
下の記述で組んでおり、エラーも出ず、メッセージを確認する限りは、きちんと動いて、当該レコードの場合には”削除しました”のメッセージも出て、きれいに終わっているのですが、実際にはレコードが削除されていません。
チェックすべき点は、どこでしょうか?
ご教示おねがいいたします。

'**********************
'*** 消化履歴クリア ***
'**********************

'実行の確認ポーズ
yn = MsgBox("有休の履歴をクリアしますか?", vbYesNo, "確認!")
If yn <> vbYes Then
Exit Sub
End If

'消化履歴(有給休暇:テーブル) 当該社員の全レコードを削除しクリアする
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim tbl As String

Set cnn = CurrentProject.Connection
Set rs = New ADODB.Recordset
tbl = "有給休暇"
Call rs.Open(tbl, cnn, adOpenForwardOnly, adLockBatchOptimistic)

rs.MoveFirst

Do While rs.EOF = False
MsgBox "form社員コード= 【" & [Forms]![フォーム基本情報]![社員コード] & "】", , "確認"
MsgBox "tbl社員コード= 【" & rs("社員コード").Value & "】", , "確認"
If rs("社員コード").Value = [Forms]![フォーム基本情報]![社員コード] Then
rs.Delete
MsgBox "削除しました【" & rs("社員コード").Value & "】", , "確認"
End If

Call rs.MoveNext

Loop

Call rs.Close
Set rs = Nothing
Set cnn = Nothing

このQ&Aに関連する最新のQ&A

A 回答 (1件)

レコードが削除されていないというのは、どのように確認されていますか?


フォームとテーブルを関連づけている場合は、フォームのレコードソースを
リクエリしていないので、
幻が見えてしまっているのかも知れません。

あと、rs.Openやrs.MoveNext等にはCallはいらないですし、
ConnectionをCurrentProjectから引っ張ってくるのなら、
あえてcnnを定義しなくても
rs.Open(tbl, CurrentProject.Connection, adOpenForwardOnly, adLockBatchOptimistic)
でもよろしいかと...

また、
Do While rs.EOF = False
より
Do Until rs.EOF
のほうが判りやすいかと...

それと、わたしの場合、変数名の頭には変数の型を表すために
strTblなどとしています。

余計なお世話だったら、ゴメンナサイ。
    • good
    • 0
この回答へのお礼

vizzar様
アドバイスありがとうございます。
>レコードが削除されていないというのは、どのように確認されていますか?
>フォームとテーブルを関連づけている場合は、フォームのレコードソースを
>リクエリしていないので、
>幻が見えてしまっているのかも知れません。

画面上に見えているサブフォームのテキストボックスが、
まったく変化がないのと、
処理後にテーブルを開いてみますと、レコードが削除されずに
そのまま残っているんです。

「幻」については、はじめ私もそうではないかと思いました。
大昔に、COBOLで画面処理のプログラムを組んだことがあるので、
画面上の問題?という気もしましたが、
テーブルのレコードが削除されてないものですから、
Deleteの命令そのものがうまくいってないのかも?と。。。
リクエリということを書いていただきましたが、
削除処理後に、サブフォームのほうの表示を更新するのに、
なにかしら、記述なり設定なり必要ですか?
(実際、なにも分からず仕事上の必要に迫られての暴挙です(^^ゞ・・すみません)

いろいろと記述についてのアドバイスありがとうございます。
初めての挑戦(アクセス自体も)で、
マニュアル本にかいてあるそのまんまを書き写している状態です。(^^ゞ

Do While は、Do Until に改めました。
こちらのほうがイメージ的にもピッタリです。
ありがとうございました。

なお、サブフォームのプロパティで「削除の許可」というのがありますよね。
そこは「はい」にはなっています。

お礼日時:2007/07/10 16:23

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


人気Q&Aランキング