Microsoft Access Club >SampleFile Q & A >インデックス >このページ >次頁 < 前項  サイト内検索
 

Q&A-025 特定の列のみ変更不可にする一例


 

タイトル : 特定の列のみ変更不可にしたい。
記事No : 16593
投稿日 : 2004/03/11(Thu) 17:27
投稿者 : ようこ
解決済 : ON

OS:XP
Access Version:2000

以下のようなクエリがあり、

社員番号 社員名
0001   あああ
0002   いいい
0003   ううう

これをデータシートフォームに表示させます。
このフォームでは社員番号は変更不可。
社員名は変更可。

新規レコードに関してはどちらも変更(登録)可能としたいのです。

過去ログで

Private Sub Form_Load()
	If Me.社員番号 <> "" Then
		Me.AllowEdits = False
	End If
End Sub

というのがあったのですが、これだとレコード全てにロックがかかってしまいますよね。
社員名列は変更可能にしたいのです。

いわゆる"コードは変更不可・コード名は変更可能"
というよくある仕様だと思うのですが、Accessでどう実現していいか分かりませんでした。
 


> コードは変更不可・コード名は変更可能

データ修正、追加の許可を認めるか、認めないかというのは、各オブジェクトの編集許可プロパティを操作するのが最も簡単です。

 

今回の対応

今回は、NewRecordプロパティを用いて、

  1. 新規レコードの場合のみ、社員番号、社員名の追加データ入力を可とする。
  2. 編集作業については、社員名のみ可とする。

方法としては、

  1. フォームを開く際に、社員番号テキストボックスの編集許可を不可に設定する。
  2. IDフィールドのフォーカス取得時イベントを用いて、新規レコード、既存レコードそれぞれの処理を行う。

サンプルテーブルの作成

サンプルテーブルは、下記のように想定します。

ID 社員番号 社員名
1 0001 近藤 和夫
2 0002 町田 洋子
3 0003 国定 公示
  • IDフィールドはオートナンバー型、これ以外はテキスト型です。

サンプルフォームの作成

  1. サンプルフォームは、データシート形式のフォームを作成します。
  2. こちらは、Access付随の「フォームの新規作成ウィザード」を用いれば、簡単に作成できます。
  3. 下記の図は、データシート(frm_sample)フォームです。

プロシージャの作成

各種イベントにプロシージャを作成します。

Private Sub Form_Open(Cancel As Integer)

    'フォームを開くと同時に、
    'txtIDテキストボックスにフォーカスを移動します。
    Me.txtID.SetFocus
    Me.txt社員番号.Locked = True
    
End Sub
解説
  • txtIDテキストボックスに、最初のフォーカスが来るようにしています。
 
Private Sub txt社員番号_Enter()

    '新規レコードであれば、
    If Me.NewRecord = True Then
        Me.txt社員番号.Locked = False
    Else
        Me.txt社員番号.Locked = True
    End If
    
End Sub
解説
  • txt社員番号テキストボックスがフォーカスを取得したとき、新規レコードであるか、否かの区分でtxt社員番号テキストボックスのLockedプロパティの切り替えます。
 
Private Sub ID_Exit(Cancel As Integer)

    Call txt社員番号_Enter

End Sub
解説
  • txtIDテキストボックスがフォーカスを喪失したとき、新規レコードであるか、否かの区分でtxt社員番号テキストボックスのLockedプロパティの切り替えます。
  • Call関数で、txt社員番号_Enter プロシージャを呼び出しています。

動作確認

  1. フォームをデータシート形式のプレビューモードで開きます。
  2. 既存データのtxt社員番号テキストボックスのデータを変更します。
  3. LockedプロパティがFalseのため、変更できません。
  4. 既存のtxt社員名テキストボックスのデータを変更します。
  5. 問題なく、データ変更ができます。
  6. 次に、新規レコードに移行します。
  7. 問題なく、txt社員番号テキストボックスにも、下記のようにデータ入力ができるようになっています。

2004/03/15

ページの先頭へ 前ページへ戻る


Q&A-025 特定の列のみ変更不可にする一例


 

-Microsoft Access Club-