Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Datenbankpfad dynamisch erstellen (https://www.delphipraxis.net/167680-datenbankpfad-dynamisch-erstellen.html)

m-werk 12. Apr 2012 13:08

Datenbankpfad dynamisch erstellen
 
Hallo,

ich hab ja mein Programm auf einem Testlaufwerk liegen und darunter hab ich einen Ordner mit database. In diesem Ordner liegt meine Datenbank, welche mit mit meinem Programm verbunden ist.

Jetzt möchte ich aber mein Programm mit der Datenbank auf einen anderen Rechner übertragen, sprich ich möchte NUR die Exe Datei und den Datenbankordner inkl. DB mitnehmen und in einen neuen Ordner einfügen.

Jetzt ist es aber so, dass mein Programm auf jede Datenbank zugreifen möchte, welche auf meinem Testrechner im Testordner liegt.

Wie kann ich mein Programm dazu bringen, dass er NUR vom Unterordner meine DB nimmt?

Der ConnectionString sieht so aus:
Code:
    ConnectionString =
      'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Programme\Hohen' +
      'burgerhof\Programm4\database\kundendaten.accdb;Mode=ReadWrite;Pe' +
      'rsist Security Info=False'

p80286 12. Apr 2012 13:16

AW: Datenbankpfad dynamisch erstellen
 
Zitat:

Zitat von m-werk (Beitrag 1161515)
Jetzt ist es aber so, dass mein Programm auf jede Datenbank zugreifen möchte, welche auf meinem Testrechner im Testordner liegt.

Das ist nach meiner Meinung durch den Connectionstring ausgeschlossen.

Woran merkt man denn, daß Dein Programm mit jeder DB eines Verzeichnisses Kontakt aufnehmen will?

Liegen da vielleicht noch ein paar offene Connections irgendwo herum?

Gruß
K-H

Bummi 12. Apr 2012 13:17

AW: Datenbankpfad dynamisch erstellen
 
wenn er schon gesetzt ist (ist ja oft so beim Entwickeln)
Delphi-Quellcode:
  ADOConnection1.Properties.Item['Data Source'].Value := ExtractFilePath(Paramstr(0)) + 'database\kundendaten.accdb';
  Showmessage(ADOConnection1.ConnectionString);

m-werk 12. Apr 2012 13:22

AW: Datenbankpfad dynamisch erstellen
 
Versteh ich jetzt nicht.

Diesen Code hab ich aus der Unit1.dfm:
Code:
  object ADOConnection1: TADOConnection
    Connected = True
    ConnectionString =
      'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Programme\Hohenburgerhof\Programm4\database\kundendaten.accdb;Mode=ReadWrite;Pe' +
      'rsist Security Info=False'
    LoginPrompt = False
    Mode = cmReadWrite
    Provider = 'Microsoft.ACE.OLEDB.12.0'
    Left = 64
    Top = 544
Dort steht der ganze Pfad drin.

bernerbaer 12. Apr 2012 13:23

AW: Datenbankpfad dynamisch erstellen
 
Ich denke, dass der Connectionstring fest einprogrammiert ist. Also würde ich folgendes vorschlagen:
  1. Connectionstring dynamisch aufbauen
  2. Beim Start der Anwendung zb den Pfad zur DB aus der Registry auslesen
  3. Wenn kein DB-Pfad in der Registry, oder wenn die DB nicht existiert Openfiledialog ausführen und den User die DB holen lassen
  4. den DB Pfad in den dynamischen Connectionstring einbauen
  5. den DB Pfad in der Registry speichern

m-werk 12. Apr 2012 13:27

AW: Datenbankpfad dynamisch erstellen
 
Ok, das würde ja eigentlich logisch klingen, nur muss ich das über die Registry machen?

Wie würde es aussehen, wenn man dies über eine INI-Datei macht, die im Pfad des Programmes liegt?

Bummi 12. Apr 2012 13:27

AW: Datenbankpfad dynamisch erstellen
 
packe einfach die erste Zeile meines Codes in BeforeConnect der Connection

m-werk 12. Apr 2012 13:34

AW: Datenbankpfad dynamisch erstellen
 
Oh, DANKE. Das hat prima funktioniert.

bernerbaer 12. Apr 2012 13:39

AW: Datenbankpfad dynamisch erstellen
 
Zitat:

Zitat von m-werk (Beitrag 1161526)
Ok, das würde ja eigentlich logisch klingen, nur muss ich das über die Registry machen?

Wie würde es aussehen, wenn man dies über eine INI-Datei macht, die im Pfad des Programmes liegt?

Wenn Du voraussetzt, dass dein Programm Schreibrechte im Programmverzeichnis hat, dann kannst Du selbstverständlich auch eine Ini-Datei nehmen.

Zu Bummis Vorschlag:
Der Funktioniert natürlich ebenfalls, aber nur unter 2 Voraussetzungen:
1. Du setzt voraus, dass die relativen Pfade stimmen
2. Du setzt voraus, dass der Pfad wo die DB liegt Schreibrechte besitzt

p80286 12. Apr 2012 15:17

AW: Datenbankpfad dynamisch erstellen
 
Zitat:

Zitat von bernerbaer (Beitrag 1161534)
Zu Bummis Vorschlag:
Der Funktioniert natürlich ebenfalls, aber nur unter 2 Voraussetzungen:
1. Du setzt voraus, dass die relativen Pfade stimmen

irgendwann muß man sich auf die Vorgaben verlassen.

Zitat:

Zitat von bernerbaer (Beitrag 1161534)
2. Du setzt voraus, dass der Pfad wo die DB liegt Schreibrechte besitzt

das versteh ich jetzt nicht, Das ist doch nicht spezifisch für Bummi's Vorschlag??

Gruß
K-H

bernerbaer 12. Apr 2012 15:29

AW: Datenbankpfad dynamisch erstellen
 
Zitat:

Zitat von p80286 (Beitrag 1161570)
irgendwann muß man sich auf die Vorgaben verlassen.

Ja, du hast recht, aber eben es muss vorausgesetzt werden, was im Ausgangsposting nicht ersichtlich ist.

Zitat:

Zitat von p80286 (Beitrag 1161570)
Zitat:

Zitat von bernerbaer (Beitrag 1161534)
2. Du setzt voraus, dass der Pfad wo die DB liegt Schreibrechte besitzt

das versteh ich jetzt nicht, Das ist doch nicht spezifisch für Bummi's Vorschlag??

nun, er trägt mit ExtractFilePath(Paramstr(0)) den Applikationpfad in den Connectionstring ein, bei einer "Standardanwendung" hat man dort keine Schreibrechte. Also auch hier muss man genau definieren, dass Schreibrechte im Programmordner vorhanden sein müssen.

Gruß
K-H

Bummi 12. Apr 2012 15:32

AW: Datenbankpfad dynamisch erstellen
 
Die Einwände sind beide berechtigt, ich habe mich hier rein an die Anforderungen gehalten.

bernerbaer 12. Apr 2012 15:33

AW: Datenbankpfad dynamisch erstellen
 
Zitat:

Zitat von Bummi (Beitrag 1161576)
Die Einwände sind beide berechtigt, ich habe mich hier rein an die Anforderungen gehalten.

Das war absolut keine Kritik an deiner Lösung, die ist absolut korrekt! Ich habe einfach nur allgemein auf die Problematik hinweisen wollen!

Bummi 12. Apr 2012 15:36

AW: Datenbankpfad dynamisch erstellen
 
Hatte ich auch nicht so aufgefasst ...:cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 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