AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbankverbindung bei Programmstart
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbankverbindung bei Programmstart

Ein Thema von stahli · begonnen am 11. Feb 2007 · letzter Beitrag vom 14. Feb 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#1

Datenbankverbindung bei Programmstart

  Alt 11. Feb 2007, 17:14
Datenbank: FB • Version: 2.0 • Zugriff über: IBX
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Datenbankverbindung bei Programmstart

  Alt 11. Feb 2007, 17:19
Erstelle ein Datenmodul und implemnetiere das Setzen der Pfade und das Öffnen in dessen DataModulCreate-Event-Methode
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Datenbankverbindung bei Programmstart

  Alt 11. Feb 2007, 17:32
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Datenbankverbindung bei Programmstart

  Alt 11. Feb 2007, 17:34
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
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Datenbankverbindung bei Programmstart

  Alt 11. Feb 2007, 18:37
Danke, das hätte ich natürlich auch selbst finden können
Man muss zwar für eine Ersatzverbindung sorgen und kann das Öffnen nicht direkt abbrechen, das reicht mir aber so auch aus.

Stahli
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Datenbankverbindung bei Programmstart

  Alt 11. Feb 2007, 19:26
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Datenbankverbindung bei Programmstart

  Alt 11. Feb 2007, 21:12
Zitat von stahli:
Ja, aber dann muss ich die bestehende Verbindung in der IDE vor der Kompilierung ja unbedingt ausschalten....Lässt sich aber vermutlich nicht vermeiden, oder?
Wieso denn das ? Bzw. wozu ? Du legst den DB-Namen bzw. Laufwerk, Pfad etc. beim Programmstart fest und fertig. Das DataModule muss dazu nur früh genug erzeugt und bestückt werden. Hier ein Bsp. mit INI :

Delphi-Quellcode:
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;
Genauso gut könnte man einen FileDialog nehmen oder sogar den unvermeidlichen DAU den DB-Namen von Hand eingeben lassen. Ist aber zu riskant, deshalb mit INI.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Datenbankverbindung bei Programmstart

  Alt 11. Feb 2007, 21:30
Zitat von Hansa:
Wieso denn das ? Bzw. wozu ? Du legst den DB-Namen bzw. Laufwerk, Pfad etc. beim Programmstart fest und fertig. Das DataModule muss dazu nur früh genug erzeugt und bestückt werden.
Sein Problem ist, wenn er ein projekt kompiliert, bei dem die Connection bereits im OI gemacht wird, so kommt es zu einer Exception, wenn die Anwendung auf einem Fremdrechner gestartet wird. Ich kenne das Problem. Ich nutze lokal eine Datenbank mit der ich in der IDE arbeite. Bei Programmstart soll aber eine Datenbank geöffnet werden, die, wie du beschrieben hast, von mir aus in einer ini-Datei definiert ist. Wegen der connected=true Eigenschaft im OI wird aber zuvor versucht, mit der in der IDE definierten Datenbank eine Verbindung aufzustellen. Und das führt auf einem anderen Rechner zu einer Exception.

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;
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Datenbankverbindung bei Programmstart

  Alt 11. Feb 2007, 22:02
Zitat von Jelly:
..Wegen der connected=true Eigenschaft im OI wird aber zuvor versucht, mit der in der IDE definierten Datenbank eine Verbindung aufzustellen. Und das führt auf einem anderen Rechner zu einer Exception...
Das hier übersehen ?

Zitat von Hansa:
Delphi-Quellcode:
procedure TDM.DataModuleCreate(Sender: TObject);
  DataBase.Close; // <--- Einstellungen im OI ab hier völlig egal.
In der Praxis mache ich das so : im OI wird eine DB angeben. Die geht auch in der IDE, also ohne Compilat, sofern im OI connected auf true steht. Für Testzwecke DBgrid usw. Zur Laufzeit kommt allerdings das DataModuleCreate ins Spiel. Hier wird der zu benutzende DB-Name letzendendes festgelegt und dann auch benutzt. Natürlich darf vorher keine Form da sein, die auf das noch nicht erzeugte DataModule zugreifen will.

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 ?

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 ???

Edit : das "völlig egal" im Source-Kommentar bezieht sich auf den DB-Namen !! Nicht auf User, passwort usw. !!
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Datenbankverbindung bei Programmstart

  Alt 11. Feb 2007, 22:15
Zitat von Hansa:
Das hier übersehen ?

Zitat von Hansa:
Delphi-Quellcode:
procedure TDM.DataModuleCreate(Sender: TObject);
  DataBase.Close; // <--- Einstellungen im OI ab hier völlig egal.
Nein, aber genau das funktioniert eben nicht. Weil die OnCreate Methode zu spät ausgeführt, nämlich nachdem alle Komponenten auf dem Datenmodul initialisiert wurden. Und für die Database Komponente bedeutet das in dem Fall das Herstellen der Verbindung.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz