En la conexion debes dejar la propiedad connected en false
luego en la aplicación lees de un ini o como sea la ubicación real de la BD sino cuando arranca busca la BD de tu disco local y no la encuentra, entonces te surgen errores.
Te copio a continuación una rutina que la invoco en el evento create de un datamodule, si no usas uno, al crear el form. Pero no te olvides de la propiedad Connected = false en el inspector de objetos y agregar IniFiles a las uses. Cambia el nombre de la DB de tu aplicación y password en caso que la utilices.
Código:
procedure TData.OpenConx();
Var
sDBName:String;
sServer:String;
fIni:TIniFile;
sFile:String;
sAppFolder:String;
i:Integer;
begin
Conx.Close;
sAppFolder := ExtractFilePath( Application.ExeName );
ChDir( sAppFolder );
sFile := sAppFolder + 'Config.ini';
fIni := TIniFile.Create( sFile );
while true do
begin
if Not FileExists( sFile ) then
begin
fIni.WriteString( 'DATABASE', 'Root', sAppFolder + 'Data\TSPoS.mdb' );
end;
sDataPath := fIni.ReadString( 'DATABASE', 'Root', sAppFolder + 'Data\TSPoS.mdb' );
fIni.Free;
// Cierro INI
sConx := 'Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Jet OLEDB:Database Password=' + sPassword + ';Data Source=' + sDataPath;
if Conx.Connected then Conx.Close;
Conx.ConnectionString := sConx;
Conx.Open;
Conx.Connected := True;
for i := 0 To Data.Conx.DataSetCount-1 do
begin
// ShowMessage( Conx.DataSets[i].Name ); // Por si tira error se cual es el que jode
if Pos( 'TMP', UpperCase( Conx.DataSets[i].Name ) ) = 0 then // Si no es un tmp que lo abra, sino no, ya q las tmp las genero en ejecucion
begin
Conx.DataSets[i].Active := true;
end;
end;
exit;
end;
end;
Saludos y espero soluciones tu problema.