Both DB-aware and non-DB-aware components have advantages and disadvantages, depending on what kind of application you are developing.
For small-to-middle scale applications, using DB-aware components is encouraged, unless there are specific requirements or conditions under which those applications are operating. For example, a simple data entry application would be easier to develop and maintain with DB-aware components. Even middle-to-large scale applications, if properly designed and implemented, will have good performance with DB-aware components.
However, when developing modular applications, especially multi-tier systems, DB-aware components can have negative impact on application performance and maintainability. This is particularly noticeable with applications that access data over the Internet. Main reason for this is because DB-aware components require a constant connection to the database, which can significantly increase network traffic.
Using non-DB-aware components can be more complex since it requires better understanding of the underlying mechanisms, but in multi-user and distributed multi-tier environments it scales far better than anything else. Additionally, you can (and should) separate the data-access layer from the presentation (UI) layer, which will later allow you to make changes to one subsystem (module, layer) without having to to change anything else.
Today, data can be anywhere and most of the times it is not stored on local computers or networks. Using DB-aware components to access that data can have significant negative impact on application and database performance. There are some data-access layers which improve this (UniDAC, AnyDac, ...), so using DB-aware components with them may get you better performance. Still, non-DB-aware components can outperform anything.
It is up to the developer to decide which mechanism to use, because, as I said, it all depends on what kind of application you are making and in what environment will it work.