|

|
|
 |
14.登録処理 |
 |
|
|
|
|
|
登録処理はフォーム「登録変更」を使用して行います。が、フォーム「登録変更」は既に登録されているデータをクエリーで抽出し表示するという作りにしました。しかし、登録とは新しくデータを追加する処理です。ちょっとヤバイ・・・?登録用のフォームを作ってみる?
しかし、同じようなフォームが2つあるのもムダなので、強引に使っちゃいましょう!登録されたデータしか表示できないのなら登録しちゃえばいいのです!
登録処理を行うときは、仮として新しいレコードを作って、それに対しての変更という形にします。もし、取り消しをしたい場合は削除してしまえば誰にも気づかれません(笑)
|
|
|
|
|
|
|
|
|
|
レコードを追加し、追加したレコードのレコードキーを呼び出しもとへ返すという処理です。ステータスを1としたのは、仮登録を識別するためのものです。取り消し(登録変更)を押したとき、仮登録ならレコードの削除を行って証拠隠滅(?)をします。作成先はモジュールです。
Sub 仮登録(仮登録キー As Long)
'記述場所:モジュール「AddressBookModule」
Call テーブルオープン
tbl.AddNew
仮登録キー = tbl!レコードキー
tbl!ステータス = 1
tbl.Update
Call テーブルクローズ
End Sub
|
ステータスの謎が、徐々に明かされてきたでしょ?
|
|
|
|
|
|
|
|
|
|
登録を取り消したいときに、仮登録レコードを削除するためのプロシジャも作ります。削除対象は、クエリーで抽出されているレコードです。
なお、このプロシジャは、後でレコード削除オペレーションの所でも利用します。
これも、作成先はモジュールです。
Sub レコード削除()
'記述場所:モジュール「AddressBookModule」
'Access97、2003での手順
Call テーブルオープン
Dim qry As Recordset
Set qry = db.OpenRecordset("汎用クエリー", DB_OPEN_DYNASET)
qry.Delete
qry.Close
Call テーブルクローズ
End Sub
|
※Access97、2003の場合。太字の部分がAccess2000以降との違い。
Sub レコード削除()
'記述場所:モジュール「AddressBookModule」
'Access2000での手順
Call テーブルオープン
Dim qry As DAO.Recordset
Set qry = db.OpenRecordset("汎用クエリー", dbOpenDynaset)
qry.Delete
qry.Close
Call テーブルクローズ
End Sub
|
※Access2000の場合。太字の部分がAccess97、2003との違い。
|
|
|
|
|
|
|
|
|
|
メニューで登録ボタンを押したとき登録処理が行えるようにメニューへ処理を追加しましょう。追加場所は登録ボタンのクリックイベント、追加する内容はレコードの仮登録、仮登録レコード抽出クエリーの作成、登録変更の表示です。
Private Sub 登録_Click()
'記述場所:フォーム「メニュー」
'記述箇所:「登録」ボタンのイベント「クリック時」
Dim 仮登録キー As Long
Call 仮登録(仮登録キー)
Call 処理対象抽出クエリー創成(仮登録キー)
DoCmd.OpenForm "登録変更"
End Sub
|
|
|
|
|
|
|
|
|
|
|
今回のフォーム「登録変更」の修正は取り消しを押したときの処理の追加です。
新規登録時はレコードは仮で登録されているので、取り消しが押されたときは仮のレコードを削除しなくてはなりません。その処理を追加します。
仮のレコードかどうかはステータスで判断します。この為にステータスがあったんですねぇ!いままで「何に使うんじゃ??」って思ってた人、やっとぐっすり眠ることができますね(笑)
追加する部分は取り消しボタンのイベントクリック時で、次のようにします。
Private Sub 取り消し_Click()
'記述場所:フォーム「登録変更」
'記述箇所:「取り消し」ボタンのイベント「クリック時」
If ステータス = 1 Then
Call レコード削除
End If
DoCmd.Close
End Sub
|
※太字が追加する部分
If文で参照しているステータスは、フォーム上のテキストボックスです。フォーム上のテキストボックス等のコントロールを参照するときは、このようにコントロール名(プロパティの名前で定義したもの)で参照できます。
ところで、ステータスを隠しオブジェクトにした理由が、これでわかったでしょ?入力する必要がないというか、入力できるようにすると、まともな処理が行えないからです。
なお、If文に関しての説明は省略します。プログラムを組んだことのある人だったら、見りゃ分かると思ったので。
|
|
|
|
|
|
|
|
|
|
はーい、確認の時間です!(笑)
レコードが登録できるか、取り消しの時レコードが削除されるか、いろいろ確認してみるとよいですよ。
|
|
|
|
|