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

ACCESS初心者です。
以下のテーブルがサブフォームに表示されています。
メインフォームの名前をmain_frm
サブフォームの名前をsub_frm
テーブルの名前をtable
とします。

テーブルは以下のように構成されています。
文字|値
a|1
b|10
c|3
d|4

メインフォームに削除ボタンを設置して
マウスポインタにより任意のテーブルの一つの行(例えば、b|10)
を削除するにはどのようなプロージャを組めばよろしいでしょうか?

A 回答 (2件)

メインフォーム/サブフォームに分けられるようですが、


サブフォームのフォームヘッダ部分を使って、1つのフォームでやるってことは可能ですか。


削除するものを選んでから、削除ボタンをクリックする、手順になります。


1つのフォームでする場合)

サブフォーム sub_frm のフォームヘッダに、削除用ボタン btnDel を配置します。
btnDel のクリック時イベントプロシジャに以下を記述します。

Private Sub btnDel_Click()
  Dim rPos As Long

  If (Me.NewRecord = False) Then
    rPos = Me.Recordset.AbsolutePosition
    Me.Recordset.Delete
    Me.Requery
    Me.Recordset.AbsolutePosition = rPos
  End If
End Sub

処理内容としては、
新規レコード行でなければ、
現在行を記憶し、
削除後、
レコードを再取得し、
処理していた行に移動する
というものですが、
AbsolutePosition の使い方が正しいのかは?です。
(Access2007で動いています)


メイン/サブフォームにする場合)

メインフォームに削除用ボタン btnDel を配置します。
btnDel のクリック時イベントプロシジャに以下を記述します。

Private Sub btnDel_Click()
  Dim rPos As Long

  If (Me.FSUB.Form.NewRecord = False) Then
    rPos = Me.FSUB.Form.Recordset.AbsolutePosition
    Me.FSUB.Form.Recordset.Delete
    Me.FSUB.Form.Requery
    Me.FSUB.Form.Recordset.AbsolutePosition = rPos
  End If
End Sub

上記 FSUB は、メインフォームに配置したサブフォーム/サブレポート の名前です。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。
意図したプログラムを作ることができました。

ソースまで頂き、ありがとうございます!

お礼日時:2009/01/08 22:05

vbaでプログラムするのは あまり詳しくないので


削除クエリーを使用した方法です

サブフォームのヘッダー部分へテキスト項目を設置します
[form_koomoku]と仮定
このテキストソースへは当該の選択用項目[tbl_koomoku](仮定名)
を指定します
(ここへはマウスで選択された行の値が入る)

次に削除ですが
削除クエリーを作成して
抽出条件欄へ([tbl_koomoku]の項目にて)
[Forms]![main_frm]![sub_frm].[Form]![form_koomoku]
といれます
このクエリーを開く というマクロを作成して
そのマクロをクリックで呼び出す


ただし b|10 と同じ値のレコードが複数あれば
その全部が削除されます
 
    • good
    • 0
この回答へのお礼

サブフォームのヘッダにテキストボックスを作り
意図したプログラムを作ることができました!

ありがとうございます!

お礼日時:2009/01/08 22:03

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

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