from what you said the relationship can't work correctly because that calculation must be unstored.
So the simplest way to solve the problem is an opener script ( a script that fires when daily you open the DB ) that makes that calculation and puts the result into a normal number field.
This is something that could be done with the webviewer (data-viewer area) set to display the desired message (encoded as html) only IF the calculation is true:
If ( Month ( DOB ) = Month (Get ( CurrentDate )) and Day ( DOB ) = Day (Get ( CurrentDate )). -- The calculation gets built into the data-viewer criteria.
This requires only that the birthday field to be evaluated is available as a local- or related-field on the layout where you place the webviewer.
Webviewer content refreshes itself and requires no calculation field in any table to complete its test of an available field.