In my ERP system, at first I used single DataModule to put all database access components, such as IBConnection, SQLQuery, and all the methods, after a while this unit becomes very fat and hard to maintain.
After that I have started to split every module/sub-module in a separate class that concentrate of specific functionality, for example separate class for Accounts, which contains inserting new account, reading accounts, modify, search by account code, and a class for cheques manipulation, and a class for clients, etc
Also I have a shared class called TDataAccess which contains shared functionalities, such as database connection, creating SQLQuery at run-time, store last error message, etc. Other classes such as TAccount, TCheque, inherits this class.
Now the system becomes easy to modify and has a reusable classes that can be used in other systems, such as Security class, that contains user login, password change, permissions, etc.
I pass connection object and transaction to each data access class while initialization/creation, so that I can use one connection for all data access classes, or I can use multiple connections, it depends on calling situation.