Here is a function for exactly this:
Public Function DateNextBirthday( _
ByVal BirthDate As Date, _
Optional ByVal SomeDate As Variant) _
As Date
Const MaxDateValue As Date = #12/31/9999#
Dim NextBirthDate As Date
Dim Years As Integer
If Not IsDate(SomeDate) Then
SomeDate = Date
End If
NextBirthDate = BirthDate
If DateDiff("yyyy", BirthDate, MaxDateValue) = 0 Then
Else
Years = DateDiff("yyyy", BirthDate, SomeDate)
If Years < 0 Then
Else
NextBirthDate = DateAdd("yyyy", Years, BirthDate)
If DateDiff("d", SomeDate, NextBirthDate) <= 0 Then
If DateDiff("yyyy", NextBirthDate, MaxDateValue) = 0 Then
Else
NextBirthDate = DateAdd("yyyy", Years + 1, BirthDate)
End If
End If
End If
End If
DateNextBirthday = NextBirthDate
End Function
So, to run a query in Access, you would do something like this:
Select
Id,
FirstName,
LastName,
DateNextBirthday([DOB]) As NextBirthday
From
tblYourPersonTable
Order By
DateNextBirthday([DOB])
Please note that this will return the correct birthday also for leaplings (those born on February 29th) for any year.