Pues una buena manera de entender las cosas, especialmente si tienes el codigo fuente, es copiar & pegar y empezar a compilar y a depurar paso a paso, o seguir el tutorial al dedillo. De esa manera, con el tiempo, empezaras a comprender el metodo general.
Supongamos que tenemos 2 tablas, Clientes & Productos. Hago 1 clase que se encarge de todo lo que es conexion a BD, y luego heredo de ella asi:
Código Delphi
[-]
type
TConexionBD = class(TObject)
private
function ExeSql(Sql:String):TDataSet;
public
function RetornarSql:String;abstract;
function RetornarWhere(ABuscar:String):String;abstract;
function RetornarOrder:String;abstract;
function Buscar(ABuscar:String):TDataSet;
end;
TClientes = class(TConexionBD)
/.... En la implementacion ../
function TClientes.RetonarSql:String
begin
Result := 'SELECT Codigo,Nombre FROM Cliente';
end;
function TClientes.RetonarWhere(ABuscar:String):String
begin
Result := 'Codigo Like "%' + ABuscar +'" OR Nombre Like "%' + ABuscar +'"';
end;
/* etc... */
Asi que la idea es que se crea una interface generica de acceso a los datos y en cada clase/forma (dependiendo como lo hagas) se implementa los detalles especificos, ya que como sabars, los campos de una tabla varian con respecto a las otras. Asi, es muy facil hacer ajustes especificos y terminan siendo sencillos.
Luego, el formulario de busqueda solo hace algo como:
Código Delphi
[-]
ClaseABuscar : = RetonarClase...
dsResultados.datasource := ClaseABuscar.Buscar("jorge");