![]() |
Datenbank: FB • Version: 2.0 • Zugriff über: IBX
Datenbankverbindung bei Programmstart
Hallo alle,
ich möchte die Datenbankverbindung beim Programmstart (je nach aktuellem Programmordner) festlegen und öffnen. Gibt es eine elegante Möglichkeit, die Datenbankverbindung beim Programmstart IMMER auszustellen - für den Fall dass man vergisst, diese vor dem compilieren zu schließen? Sonst würde ja beim Programmstart immer versucht werden, eine evtl. nicht vorhandene Datenbank zu öffnen. Stahli |
Re: Datenbankverbindung bei Programmstart
Erstelle ein Datenmodul und implemnetiere das Setzen der Pfade und das Öffnen in dessen DataModulCreate-Event-Methode
|
Re: Datenbankverbindung bei Programmstart
Ja, aber dann muss ich die bestehende Verbindung in der IDE vor der Kompilierung ja unbedingt ausschalten.
Sonst würde bei Auslieferung des Projektes beim Nutzer ja ein Fehler auftreten bevor die Create-Methode des DataModuls abgearbeitet wird wenn die Datenbank nicht im selben Ordner wie bei meiner Entwicklungsumgebung vorliegt. Lässt sich aber vermutlich nicht vermeiden, oder? Stahli |
Re: Datenbankverbindung bei Programmstart
Hallo,
das Datenmodul ist ein schönes Hilfsmittel zur Code-Organisation. Der korrekte Verbindungsaufbau lässt sich über das Ereignis OnBeforeConnect() der Komponente TIBDatabase steuern. Freundliche Grüße |
Re: Datenbankverbindung bei Programmstart
Danke, das hätte ich natürlich auch selbst finden können :oops:
Man muss zwar für eine Ersatzverbindung sorgen und kann das Öffnen nicht direkt abbrechen, das reicht mir aber so auch aus. Stahli |
Re: Datenbankverbindung bei Programmstart
Hallo,
du kannst den Verbindungsaufbau über eine silent exception (Abort) abbrechen, er kann aber auch einfach scheitern. Beides kannst du in einem exception handler abfangen. Auf eine Default-Verbindung kannst du verzichten, wenn dein Programm dem Benutzer den Aufbau zu einer beliebigen Datenbank über den Öffnen-Befehl im Datei-Menü erlaubt. Wenn der Benutzer mit verschiedenen Datenbanken arbeitet, dann ist eine MRU-Liste im Datei-Menü ein gern gesehenes Komfortmerkmal. Freundliche Grüße |
Re: Datenbankverbindung bei Programmstart
Zitat:
Delphi-Quellcode:
Genauso gut könnte man einen FileDialog nehmen oder sogar den unvermeidlichen DAU den DB-Namen von Hand eingeben lassen. :stupid: Ist aber zu riskant, deshalb mit INI. :mrgreen:
procedure TDM.DataModuleCreate(Sender: TObject);
var Ini : TIniFile; begin Ini := TIniFile.Create (ExtractFilePath (ParamStr (0)) + 'DB.INI'); if not CDStart then DatenBankName := Ini.ReadString('Datenbank','Name',ExtractFilePath (ParamStr (0))+'db\db.fdb') else // falls INI nicht vorh. usw. ^^ DatenBankName := ExtractFilePath (ParamStr (0)+'db\db.fdb'); DataBase.Close; // <--- Einstellungen im OI ab hier völlig egal. DataBase.DatabaseName := DatenBankName; DataBase.Open; ReadTransaction.Active := true; Ini.free; end; |
Re: Datenbankverbindung bei Programmstart
Zitat:
Marabu's Lösung ist der einzige Weg. Im BeforeConnect Event kann mittels abort eine Verbindung unterbunden werden. Problem ist erstmal, dass somit natürlich jede Verbindung unterbunden wird, auch die nachher im Programm manuell zu öffnende. Es lässt sich aber leicht im BeforeConnect über ein Tag entscheiden, ob die Verbindung abgebrochen werden soll oder nicht. z.B. einfach so:
Delphi-Quellcode:
procedure TForm1.ADOConnection1BeforeConnect(Sender: TObject);
begin if tag=0 then abort; end; procedure TForm1.FormCreate(Sender: TObject); begin self.Tag := 1 ; end; procedure TForm1.Button1Click(Sender: TObject); begin self.ADOConnection1.Connected := true ; self.ADOQuery1.open; end; |
Re: Datenbankverbindung bei Programmstart
Zitat:
Zitat:
Will ich nun verschiedene DBs testen, dann wird der Name in der INI geändert (zu diesem Zweck von mir mit Editor). Wieso soll das nicht gehen, bzw. warum noch überflüssiges einbauen ? :shock: Sofern das FB-Umfeld stimmt, ändere ich z.B. in der INI "C:\DB\DB.FDB" auf "F:\DB\DB.FDB" und schon wird die DB auf externem Netzwerk-Server benutzt und nicht die lokale. So was kommt oft vor und geht bisher immer. Warum soll das so nicht gehen ??? :shock: Edit : das "völlig egal" im Source-Kommentar bezieht sich auf den DB-Namen !! Nicht auf User, passwort usw. !! |
Re: Datenbankverbindung bei Programmstart
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz