AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BDE/Database Name

Offene Frage von "Sanguis"
Ein Thema von Sanguis · begonnen am 20. Nov 2005 · letzter Beitrag vom 25. Nov 2005
Antwort Antwort
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#1

BDE/Database Name

  Alt 20. Nov 2005, 04:37
Datenbank: Paradox • Version: 7 • Zugriff über: BDE
Hi,
ich stehe momentan vor einem "Problem" bei dem ich wohl einfach nur den Wald vor lauter Bäumen nicht sehe.

Die Grundsituation sieht folgendermaßen aus:
Ich grefe per BDE auf Paradox Tabellen zu. In dem Programm gibt es um die 20 Formulare in denen jeweils mindestens 3 Query Komponenten sind, meist mehr. Ich muss ja in jeder Query Komponente den Pfad zur Datenbank angeben, unter Database Name. Das ist ansich auch kein Problem.
Nur gibt es jetzt neuerungen im Programm die es notwendig machen das sich der Pfad zur Datenbank ändern kann. Also nicht während der Ausführung sondern vorher. Wo der Pfad dann genau liegt, möchte ich über eine INI Datei einlesen.

Bis hierhin auch kein Problem.
Nur ist jetzt halt die Frage wie das "einfach" zu lösen ist. Muss ich jetzt beim Programmstart extra von Hand aus JEDE query Komponente einzeln ansprechen und den Wert ändern oder gibt es da eine einfachere möglichkeit durch irgend eine globale Weise den Wert für DatabaseName in allen Query Komponenten des Programms zu ändern?

Wenn ja, wäre es halt praktisch das ich mich dann nicht selbst darum kümmern müsste und so womglich auf manchen Formularen querys "vergesse". Flüchtigkeitsfehler können ja mal passieren.

Wie kann ich das am einfachsten und effektivsten lösen?
Vielen Dank schon im Vorraus.

Andy
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#2

Re: BDE/Database Name

  Alt 20. Nov 2005, 09:01
Moin Sanguis,

dann nimm zusätzlich eine TDatabase-Komponente und verwende einen BDE-Alias (BDE-Admin in der Systemsteuerung). Im Alias-Eintrag legst Du den Pfad fest. Die Query verwenden als DatabaseName denjenigen, den Du in TDatabase eingetragen hast. Nun bist Du völlig flexibel. Im Alias kannst Du den Pfad zur Datenbank ändern, falls diese mal verschoben wird. Und mit Hilfe der Tdatabase kannst Du sogar wahlweise auf verschiedene Datenbanken zugreifen (Test-, Produktions-DB), wenn für jede ein eigener Alias eingerichtet wurde. IMHO sollte es auch gehen, bei TDatabase unter der Eigenschaft AliasName den Pfad zu den Paradox-Tabellen einzutragen.
  Mit Zitat antworten Zitat
marabu

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

Re: BDE/Database Name

  Alt 20. Nov 2005, 09:33
Hallo Andy,

wie Rainer schon geschrieben hat, brauchst du eine TDatabase-Komponente. Um wirklich flexibel zu sein empfehle ich dir mit einer Kombination aus festem und temporärem Alias zu arbeiten. Angenommen dein Projekt heißt TEST, dann richtest du mit dem BDE Admin-Tool einen festen Alias TEST auf deiner Entwicklungsmaschine ein, damit deine Table- und Query-Komponenten mit dem Eintrag DatabaseName = TEST auch etwas anzeigen können, wenn du am Projekt arbeitest. In meinen BDE Projekten hatte ich immer eine Unit GLOBAL, in deren Initialisierungsteil ich etwa folgenden Code hatte:

Delphi-Quellcode:
const
  CALIAS = 'TEST';
  CDRIVER = 'STANDARD';

var
  WorkDir: string;
  dbWork: TDatabase;

initialization
  GetDir(0, WorkDir);
  WorkDir := IncludeTrailingPathDelimiter(WorkDir);

  Session.PrivateDir := TempDir;
  dbWork := TDatabase.Create(nil);
  dbWork.DatabaseName := CALIAS;
  dbWork.DriverName := CDRIVER;
  dbWork.Params.Add(Format('PATH=%s', [WorkDir]));
  dbWork.Connected := true;
finalization
  dbWork.Free;
end;
Das Datenbankverzeichnis wird dann in der Start-Verknüpfung deiner Anwendung als Arbeitsverzeichnis konfiguriert. Auf diese Weise muss auf der Zielmaschine der Alias nicht installiert werden - der Alias TEST ist dort ein temprärer. TempDir sollte auf ein Unterverzeichnis im Userprofil zeigen, falls sich auf der Zielmaschine mehrere Benutzer einloggen können.

Grüße vom marabu
  Mit Zitat antworten Zitat
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#4

Re: BDE/Database Name

  Alt 21. Nov 2005, 23:46
äh.. ehrlichgesagt verstehe ich das nicht so wirklich.
Wenn ich das ganze erst im BDE Manager einbinden muss, dann müsste der Enduser das ja auch tun. Und das wäre nicht "elegant". Lässt sich das nicht auch irgendwie leichter lösen?

Gibt es in Delphi keine Routine die "mal eben" alle query Komponenten im Projekt suchen und ändern kann? Das würde mir ja schon reichen, auch wenn es vielleicht nicht die sauberste Lösung wäre.
  Mit Zitat antworten Zitat
marabu

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

Re: BDE/Database Name

  Alt 22. Nov 2005, 08:15
Zitat von Sanguis:
Und das wäre nicht "elegant".
Zitat von Sanguis:
Gibt es in Delphi keine Routine die "mal eben" alle query Komponenten im Projekt suchen und ändern kann?
Das ist widersprüchlich - meinst du nicht auch?

Die von mir (offensichtlich nicht gut genug) beschriebene Lösung IST elegant. Sie basiert auf der Vergabe eines temporären Alias für alle Query- und Table-Komponenten. Die Indirektion "Alias - Datenbankverzeichnis" wird erst zur Laufzeit aufgelöst. Nur für den Live-Modus der datensensitiven Komponenten (DBGrid) wird ein fester Alias auf der Entwicklungsmaschine benötigt. Das ist allerdings nicht zwingend und hängt vom Anwendungs-Design ab.

Die angehängte Demo-Anwendung soll dir zeigen, wie du vorgehen musst. Sie erwartet einen Alias SANGUIS auf deiner Entwicklungsmaschine. Wenn er existiert, kannst du das Projekt in der IDE ohne Fehler öffnen und siehst sofort die Country-Tabelle aus der Borland DBDEMO. Oder du kompilierst auf der Kommandozeile. Starten solltest du die kompilierte Anwendung dann über eine Verknüpfung, in der du das Arbeitsverzeichnis auf die DBDEMO-Daten einstellst.

Wenn das dich nicht überzeugen kann, dann wirst du tatsächlich über deine Forms iterieren und das Datenbankverzeichnis in alle TDataset-Komponenten fest eintragen müssen.

Freundliche Grüße vom marabu
Angehängte Dateien
Dateityp: zip sanguis_166.zip (2,7 KB, 25x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#6

Re: BDE/Database Name

  Alt 22. Nov 2005, 08:24
Zitat von Sanguis:
äh.. ehrlichgesagt verstehe ich das nicht so wirklich.
Wenn ich das ganze erst im BDE Manager einbinden muss, dann müsste der Enduser das ja auch tun. Und das wäre nicht "elegant". Lässt sich das nicht auch irgendwie leichter lösen?
Dafür gibt's ja ein Installationsprogramm, das den Alias gleich mit einrichtet. Und der BDE-Admin wird IMHO bei der Installation auf den Rechner kopiert und ist dann in der Systemsteuerung zu sehen.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#7

Re: BDE/Database Name

  Alt 22. Nov 2005, 08:51
Zitat:
Wenn ich das ganze erst im BDE Manager einbinden muss, dann müsste der Enduser das ja auch tun. Und das wäre
nicht "elegant". Lässt sich das nicht auch irgendwie leichter lösen?

Moin zusammen,

Also mit dem temporären Alias, dass ist ein Weg. es gibt zudem noch einen anderen:

1.:
a. Nimm die TDatabase-Komponente
b. Verbinde die Queries mit der TDatabse-Komponente
c. Verbinde Datsaource mit Queries und DB-Komponenten mit Datasource (bekannt)

2.:
a. Erstelle ein OnCreate-Ereignis im Mainform
b. Trage in die TDatabase den Pfad zur Datenbank im OnCreate ein:
 Database1.Database := ExtractFilePath(ExeName+'\Database') c. Schalte die Queries auf enabled

Auf diesem Weg erhälst Du eine Applikation, wo die Datenbank in einem relativen Pfad zur Anwendung, im Unterverezichnis liegt und diese ist natürich auch beim Anwender in sein Wahlverzeichnis zu installieren. Nur die BDE muß halt installiert sein.

Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#8

Re: BDE/Database Name

  Alt 25. Nov 2005, 02:58
hm.. ich glaube das ist die Lösung die ich gesucht habe.
Nur.. steh ich schon wieder ein wenig auf dem Schlauch. Die TDatabase Komponente hab ich eingefügt. Aber wo genau kann ich sie mit den Querys verbinden? bzw. umgekehrt.

Im Objektinspektor kann ich die Komponente in keinem Feld auswählen um sie zu verknüpfen.
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#9

Re: BDE/Database Name

  Alt 25. Nov 2005, 08:18
Du musst in der TDatabase-Komponente im Property Databasename einen Namen eintragen. Danach kannst du bei den Queries/Tables dort diesen Name auch im Property Database aus der Liste auswählen und schon sind die zwei miteinander verbunden.
  Mit Zitat antworten Zitat
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#10

Re: BDE/Database Name

  Alt 25. Nov 2005, 22:45
Naja da fängt das Problem ja an.
Ich habe bisher den Pfad zur Datenbank in der Query unter "DatabaseName" eingegeben.
Wenn ich das bei der TDatabase Komponente jetzt genauso machen will, bekomme ich die Fehlermeldung "Doppelter Datenbankname" mit dem eingegebenem Pfad dahinter.

Weiterhin habe ich bei den Querys aber auch kein "Database" Property, sondern eben nur DatabaseName.

Ich steh ein wenig auf dem Logik Schlauch...
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:03 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