Buenas!
La idea es la siguiente:
Creas un DataModule y le colocas un TADOConnection (que llamaremos conexion) y un TOpenDialog.
El código de esta unidad es el siguiente:
Código Delphi
[-]
unit UDataModule;
interface
uses
SysUtils, Classes, DB, ADODB, Dialogs, Registry, Windows, Forms;
const
bbdd1 = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
bbdd2 = ';Persist Security Info=False;Jet OLEDBatabase Password=pepito';
type
TDataMod = class(TDataModule)
Conexion: TADOConnection;
OpenDialog1: TOpenDialog;
procedure DataModuleCreate(Sender: TObject);
private
fBBDD : String;
public
property BBDD : String read fBBDD write fBBDD;
end;
var
DataMod: TDataMod;
implementation
{$R *.dfm}
procedure TDataMod.DataModuleCreate(Sender: TObject);
var Reg : TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('SOFTWARE\EduP\pedidos', false) then
Begin
fBBDD := Reg.ReadString('BBDD');
End
else
Begin
if (Reg.OpenKey('\SOFTWARE\EduP\pedidos', true)) and
(OpenDialog1.Execute) then
Begin
fBBDD := OpenDialog1.FileName;
Reg.WriteString('BBDD', fBBDD);
End
else
Begin
Showmessage('Error en la instalación de la aplicación');
Application.Terminate;
End;
End;
if Conexion.Connected then
Conexion.close;
try
Conexion.ConnectionString := bbdd1 + fbbdd + bbdd2;
Conexion.Open;
except
if (Reg.OpenKey('\SOFTWARE\EduP\pedidos', true)) and
(OpenDialog1.Execute) then
Begin
fBBDD := OpenDialog1.FileName;
Reg.WriteString('BBDD', fBBDD);
Conexion.ConnectionString := bbdd1 + fbbdd + bbdd2;
conexion.Open;
End
else
Begin
Showmessage('Error en la instalación de la aplicación');
Application.Terminate;
End;
end;
finally
reg.Free;
end;
end;
end.
En la creación del DataModule el programa va a buscar en el registro de Windows la rama HKEY_LOCAL_MACHINE\software\EduP\Pedidos y recoge un valor de cadena que se llama BBDD. En este valor se almacena la ruta y el nombre de la base de datos.
Si la clave no existe se lanza el opendialog para que se seleccione la base de datos y guarda el valor.
Una vez tiene el valor concatena los textos para la connectionString y abre la conexión a la base de datos.
A partir de ahí cualquier TADOTable o TADOQuery necesita acceder al TADOConnection del DataModule y listo.
Espero que te sirva
Edu