My only guess would be that MakeDate() returns some kind of date object rather than a string - maybe it autostringifies when you print it, but NDBM_File can't cope with it and silently fails to store it. Just a guess, I fear.
A massive flamewar beneath your chosen depth has not been shown here