Access では、テーブルにおけるフィールドの型として、オートナンバー型がある。これを主キーの id フィールドでよく利用する。このオートナンバー型の挙動を見ると、同じテーブルの、別の列に対して連結しているフォームのフィールドに値が入力された後に生成され、オートナンバー型に対して連結しているフォームのフィールドに表示されるようである。
フォームが表示されたときに、 主キーとなる id フィールドに数値が既に入っていて欲しいときがある。サブフォームがあり、フォームとサブフォームを結ぶフィールドが id に依存している場合だ。このとき、親となるフォームのいずれかのフィールドに値を入力しないと、オートナンバーは生成されない。よって、フォームが表示されたときにすぐサブフォームの入力に移ることができない。
こういうときは、自分で DMax 関数を利用して、 id フィールドの値を生成すると楽。
フォームの「レコード移動時」のイベントを利用して...
Private Sub Form_Current() If Me.NewRecord Then Me.id = DMax("フィールド名", "テーブル名") + 1 End If End Sub
追記(2008.3.6): レコードが一件も存在しない場合の処理を追加した。また、親フォームに主キーのフィールドしかなく、子フォームの値を最初に入力することができるようにするために、主キーとなる値を生成したら、レコードを保存するようにした。
Private Sub Form_Current() Dim strTbl, strId As String strTbl = "テーブル名" strId = "フィールド名" ' 新規レコードであることを確認する If Me.NewRecord Then If IsNull(DMax(strId, strTbl)) Then Me.id = 0 Else Me.id = DMax(strId, strTbl) + 1 End If End If ' レコードを保存する DoCmd.RunCommand acCmdSaveRecord End Sub
0コメント:
コメントを投稿