Hast du schon einmal mit
UDL-Dateien gearbeitet?
In einer UDL-Datei wird der gesamte ConnectionString gespeichert und kann vom Benutzer leicht (per Doppelklick!) geändert werden.
Dein Programm braucht sich darum überhaupt nicht zu kümmern.
Im Anhang ist eine UDL-Datei zum Testen.
Hier ein Beispiel wie du die Connection herstellen kannst:
Delphi-Quellcode:
if ADOConnection1.Connected then
// Prüfung, ob ADOConnection schon aktiv ist
ShowMessage('Warnung: ADOConnection ist schon aktiv !');
// ConnectionString aus UDL-Datei zuweisen
// UDL-Datei heisst genau gleich wie deine EXE; hat aber nur die Endung .udl
ADOConnectionSetupUDL(ADOConnection1, '');
ADOConnection1.Connected := True;
Und hier noch die Hilfsfunktionen:
Delphi-Quellcode:
uses ...,ADODB;
resourcestring
SUDLMissing = '
UDL-Datei "%s" nicht vorhanden !';
// liefert Dateiname inkl. Pfad der Anwendung oder der DLL
function GetModuleName:
string;
var
hi : HINST;
begin
SetLength(Result, MAX_PATH);
if IsLibrary
then
hi := HInstance
else
hi := 0;
SetLength(Result, GetModuleFileName(hi, PChar(Result), length(Result)));
end;
procedure ADOConnectionSetupUDL(cn: TADOConnection;
const UdlFile:
string);
var
FileName:
string;
begin
cn.Connected := False;
FileName := UdlFile;
if FileName='
'
then
FileName := ChangeFileExt(GetModuleName, '
.udl')
else if ExtractFilePath(FileName) = '
'
then
// Wenn kein Pfad übergeben wurde => Pfad der Exe eintragen
FileName := ExtractFilePath(GetModuleName) + FileName;
if not FileExists(FileName)
then
raise EADOError.CreateFmt('
ADOConnectionSetupUDL(%s,%s) '#13#10+
SUDLMissing, [cn.
Name,UdlFile, filename]);
cn.ConnectionString := '
FILE NAME=' + FileName;
end;