Autor Beitrag
m-werk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Mo 24.06.02 22:55 
Hi Leute, Ich habe mit einer Access-DB ein programm erstellt.
Zugriff auf die Access-DB habe ich so: C:\Arius\Datenbank\Dantenbankname.mdb

Nun habe ich eine Setup-Datei von meinem Programm erstellt und als Pfad für die Datenbank habe ich in Setup 'Programme' -> 'Arius' ->'Datenbank' angegeben.

Nun habe ich mein Setup getestet und es will mir aber jetzt wieder auf C:\Arius\Datenbank\.....mdb zugreifen.

Wie kann ich so eine Art Alias-Adresse machen, damit das auch funktioniert?

_________________
Grüße, m-werk
Torsten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mo 24.06.02 23:08 
Moinsen!

Leg doch die DB in das Verzeichnis (oder Unterverzeichnis) des Programms. Somit brauchst keine absoluten Pfadangaben. Hier reichen dann relative Angaben.

Grüße

Torsten
m-werk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Mo 24.06.02 23:13 
Hi, das habe ich mir auch schon überlegt, aber was ist, wenn der User ein anderes Installationsverzeichnis wählt?
Dann habe ich wieder das problem.

_________________
Grüße, m-werk
Torsten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mo 24.06.02 23:14 
Naja, wenn Du die DB mitlieferst (in der Installationsroutine integriert) eben nicht, da die relative Angabe bleibt.

Grüße

Torsten
m-werk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Mo 24.06.02 23:16 
Und was heist das genau? Könntest du mir das erklären und beschreiben, wie ich das mache?

Ich verwende den InsallSheld von Delphi 6

_________________
Grüße, m-werk
Torsten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mo 24.06.02 23:22 
OK, dann mal los.

Du greifst als auf die DB mittels relativer Pfadangabe zu.
Einfaches Beispiel:
ausblenden Quelltext
1:
LoadDB('meine_DB.mdb');					

oder
ausblenden Quelltext
1:
LoadDB('/verzeichnis/meine_DB.mdb');					


Es handelt sich um relative Angaben.

Wenn Du nun Deine Anwendung samt DB weitergibst, dann ändert sich zwar eventuell das Installations-Verzeichnis, nicht jedoch die relative Angabe.
Du musst nur sicherstellen, dass in Deinem Setup-Programm die DB auch an die richtige Stelle kopiert wird.
Also beispielsweise in das gleiche Verzeichnis, wie die Anwendung ansich (siehe: LoadDB('meine_DB.mdb')) oder eben in ein Unterverzeichnis (siehe: LoadDB('/verzeichnis/meine_DB.mdb')).

Damit ist sicher gestellt, dass die relative Angabe weiterhin gilt.

Grüße

Torsten


Zuletzt bearbeitet von Torsten am Mo 24.06.02 23:24, insgesamt 1-mal bearbeitet
Torsten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mo 24.06.02 23:24 
Ach ja, bei InstallShield musst Du lediglich angeben, welche Dateien zusätzlich eingebunden werden. Bei Dir also die DB.
Eventuell musst Du noch angeben, wohin die DB kopiert werden soll. Das Prinzip ist aber gleich (wie beschrieben).

Grüße

Torsten
m-werk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Mo 24.06.02 23:31 
Tja, das ist relativ einleuchtend.

Ich habe es bei mir so gemacht:

Ich habe ein DataModul erstellt (DM) dort habe ich alles was ich so brauche (ADO) drinn.

Die ADOConnection habe ich auch da drinn.
Bei der ADOConnection habe ich im ConnectionString folgenden Code drin:
ausblenden Quelltext
1:
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Arius\Datenbank\Kundendaten.mdb;Mode=ReadWrite;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password=qx99;Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False					


Der ist etwas lang. Dieser wurde auch automatisch erstellt.
So habe ich ihn erstellt:

Ich bin bei der ConnectionString auf Aufbauen gegangen. Dann habe ich unter Punkt 1 den Ordner ausgewählt: C:\Arius\Datenbank\...mdb
Beim Provider habe ich 'Microsoft Jet 4.0 OLE DB Provider ausgewählt.

So war meine Vorgehensweise. Da ich mit dem Programmieren nicht so gewant bin, war dies die einfachste lösung.

Hast du eine bessere?

_________________
Grüße, m-werk
Torsten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mo 24.06.02 23:38 
Sorry, mit ADO habe ich es nicht so.
Scheint aber einleuchtend.

Versuche doch mal bei DataSource eine relative Pfadangabe einzugeben.
Testen sollte kein Problem sein. Du brauchst ja einfach nur den übergeordneten Ordner der Anwenung ändern. (hat ja keine Einwirkung auf die relative Pfadangabe).

Grüße

Torsten
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mo 24.06.02 23:45 
Hi,

mit Relativen Pfadangaben wirst du nicht weit kommen. Du must den Pfad schon absolut angeben, du kannst ihn aber zur Laufzeit ermitteln.
Je nach ADO Komponente könnte das so aussehen:
ausblenden Quelltext
1:
2:
3:
4:
ADOConection.ConectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=' + 
  ExtractFilePath(Application.ExeName) + 
  'Datenverzeichnis\Kundendaten.mdb;Mode=ReadWrite;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password=qx99;Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
ADOConection.IsConnected := TRUE;

Deine datenbank mus dann vom EXE-Verzeichnis aus gesehen im Unterverzeichnis Datenverzeichnis liegen.

Gruß
Klabautermann
Torsten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mo 24.06.02 23:47 
Ja, wunderbar.
Mit Application.ExeName funktioniert es freilich wunderbar.
Somit hat man die absolute Pfadangabe elegant umgangen.
Wieso bin ich da nicht gleich drauf gekommen.

;)

Grüße

Torsten
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 25.06.02 00:06 
@m-werk:
Solltest du dem user die Freiheit lassen wollen das Datenbankverzeichnis unabhängig vom Programmverzeichnis wählen zu lassen, dann must du vom Installationsprogramm eine INI-Datei in deinem Programmverzeichnis anlegen lassen. In diese lässt du dann schreiben wo das Datenbankverzeichnis ist. Alternativ kannst du dein Setup Programm auch veranlassen den Pfad in die Regestry zu schreiben.
Beides sollte mit einem vernümpftigen Setup-Maker ohne größere Schwierigkeiten machbar sein.

Gruß
Klabautermann
m-werk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Di 25.06.02 08:07 
Danke Leute, das von Klabautermann werde ich heute mal ausprobieren. Scheint recht einleuchtend zu sein.

@Klabautermann :
Das mit einer INI ist eine sehr sehr gute Idee. Leider hab ich nicht den geringsten schimmer wie soetwas aussehen kann und wie man das macht.

Ich verwende den Install Sheld Express von Delphi 6.
Kann man das mit diesem auch machen? Wenn ja, wie geht das dann?

_________________
Grüße, m-werk
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 25.06.02 10:49 
Hallo,

ich denke schon, das IS-Express das kann. Ich selber verwende aber Inno Setup wo ich mal was entsprechdes in der Hilfe gelesen habe. Genutzt habe ich die funktionalität auch dort nicht (für meine Privaten Programme beschränken sich die ansprücher ans setup auf Kopieren und Links erstellen).

Ich halte soetwas aber für standartfinktionalität solcher Programme.

Gruß
Klabautermann
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 25.06.02 11:08 
Nachtrag:
Ich habe grade noch einmal in die OH von Inno-Setup geschaut. Im Setuo Script gibt es ein e Section [INI] in der ini-eiträge angelegt werden können.

Dieses Beispiel aus der Hilfe schreibt z.B. der Pfad des EXE-Verzeichnisses in eine INI-Datei die sich im Windows Verzeichnis befindet:

ausblenden Quelltext
1:
2:
[INI] 
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"


Das ließe sich leicht auf dein Problem anpassen. Aber wahrscheinlich ist es im Install Schield auch nicht schwerer.

Gruß
Klabautermann
m-werk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Di 25.06.02 11:19 
Hi, danke sehr, ich werd mich mal im Install Sheld umsehen. Vielleicht klapt es ja. Ansonsten werde ich den code von oben nehmen (connectionsting).

_________________
Grüße, m-werk
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 25.06.02 11:50 
m-werk hat folgendes geschrieben:
Vielleicht klapt es ja. Ansonsten werde ich den code von oben nehmen (connectionsting).


In ähnlicher Form wirst du den String sowiso verwenden müssen. Nur das du anstelle des ExtractFilePath den Pfad aus deiner INI verwenden musst.

Gruß
Klabautermann
m-werk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Mi 26.06.02 21:31 
Hi, so jetzt wollte ich den code für die connetionstring einbauen aber jetzt weis ich nicht, wo ich ihn genau hinsetzen soll bzw. wie das dann aussieht. Ich habe direkt im Objektinspektor bei der ConnectionString den code geändert auf ..... + ExtractFilePath(Application.ExeName) +...........
aber das hat nicht funktioniert. Er hat mir den Link so genannt, wie ich ihn eingegeben habe, und hat die DB nicht gefunden.

Ich möchte dass jetzt mit einer INI-Datei machen.
Könnt Ihr mir bitte eine genaue beschreibung von A-Z geben, wie ich das mit der INI-Datei lösen kann?

_________________
Grüße, m-werk
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 26.06.02 22:33 
Hallo,
im Object Inspector wird das nicht klappen.
Du musst das irgendwo in deinem Programm stehen haben. Eine möglichkeit währe das OnCreate Ereigniss des Modules auf dem die Connection Komponente liegt.

Wenn du probleme damit hast, sage noch mal bescheid. In der Online Hilfe findest du aber informationen zu tIniFile dir dir das ermöglichen sollten.

Gruß
Klabautermann
m-werk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Fr 28.06.02 20:36 
Hi, ich hab schon was gefunden, nur klapt das bei mir nicht.

Wenn ich das DataModul (DM) öffne, wo die Connection drinn ist, dann könnte ich mit der rechten Maustaste auf 'Ansicht als Text' gehen, wo ich dass dann änden könnte, nur kommt eine Inofmeldung wenn ich das mache

Modul 'C:\Arius\DM1.pas' hat offene Nachfahren oder verknüpfte Module. Kann nicht Schließen

Und dann bin ich wieder am alten Bildschirm. Ich komm in den Texteditor nicht rein.

Kannst du mir jetzt bitte helfen, es geht einfach nicht

_________________
Grüße, m-werk