Access 2010 データベースの 2 層の NavigationSubform に埋め込まれた連続フォームがあります。現在のナビゲーション サブフォームのソース オブジェクト プロパティを、ユーザーがクリックしたテキスト ボックスによって示される特定のレコードにキューアップする必要がある詳細フォームに変更するために、連続フォームで編集不可能なテキスト ボックスの onclick イベントを使用しています。
問題は、アクセスによってユーザーが目的の addr_id ではなくレコード ID (addr_id) に +1 されることです。これにより、ほとんどの場合、間違ったデータが生成されます。また、ユーザーが現在の最も高い addr_id をクリックすると、エラー メッセージが生成されます。そして奇妙なことに、addr_id = 1 の場合にのみ、十分なアクセス権がユーザーを正しい addr_id に送信します。
問題を引き起こしている onclick イベントのコードは次のとおりです。
Private Sub AddressID_Click()
Dim addr_id As Long
addr_id = Me.AddressID
Forms!Main!NavigationSubform.Form!NavigationSubform.SourceObject = "AddressDetails"
DoCmd.GoToRecord , , acGoTo, addr_id
End Sub
次のように問題を「修正」するために、これのハック編集をテストしました。
Private Sub AddressID_Click()
Dim addr_id As Long
Dim new_addr_id As Long
addr_id = Me.AddressID
Forms!Main!NavigationSubform.Form!NavigationSubform.SourceObject = "AddressDetails"
If addr_id = 1 Then
new_addr_id = addr_id
Else
new_addr_id = addr_id - 1
End If
DoCmd.GoToRecord , , acGoTo, new_addr_id
End Sub
しかし、明らかにより良い解決策があるはずなので、私の「修正」は完全なハックのように思えます。アクセスが行っているこの面白い再ルーティングを処理するために if-else ロジックを追加する必要がないように、このコードを修正する方法を誰か教えてもらえますか?