![]() |
Kompatibilität
hi leute!
ich hab da ein progamm, dass mit einer ADOConnection und ADODataSet komponente mit einer mdb(acces-Datenbank) arbeitet.. naja ich hab bei meinem programm es so eingestellt, dass er meine ADO-DSN in die Registry schreibt/liest(natürlich sind Hauptprogramm und Datanbank-Datei im selben Ordner), damit es beim öffnen des Programms keine Probleme gibt. Also beim starten des Programms liest er die DSN vom der Registry und beim schließen schreibt er in die Registry die DSN... Nur das Problem ist, als ich das Programm anderen Leuten geben wollte und die das dann installiert haben, dann wollte das progamm nicht starten, alles was man dann sehen konnte ist der Splashscreen des programms und als der splashscreen dann verschwand kam nix mehr. Doch warum gehts denn bei mir, ich hab auch oft bei mir installiert und es läuft einwandfrei. ich hab denn mal recherchiert und hab gesehen, dass beim Registry-Eintrag beim "Wert" also da wo die DSN eigentlich stehen sollte, auf einmal nix mehr steht...sehr seltsam kann mir jemand vielleicht helfen? ich probiers schon seit tagen aber das Resultat ist immer das selbe... danke MfG LkZ! |
Re: Kompatibilität
Es sind noch ein paar Fragen offen:
1, Wird in der DNS der komplette Pfad angegeben bzw. dieser dynamisch ergänzt. Falls nicht, so kann dies ein Problem darstellen, da ohne Pfadangabe immer der aktuelle Pfad zu suche genommen wird und dieser nicht immer der Anwendungspfad ist 2, Wo wird in die Registry geschrieben? Hoffentlich unter HKEY_CURRENT_USER. Unter HKEY_LOCAL_SYSTEM benötigt man Admin-Rechte für den schreibzugriff. Falls diese Tipps nichts helfen, solltest Du noch etwas Code posten, was bei deiner Programminitialisierung passiert. |
Re: Kompatibilität
Ein paar zusätzliche Infos wären nicht schlecht.
- schreibst den registry key mit dem connectionstring wärend des setups un die registry oder machst du das, wie ich es vermute, im onCreate deiner Mainform ? Wenn das so ist, schau dir mal an wir ich das gemacht habe ... //TAdoConnection.WillConnect(...);
Delphi-Quellcode:
[edit=Christian Seehase]Code-Tags durch Delphi-Tags ersetzt. Mfg, Christian Seehase[/edit]
Procedure TData.connWillConnect(Connection: TADOConnection;
var ConnectionString, UserID, Password: WideString; var ConnectOptions: TConnectOption; var EventStatus: TEventStatus); var reg:tregistry; begin reg:=Tregistry.Create; try try reg.RootKey:=HKEY_LOCAL_MACHINE; reg.OpenKey('\Software\ESS\DaxoKal',true); if reg.ValueExists('DBDir') then DataPath:=reg.ReadString('DBDir') else Datapath:=Programmpfad; if reg.ValueExists('altDBDir') then altDataPath:=reg.ReadString('altDBDir') else altDatapath:=Programmpfad; finally reg.Free; end; except end; if Fileexists(Datapath+'\data.mdb') then begin if connectionstring<>DataPath+'\data.mdb' then Connectionstring:=DataPath+'\data.mdb'; main.DBLabel.Caption:='Datenbank: '+Connectionstring; end else begin if Fileexists(altDatapath+'\data.mdb') then begin if connectionstring<>altDataPath+'\data.mdb' then Connectionstring:=altDataPath+'\data.mdb'; main.DBLabel.Caption:='Datenbank: '+Connectionstring; end else begin Showmessage('DaxoKal konnte keine Verbindung zu der Primären und Alternativen Datenbank herstellen.'+#13#10+ 'Bitte Überprüfen Sie Ihre Installation und die Zugriffsrechte auf die Datenbankverzeichnisse.'+#13#10+ 'Primäre Datenbank : '+Datapath+'\data.mdb'+#13#10+ 'Alternative Datenbank : '+altDatapath+'\data.mdb' ); Abort; end; end; end; |
Re: Kompatibilität
Hallo jensw,
du solltest Dein Registry-Key von HKEY_LOCAL_MACHINE nach HKEY_CURRENT_USER verschieben. In Zeiten von Täglich zig-Neuen Viren und Würmern sollte kein (unbedarfter) User mehr mit Admin-Rechten seinen Rechner im Normalfall betreiben. Und als Nicht-Admin hast du in der Regel keinen Schreibzugriff auf HKEY_LOCAL_MACHINE. |
Re: Kompatibilität
Ja Ok das mit dem HKEY_CURRENT_USER hab ich jetzt geämdert...
zu 1. das mit der DSN: er sollte eigentlich den ganzen connenctionstring in die Registry schreiben, was er ja nicht tut. Mein ConnectionString ist: "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Projekts\CHEMIE_datenbank\Data.mdb;Mode= ReadWrite;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password=offbyte;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=True;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=True;Jet OLEDB:SFP=False" naja gut weiss jetzt nicht, ob dir das hilft aber naja.. MfG |
Re: Kompatibilität
Zitat:
|
Re: Kompatibilität
@Bernhard Geyer
Du hast "für den Normalfall" Recht. Aber in diesem Fall mache ich es gerade weil die User keine Adminrechte haben und somit die Werte nicht verändern können. Die Datenbankverzeichnisse (DBDir - normales Datenbankverzeichnis auf dem Server, AltDBDir - ein alternatives Datenbankverzeichnis, z.B. in c:\programme\irgendwas für Notebook Nutzer) werden während der Installation, bei der man ohnehin Adminrechte benötigt, geschrieben. Die Pfade kann man aus dem Programm heraus Ändern, wenn man lokale Adminrechte hat, normale User dürfen das halt nicht ... :wall: Habe gerade gesehen, dass das nicht der aktuelle Code war. Die Änderung ist da noch nicht drin ...
Code:
:hi:
reg.OpenKeyReanOnly('\Software\ESS\DaxoKal');
|
Re: Kompatibilität
Ja weiss nicht...was ist denn jetzt die lösung des problems? bin jetzt total konfuss..
|
Re: Kompatibilität
@LkZ
Zitat:
Wenn du den gesammten Connectionstring speichern willst, dann musst du im TAdoConnection.WillConnect prüfen, ob die data.mdb die im CS angegeben ist, auch wirklich im dem Pfad steht, und falls nicht, den CS ggf. abändern ... " ExtractfilePath(application.Exename)+'\Data.mdb' " Warum willst du das überhaupt in die Registry schreiben und dann wieder laden ? :gruebel: gib doch einfach im TAdoConnection.Willconnect (...) folgendes ein Connectionstring:=ExtractfilePath(application.Exen ame)+'\Data.mdb' ; Das passt immer :cyclops: |
Re: Kompatibilität
dankE! Hat echt geholfen!
|
Re: Kompatibilität
Zitat:
|
Re: Kompatibilität
Hi ich bins nochmal!
Also 2.Problem: Als ich mein Programm einen Freund geben wollte, dann wollte es nicht starten. Er sagte mir dass es ein "Server Error" ist. Ich habe die Fehlermeldung nicht gelesen, weil es ja bei mir funktioniert. Dann sagte man mir, dass (viele) Personen keinen Datenbanktreiber für meine Datenbank (acces) haben, deshalb sollte ich den Treiber (woher ich ihn herbekommen sollte, weiss ich nicht) mit in die Installationsdatei beifügen. Also meine Fragen sind: 1. Kann ich Lizenzfrei den Treiber in meine Installationsdatei beifügen? 2. Wenn ja, woher bekomm ich die (soll eine DLL sein) und wo soll sie installiert werden? danke MfG LkZ |
Re: Kompatibilität
Hi,
Der Treiber der verwendet wird, nennt dich OLE DB und ist bei allen WIndows Versionen (ab Win98) mit dabei. Je nach Version der Access Datenbank (95, 97, 2000/XP, 2003) kann aber ein Update für die OLE DB Treiber sinnvoll bzw. notwendig sein. Hier Link zu den Microsoft Data Access Components (MDAC) Version 2.8 ![]() Wie hast du es jetzt gemacht ? Speicherst du den kompletten Connectionstring oder gibst du als CS die MDB Datei an ? Ein einfache Verweis aus die MDB ist immer das Beste, da die im CS angegebenen Paramater zwischen den OLEDB Treiber Versionen und Betriebssystemen abweichen können. :hi: [edit] Da fällt mir noch was ein ... Überschreibst (bzw. setzt) du den Connectionstring im TAdoConnection.WillConnect ? Wenn nicht, must du darauf achten, das du deine TAdoConnection vor dem Compilieren auf active:=false stellst. Sonst passiert folgendes: Deine Instanz von TAdoConnection wird mit dem Status active:=true und Connectionstring:="dein systemeigener cs" in die exe geschrieben. Wenn die exe jetzt auf einem anderen System gestartet wird, wo z.B. die MDB in einem anderen Verzeichnis liegt, startet dein Programm erst, nachdem das ConnectionTimeout deiner AdoConnection abgelaufen ist, und es kommen dann (ggf.) ein paar Fehler- und Folgefehlermeldungen. Umgeben kann man das Ganze wie gesagt wenn man den CS der TAdoConnection im WillConnect Eventhandler "korrigiert und überschreibt". [/edit] |
Re: Kompatibilität
ja,ich speichere den connectionstring: ich lasse ihn in die Resigisry schreiben...
|
Re: Kompatibilität
Wenn du den kompletten ConnectionString speicherst solltest du deine AdoConnection in etwa so öffnen:
Code:
procedure AdoConnection.Willconnect(var Connectionstring...);
begin //.. Connectionstring aus Registry laden und . . . Connectionstring:=reg.readstring ('meinConnectionString'); end;
Code:
Procedure irgendwas;
begin try AdoConnection.open; except on e:Exception do begin if Adoconnection.connected=false then begin // Connectionstring neu konfigurieren end else raise end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz