you can create 3 dropdowns in your view and then join their values to one string in your controller. Then use CDateTimeParser to convert date string to UNIX timestamp. When retrieving date from db use CDateFormatter to convert timestamp to date string again.
As an alternative you can store date in date type in your db. Its useful if you have to do some complex comparisons or manipulate fields values (add 3 days, subtract 1 month, find last day of month, and so on). Keep in mind that date field require a specific format. For MySql check this.
It’s hard to say exactly why your update fail without seeing the source code, but I assume it’s a problem with binding db’s date field to your model attributes. I would start with creating three attributes in model. Lets say dDate, mDate and yDate. This attributes should be added to safeAttributes array and to the rules array and used in view to generate dropdowns instead of ‘original’ attribute which is your date field in db (let’s say oDate). Now events could be useful. I would use 2, onBeforeSave and onAfterFind. In first event callback dDate, mDate and yDate should be converted to timestamp or date string and assigned to oDate. In onAfterFind event callback oDate value should be split and values assigned to dDate, mDate and yDate. Neither rules nor safeAttributes array should contain any references to oDate. Validate and work only with your 3 custom attributes. That’s my opinion on how I would do that.
As an alternative you can use CMaskedTextField see demo here, or datePicker.