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コメント:
コメントを投稿