Klappt auch soweit. Nun die Frage wenn ich die Datenbank ausgewählt und übernehme geht das auch, geht es das sich nun das Programm den Connetionstring merkt?
Du mußt dir ja nicht den ganzen Connectionstring merken, sondern nur den Teil, der den Dateinamen der Datenbank-Datei enthält. Wenn du einen Connectionstring das erste Mal erzeugst, indem du den entsprechenden Dialog der AdoConnection bedienst, sieht der möglicherweise so aus:
Code:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MeineProgramme\MeinTestProgramm\BIN\MeineDatenbank.mdb;Persist Security Info=False;'
Nun merkst du dir in der Konstante Con1 den ersten und in Con2 den zweiten Teil:
Delphi-Quellcode:
Con1 = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
Con2 = ';Persist Security Info=False;';
Wenn der Dateiname ebenfalls immer derselbe bleibt – also der reine Dateiname ohne Pfadangaben, dann merkst du dir den auch noch:
Delphi-Quellcode:
DBDatei = 'MeineDatenbank.mdb';
IniDatei = 'C:\Temp\MeinTestProgramm.ini';
Nun erstellst du z.B. eine Textdatei MeinTestProgramm.ini, die den Pfad enthält, und speicherst sie z.B. in C:\Temp ab. Darin steht dann auf deinem Entwicklungsrechner z.B. einfach nur:
C:\MeineProgramme\MeinTestProgramm\BIN\
Beim Programmstart liest du diese Datei ein:
Delphi-Quellcode:
procedure TFormMain.FormCreate(Sender: TObject);
Var
Liste : TStringList;
Datei : String;
begin
Liste := TStringList.Create;
Try
If FileExists(IniDatei) Then
Begin
Liste.LoadFromFile(IniDatei);
If Liste.Count > 0 Then
Begin
Datei := Liste[0] + DBDatei;
If Not FileExists(Datei) Then
Begin
ShowMessage('Die Datenbank "' + Datei + '" existiert nicht. Programm wird beendet.');
Close;
End Else
Begin
AdoCon.ConnectionString := Con1 + Datei + Con2;
AdoCon.Connected := True;
End;
End Else // If Liste.Count > 0
Begin
ShowMessage('Keine Einträge in der Ini-Datei gefunden. Programm wird beendet.');
Close;
End;
End Else // If FileExists(IniDatei)
Begin
ShowMessage('Die Inidatei "' + IniDatei + '" wurde nicht gefunden. Programm wird beendet.');
Close;
End;
Finally
Liste.Free;
End;
end;
Überträgst du die Anwendung nun auf einen anderen PC, speicherst du die Datenbank irgendwo nach Belieben ab und trägst in die Ini-Datei, die du wiederum in C:\Temp platzierst, den entsprechenden Ordner ein. Willst du das Ganze noch etwas variabler gestalten, baust du noch einen Dialog ein, der dem Benutzer erlaubt, die Datenbank-Datei selber zu suchen, und speicherst das Resultat, also den gefundenen Ordner, wiederum in der Ini-Datei ab. Und selbstverständlich ist es ratsam, das Zusammenbauen des ConnectionStrings in eine Funktion auszulagern. Hab ich mir hier nur aus Bequemlichkeit gespart, ich wollte dir ja nur das Prinzip verdeutlichen.