4 things come to mind: bad hard drive, bad ram, bad cable, bad controller.
Let's get the first possibility out of the way. Have you ever heard of a program
HDD Regenerator? It's a DOS based program that can detect and repair most disk errors, recover data from bad sectors, and can pretty much bring any unbootable hard drive back to life... even if it is just long enough to get the data off of it. At the very least it will tell you if there are any errors on the drive.
Of note: even though the program might come back with errors doesn't necessarily mean they are physical. They could be partition based (such as a bad master boot record/boot sector, or bad parition). As such sometimes deleting all the partitions, and redoing them can fix the problem. The thing to note is that this can be an indication of other issues in the system, such as bad memory, cables (power or data), power supply, or controller.
I'm not too sure how functional the free version is though. I first started using it as part of Hiren's BootCD, and later bought it. You might want to get Hiren's BootCD in any case (you can get ver. 9.3 from
HERE). Along with that tool there are all sorts of testing tools, including 3 different memory ones.