Paypal will let you collect numbers and charge later.
now to your question:
you can accept credit card numbers all day in a database, the problem comes when you have to submit those numbers for processing. without a processing company (like paypal), you'll have to negotiate a direct processing agreement with each credit card company separately. this is not cheap - that's why processing companies exist; they can spread the connection fee out to all of their customers.
PLUS, and this is very important, when you store credit card numbers you have to meet minimum security requirements to do so legally. As I understand it, those requirements are 128-bit (256 recommended) encryption (not hashing) and a hardware firewall on the web server.
recommend using a processing company.