If you are programming for n dates, then you need to use a subtable. You are basically using a transaction table to capture dates that updates were made, is that correct?
You can still create an initial date field in the main record by creating a date field, then setting its default value to Date() or Now() so that each time a record is created, it saves the date and time.
Do you want to create subsequent dates programatically, or through some user interaction?
As to the reporting issue, it depends on how you are storing the dates. What you might consider (and I use this) is to create a field in your date records called "IsCurrent" or similar, and make it a checkbox. Then whenever there is an update (using a form, of course,) you take the PK of the current record, and the FK to the main table, and whereever the FK of the main table and not the PK of the current record, set IsCurrent to False. Then when you run your reports, just use "True" criteria on the IsCurrent field. It's as easy as that! :D
Lemme know if you need more help.