completamente de acuerdo con oscarac, la idea es que siempre que escribas una línea de código pienses como afecta tu arquitectura "multi-base de datos"
Por tanto lo mejor (o por lo menos lo que yo recomiendo) es que separes todo el codigo SQL en una capa de acceso a datos...
cuando hablamos de "separar en otra capa" no necesariamente significa utilizar tecnologias "avanzadas" como datasnap o corba... sencillamente hablamos de ordenar tu codigo de tal manera que no dejes regado por ahi todo tu SQL, sino mas bien encapsularlo en uno o mas datamodule's para que sea mantenible.
--- Agregado ---
Se me olvidaba, si puedes utilizar dbExpress como dices, cambiando los parametros iniciales de conexión en tiempo de ejecución, debes tener enc uenta que las opciones de dbExpress son limitadas... puedes tambien hacer este trabajao con ZEOS, ADO, o cualquier otro, inclusive a través de ODBC... que se yo... pero como ya se trató en otro foro, yo recomiendo dbExpress por que es nativo, y es a loq ue le está apostando embarcadero hacia el futuro...
para las consultas, un breve ejemplo:
Código:
Unit1:
-----------
TFactura = class(TObject)
Public
Function Grabar: Boolean;
end;
Function TFactura.Grabar: Boolean;
begin
// Validaciones ...
Datamodule1.GrabarFactura(Self);
end;
Datamodule1:
-----------
Procedure TDatamodule1.GrabarFactura(LaFactura: TFactura);
Begin
if (strTipoBase = 'SYBASE') then
strSQL := 'Insert into....';
if (strTipoBase = 'SQL-SERVER', 'ORCALE') then
strSQL := 'Insert into....';
SqlQuery.SQl.text := strSQL;
SqlQuery.ExecSQL;
End;