Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbankalias - Pfad der DBs muss dynamisch sein. (https://www.delphipraxis.net/15784-datenbankalias-pfad-der-dbs-muss-dynamisch-sein.html)

LuckyStrike4life 4. Feb 2004 09:09


Datenbankalias - Pfad der DBs muss dynamisch sein.
 
Nun gut,

jetzt muss ich Aliasnamen für die DBs verwenden, leider hab ich das noch nie gemacht.
Das Programm ist soweit fertig, es gibt 7 DBs - alle sind immer mit der vollen Pfadangabe im Source aufgeführt, was hier schon zu Diskussionen führte ;).

Nun, ich hab keine Ahnung wie ich das machen soll - vermutlich muss ich hier und da was an der BDE umstellen. Wenn ich mein Programm auf anderen Rechnern zum laufen bringen musste, dann hat es bisher gereicht die BDE auf dem Rechner zu installieren.
Es handelt sich um dBase Datenbanken, um die Frage zu klären warum es überhaupt mit den Pfadangaben im Source funktioniert.

Das Programm wird in zwei Standorten genutzt, die DBs müssen jeweils hier und dort auf einen Server.
Nun muss das ganze so klug ablaufen, dass ich später die Angabe des Pfades auf die Standorte anpassen kann, ohne das Programm im Source zu verändern.

Help!!

Memo 4. Feb 2004 10:56

Re: Datenbankalias - Pfad der DBs muss dynamisch sein.
 
Zitat:

Zitat von LuckyStrike4life
jetzt muss ich Aliasnamen für die DBs verwenden

Warum?

Zitat:

Zitat von LuckyStrike4life
Das Programm ist soweit fertig, es gibt 7 DBs - alle sind immer mit der vollen Pfadangabe im Source aufgeführt

Das ist nicht nicht gut und sicher meinst du Tabellen.
Zitat:

Zitat von LuckyStrike4life
Wenn ich mein Programm auf anderen Rechnern zum laufen bringen musste, dann hat es bisher gereicht die BDE auf dem Rechner zu installieren.

Das würde auch weiterhin reichen, wenn du den Pfad dynamisch und nicht wie jetzt statisch zuweist. Evt. reicht dir schon ein Ini-File zum ablegen des Pfades. Einmal beim ersten Start einen Opendialog angezeigt um dem User die Möglichkeit zu geben den Pfad zu wählen, wenn dann die Tables erfolgreich geöffnet werden konnten, legst du diesen Pfad in deinem Ini-File ab und bedienst dich beim nächsten Start wieder des selben Pfades. Das funktioniert natürlich auch mit einem BDE-Alias.

Zitat:

Zitat von LuckyStrike4life
Das Programm wird in zwei Standorten genutzt, die DBs müssen jeweils hier und dort auf einen Server.
Nun muss das ganze so klug ablaufen, dass ich später die Angabe des Pfades auf die Standorte anpassen kann, ohne das Programm im Source zu verändern.

Um das Zuweisen des Pfades, ob nun BDE oder bei der Table kommst du so oder so nicht umhin.

LuckyStrike4life 4. Feb 2004 11:03

Re: Datenbankalias - Pfad der DBs muss dynamisch sein.
 
Zitat:

Zitat von Memo
Zitat:

Zitat von LuckyStrike4life
jetzt muss ich Aliasnamen für die DBs verwenden

Warum?

Zitat:

Zitat von LuckyStrike4life
Das Programm ist soweit fertig, es gibt 7 DBs - alle sind immer mit der vollen Pfadangabe im Source aufgeführt

Das ist nicht nicht gut und sicher meinst du Tabellen.

Wo siehst du jetzt den Unterschied zwischen Tabelle und Datenbank bei existierenden dBase Datein, welche als Datenbanken funktionieren?
Zitat:

Zitat von LuckyStrike4life
Wenn ich mein Programm auf anderen Rechnern zum laufen bringen musste, dann hat es bisher gereicht die BDE auf dem Rechner zu installieren.

Das würde auch weiterhin reichen, wenn du den Pfad dynamisch und nicht wie jetzt statisch zuweist. Evt. reicht dir schon ein Ini-File zum ablegen des Pfades. Einmal beim ersten Start einen Opendialog angezeigt um dem User die Möglichkeit zu geben den Pfad zu wählen, wenn dann die Tables erfolgreich geöffnet werden konnten, legst du diesen Pfad in deinem Ini-File ab und bedienst dich beim nächsten Start wieder des selben Pfades. Das funktioniert natürlich auch mit einem BDE-Alias.
Okay, hört sich sehr gut an - nur wie muss ich da ran gehen. Das würde mein Problem schon gänzlich lösen.

BluesKid 4. Feb 2004 11:16

Re: Datenbankalias - Pfad der DBs muss dynamisch sein.
 
moin

http://www.tutorials.delphi-source.de/ini/

oder

http://www.tutorials.delphi-source.de/registry/

mfg

Sam

Memo 4. Feb 2004 11:24

Re: Datenbankalias - Pfad der DBs muss dynamisch sein.
 
Zitat:

Zitat von LuckyStrike4life
Okay, hört sich sehr gut an - nur wie muss ich da ran gehen. Das würde mein Problem schon gänzlich lösen.

Wenn du bei deinem bissherigen Weg bleiben möchtest, also Pfadzuweisung ohne BDE-Alias mach ich es immer so:

Programm startet, nachsehen ob mein Ini-File existiert, tut es das nicht gehe ich vom ersten Start aus und lasse einen Opendialog anzeigen. Ist dann ein Pfad gewählt weise ich diesen zu. Wenn die Verbindung geklappt hat und nur dann wird der Pfad im Ini-File gespeichert um beim nächsten Start wieder zur Verfügung zu stehen.


Der Weg über einen existierenden BDE-Alias:
Code:
procedure TForm.aliaspfad(pfad : String);
var AParams : TStringList;
begin
   AParams :=TStringList.Create;
   try
    AParams.Add('PATH=' + pfad);
    Session1.ConfigMode := cmAll;
    Session1.ModifyAlias('BDEALIASNAME',AParams);
    Session1.SaveConfigFile;
    Session1.Close;
   finally
    AParams.Free;
   end;

LuckyStrike4life 4. Feb 2004 15:15

Re: Datenbankalias - Pfad der DBs muss dynamisch sein.
 
Okay,
ich hab mich nun mit den INI-Datein beschäftigt.

Ich lasse nun einen Pfad in eine Ini Datei schreiben, es ist auch alles kein Problem diesen abzufragen, aber dennoch bekomme ich den Pfad nicht in die SQL Anweisung, so das erkannt wird welchen Pfad ich meine.

D.h. ich lasse aus der Ini den Wert auslesen, schreib mir das einfach in eine string Variable, aber den Wert der nun in der Variable steht, den kann ich nicht als Pfad nutzen.

Mal n Beispiel:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
//---------------------------------------------------------
var
IniDat: TIniFile;
Pfad: string;
 begin
  IniDat := TIniFile.create('.\Adressen.ini');
  inidat.WriteString('Pfad','MainDB', Edit1.text);
  iniDat.free;
  IniDat := TIniFile.create('.\Adressen.ini');
  Pfad := IniDat.ReadString('Pfad','MainDB','' );
  AliasEdit.text := Pfad;
  IniDat.free;
//---------------------------------------------------------

Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Text :=
   'SELECT *' + #10 +
   'FROM  Pfad' + #10 + // hier also die Variable Pfad, wird aber nicht als Adresse anerkannt..
   'WHERE Dienst_PKW = :iDienst_PKW AND' + #10 +
   '      Datum = :iDate';
[...]
Das ist nur n Beispiel, natürlich lasse ich später nicht den Pfad erst zur LZ von nem Editfeld abfragen.

Pfad ist die Variable, die den Wert aus der Ini ließt - das klappt auch, denn ich laß mir den Wert mit dem AliasEditfeld anzeigen.

Hm.. Ideen??
Edit:
Um mich genauer auszudrücken, es ist mir nicht möglich die Variable "Pfad" als den Pfad der DBs anzugeben. Obwohl der richtige Pfad in der Variable steht.

Robert_G 4. Feb 2004 15:19

Re: Datenbankalias - Pfad der DBs muss dynamisch sein.
 
Mensch LuckyStrike...
Delphi-Quellcode:
Query2.SQL.Text :=
   'SELECT *' + #10 + 
   'FROM  ' + Pfad + #10 + // Wie bekommst du einen Wert in einen String?!? 
   'WHERE Dienst_PKW = :iDienst_PKW AND' + #10 + 
   '      Datum = :iDate';
oder
Delphi-Quellcode:
Query2.SQL.Text :=
   Format(
   'SELECT *' + #10 + 
   'FROM  %s' + #10 + // Wie bekommst du einen Wert in einen String?!? 
   'WHERE Dienst_PKW = :iDienst_PKW AND' + #10 + 
   '      Datum = :iDate'
   ,[Pfad]);

p.s.: in die About-Box deiner App kommt doch bestimmt "© Delphi-PRAXIS" :zwinker:

LuckyStrike4life 4. Feb 2004 15:36

Re: Datenbankalias - Pfad der DBs muss dynamisch sein.
 
Zitat:

Zitat von GeorgeWNewbie
Mensch LuckyStrike...
Delphi-Quellcode:
Query2.SQL.Text :=
   'SELECT *' + #10 + 
   'FROM  ' + Pfad + #10 + // Wie bekommst du einen Wert in einen String?!? 
   'WHERE Dienst_PKW = :iDienst_PKW AND' + #10 + 
   '      Datum = :iDate';
oder
Delphi-Quellcode:
Query2.SQL.Text :=
   Format(
   'SELECT *' + #10 + 
   'FROM  %s' + #10 + // Wie bekommst du einen Wert in einen String?!? 
   'WHERE Dienst_PKW = :iDienst_PKW AND' + #10 + 
   '      Datum = :iDate'
   ,[Pfad]);

p.s.: in die About-Box deiner App kommt doch bestimmt "© Delphi-PRAXIS" :zwinker:

:pale: hm... eigentlich müsste ich das wohl schreiben, ja. :pale:

Aber es steht in meiner Signatur auch nicht: "Ich kann doch wirklich alles". :wink:

Nun gut, dass was du gesagt hast geht natürlich, nur erkennt String leider kein ':' und kein '\' an, aber für Pfadangaben ist das unumgänglich... F**K!

Was mach ich denn da :gruebel: ?

Edit:
Eigentlich müssten Strings kein Problem mit diesen Zeichen haben, aber warum sagt Delphi beim Ausführen der Funktion:
Zitat:

Ungültiges Schlüsselwort
Symbol-String:\ ?
Der Fehler tritt auch erst dann auf, wenn die Datenbankabfrage passiert, nicht wenn der Pfad in die iniDatei geschrieben oder ausgelesen wird, sondern tatsächlich erst ... sobald der Pfad aus der Variable verwendet werden soll. *denk*...
Es müsste "t:eDienstreisebuch\mainDB.dbf" eingesetzt werden

Robert_G 4. Feb 2004 15:51

Re: Datenbankalias - Pfad der DBs muss dynamisch sein.
 
Zitat:

Zitat von LuckyStrike4life
...nur erkennt String leider kein ':' und kein '\' an...

Was sagst du dazu...
Delphi-Quellcode:
  StringVar := ' \ :';
  ShowMessage(StringVar);

Wie wär's mit...
Delphi-Quellcode:
  ...
  Pfad := '"' + Pfad + '"';
  ...
Dann steht wieder "t:\DienstReiseBuch.dbf" (mit den Anführungszeichen) im SQL-Statement. (Auch wenn ich mich daran nie gewöhnen kann)

LuckyStrike4life 4. Feb 2004 16:03

Re: Datenbankalias - Pfad der DBs muss dynamisch sein.
 
Geht,
wie immer.
Danke dir und den Anderen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 Uhr.
Seite 1 von 2  1 2      

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