アクセス初心者 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
No.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などとしています。
余計なお世話だったら、ゴメンナサイ。
vizzar様
アドバイスありがとうございます。
>レコードが削除されていないというのは、どのように確認されていますか?
>フォームとテーブルを関連づけている場合は、フォームのレコードソースを
>リクエリしていないので、
>幻が見えてしまっているのかも知れません。
画面上に見えているサブフォームのテキストボックスが、
まったく変化がないのと、
処理後にテーブルを開いてみますと、レコードが削除されずに
そのまま残っているんです。
「幻」については、はじめ私もそうではないかと思いました。
大昔に、COBOLで画面処理のプログラムを組んだことがあるので、
画面上の問題?という気もしましたが、
テーブルのレコードが削除されてないものですから、
Deleteの命令そのものがうまくいってないのかも?と。。。
リクエリということを書いていただきましたが、
削除処理後に、サブフォームのほうの表示を更新するのに、
なにかしら、記述なり設定なり必要ですか?
(実際、なにも分からず仕事上の必要に迫られての暴挙です(^^ゞ・・すみません)
いろいろと記述についてのアドバイスありがとうございます。
初めての挑戦(アクセス自体も)で、
マニュアル本にかいてあるそのまんまを書き写している状態です。(^^ゞ
Do While は、Do Until に改めました。
こちらのほうがイメージ的にもピッタリです。
ありがとうございました。
なお、サブフォームのプロパティで「削除の許可」というのがありますよね。
そこは「はい」にはなっています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/07/07 08:37
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでレコードの複製
-
access2010 特定文字を含むレコ...
-
docmd.gotorecordを起動するには
-
access の 最終レコードの判定...
-
アクセスのフォームで自動連番...
-
ACCESS最終データだけ印刷でき...
-
ACCESS 複数のフォームから同一...
-
ファイルメーカーで重複してイ...
-
ACCESSで帳票形式のレポ...
-
ファイルメーカーProでレコード...
-
Access「レコードの保存」
-
AccessのRefresh・Requery・Rep...
-
accessでオートナンバーを使わ...
-
Access サブフォームでの選択行...
-
ACCESSでVBAから選択クエリの抽...
-
googleフォームでインストール...
-
access サブフォームにリストを...
-
access別のテーブルを参照して...
-
Access 複数フォームを...
-
ExcelのComboboxでマウスのスク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS 複数のフォームから同一...
-
ACCESSフォーム入力後の確定
-
AccessのRefresh・Requery・Rep...
-
Accessでレコードの複製
-
accessでオートナンバーを使わ...
-
Accessフォームで詳細内の任意...
-
access の 最終レコードの判定...
-
Accessで経過日付に応じて色を...
-
アクセエスのレコードの更新をV...
-
アクセスで複数レコードを1レ...
-
Access 指定したレコードへ移動
-
ファイルメーカーで重複してイ...
-
MS.Access でサブフォーム付の...
-
access2010 特定文字を含むレコ...
-
DoCmd.SearchForRecord が動か...
-
アクセスのコンボボックスの内...
-
ファイルメーカーのレコード複...
-
MSAccess ロック状態かどうかを...
-
ACCESS最終データだけ印刷でき...
-
新しいレコードへの移動時にト...
おすすめ情報