Entwickler-Ecke
Datenbanken - Multiuser für Access 97 per ADO
Nico B. - Do 05.08.10 10:21
Titel: Multiuser für Access 97 per ADO
Hallo Leute,
ich versuche schon seit Wochen einen Multiuser-Zugriff auf eine Access97-Datenbank mit ADO-Komponenten hin zu bekommen. Ich will aus der Datenbank nur lesen. Es gibt aber noch ein anderes Programm (nicht von mir), das ebenfalls auf die Datenbank zugreift und auch in die Datenbank schreibt.
Ich schaffe es einfach nicht den lesenden Zugriff so einzurichten, dass er von jedem PC aus möglich ist.
Hier mal alle Infos zu meiner ADOConnection:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| Eigenschaften: Attributes [] CommandTimeout 30 Connected false ConnectionString ConnectionTimeout 15 ConnectOptions coConnectUnspecified CursorLocation clUseServer DefaultDatabase IsolationLevel ilCursorStability KeepConnection true LoginPromt false Mode cmUnknown Name ADOC_CNC Provider Microsoft.Jet.OLEDB.4.0 Tag 0 |
Nun noch der ConnectionString:
Delphi-Quelltext
1:
| Provider=Mircosoft.Jet.OLEDB.4.0;User=xyz;Data Source=\\xyz.xyz.xyz.xyz\Ordner\KR_HOST.mdb;Mode=Share Deny None;Persist Security Info=false;Jet OLEDB:System database=\\xyz.xyz.xyz.xyz\Ordner\system.mdw;Jet OLEDB:Engine Type=4 |
Ich kann die Verbindung auf meinem Programmier-PC erfolgreich testen. Sowohl über den Verbindungsassistenten von Delphi, als auch mit meinem Programm selbst. Auf meinem Programmier-PC (Windows XP) funktioniert die Verbindung ebenfalls. Auch auf einem Server (Windows Server 2003) klappt die Verbindung.
Nun soll das fertige Programm jedoch auf zwei anderen Rechnern laufen. Einer mit Windows XP und einer mit Windows 2000.
Auf beiden PC's erhalte ich keine Verbindung. Stattdessen bekomme ich immer wieder auf beiden PC's eine Fehlermeldung.
Ich bin mir jetzt nicht sicher, wie die Meldung lautet.
Ich reiche sie aber gleich noch nach.
Kann mir irgendjemand sagen, was ich falsch mache?
Nico B. - Do 05.08.10 10:43
Hier die Fehlermeldung:
"Das Mircosoft Jet-Datenbankmodul kann die Datei '' nicht öffnen. Sie ist bereits von einem anderen Benutzer exklusiv geöffnet, oder sie benötigen eine Berechtigung, um die Daten lesen zu können."
Seltsamerweise nennt er jetzt nicht mal mehr die Datei in der Fehlermeldung.
Früher stand dort noch statt des '' ganz klar '\\xyz.xyz.xyz.xyz\Ordner\KR_HOST.mdb'.
Keine Ahnung woran das nun liegt.
iKilledKenny - Do 05.08.10 10:58
Ich nehme mal stark an, dass das an dem anderen Programm liegt, von dem du geschrieben hast. Kannst du denn die Datenbank z.B. mit Access von einem dieser beiden Rechner öffnen? Das würde dann zeigen, dass es nicht an deinem Programm liegt, sondern daran, dass das andere Programm die DB exklusiv öffnet.
Außerdem natürlich die Dateiberechtigungen prüfen!
Nico B. - Do 05.08.10 13:01
Hallöchen,
also das habe ich natürlich auch schon überlegt.
Nur verstehe ich nicht, warum es dann auf meinem Programmier-PC und meinem Server läuft...
Es sieht mir fast so aus, als gäbe es irgendeinen Unterschied in den Einstellungen der Rechner. Ich habe aber keine Ahnung, was das sein könnte.
iKilledKenny - Do 05.08.10 14:16
Läuft denn auf deinem PC/Server auch das Fremdprogramm?
Hast du die Sicherheitseinstellungen für die Access-DB verglichen?
iKilledKenny hat folgendes geschrieben : |
| Kannst du denn die Datenbank z.B. mit Access von einem dieser beiden Rechner öffnen? |
Was hat diese Prüfung ergeben?
Nico B. - Do 05.08.10 14:35
Ich habe auf den anderen PC´s kein Access. Und kann daher die Datenbank nicht öffnen.
Leider komme ich heute nicht mehr an die PC's ran, auf denen mein Programm nicht läuft.
Morgen Vormittag werde ich aber folgendes Probieren:
1. Läuft mein Programm auf dem Rechner auf dem auch die Access-DB gespeichert ist.
Allerdings könnte es da Probleme geben. Der Rechner läuft mit Windows 2000. Und da müsste ich wahrscheinlich erst MDAC und Mircosoft Jet 4.0 installieren. Das würde ich aber nur ungern tun, da dieser Rechner teil eines Produktionssystems ist, und ich mir nicht sicher bin, ob das zu Problemen führen könnte.
2. Ich werde mein Programm noch einmal auf den anderen beiden Rechern testen. Vorher pinge ich den Rechner mit der Datenbank noch einmal an. Falls das Programm dann nicht läuft (was ich erwarte), werde ich ein Netzlaufwerk einrichten, das auf den Ordner mit der Access-DB zugreift. Anschließend probiere ich es noch einmal. Vielleicht hängt es ja irgendwie damit zusammen. Auf meinem Programmier-PC und meinem Server habe ich jedenfalls Netzlaufwerke auf diesen Ordner eingerichtet. Auch wenn die Netzlaufwerke nicht verbunden sein müssen, damit mein Programm auf die Datenbank zugreifen kann.
Versuch macht klug! Hoffe ich.
Wegen der Sicherheitseinstellungen der Access-DB... Was genau soll ich da vergleichen?
Ich greife ja von allen PC's immer auf die selbe Datenbank auf dem selben Rechner zu.
iKilledKenny - Do 05.08.10 15:34
Also ich muss doch nochmal nachfragen: Hast du bei der Entwicklung in derselben Umgebung (Netzwerk, Access-DB, etc.) gearbeitet, in der dein Programm nun auf den anderen 2 Rechnern nicht läuft?
Wenn du über \\Server\Freigabe\Access.mdb auf die DB zugreifen willst, impliziert das eine Freigabe unter ebendiesem Namen auf dem "Access-Server", das sind aber Basics! Das kannst du mit dem Windows-Explorer prüfen, ob du diese Freigabe erreichen kannst. Einfach "\\Server\Freigabe" in der Adresszeile eingeben, dann müsstest du die Access-DB sehen können.
Mit Sicherheitseinstellungen meine ich die Zugriffsrechte im Dateisystem für die Access-DB. Du greifts zwar auf dieselbe DB zu aber mit unterschiedlichen Benutzern.
Was hat ein Ping mit dem Laufen eines Programms zu tun? Ein erfolgreicher Ping stellt nur sicher, dass du den gepingten Rechner über das Netzwerk erreichen kannst.
Nico B. - Fr 06.08.10 09:55
Guten Morgen,
also ich habe jetzt probiert.
Ich habe mit meinen beiden Problem-PC's eine Verbindung hinbekommen.
Allerdings musste ich dazu, das Laufwerk als Netzlaufwerk verbinden.
Gibt es denn keine Möglichkeit das Netzlaufwerk zu umgehen?
Ich könnte mir vorstellen, das Problem ist, dass ich mich unter einem bestimmten Benutzernamen anmelden muss.
Kann ich den Benutzernamen für den Zugriff auf das freigegebene Verzeichnis (mit der Access-DB) nicht gleich irgendwie in den ConnectionString packen?
Nun noch zu deiner Frage:
Ja, ich habe bei der Entwicklung meines Programms im selben Netzwerk gearbeitet, in dem es auf den anderen beiden Rechnern Probleme gibt.
iKilledKenny - Fr 06.08.10 10:30
Wenn das Problem im Bereich Freigabe/Netzlaufwerk zu suchen ist, dann muss dein "Server" mit der Access-DB eben das Verzeichnis, in dem die DB liegt, freigeben. Dann sollte es auch ohne Netzlaufwerk klappen. Für diese Freigabe und die darin enthaltenen Dateien (Access-DB) sind dann die Berechtigungen so zu setzen, dass du auf diese von deinem Netzwerk aus zugreifen kannst. Wenn das funktioniert, brauchst du kein Netzlaufwerk mehr, sondern du gibst dann wie in deinem ersten Post den Pfad zur DB in deinem ConnectionString mit einem UNC-Pfad (\\Server\Freigabe\db.mdb) an.
Nico B. - Fr 06.08.10 13:39
So, ich habe mein Problem gelöst.
Ich habe den Ordner in dem die Access-DB liegt nun auch für die Gast-Nutzer freigegeben.
Damit klappt jetzt mein Zugriff auf die Datenbank von allen Rechnern problemlos. Auch ohne das ich den Ordner auf jedem Rechner als Netzlaufwerk einrichte.
Vielen Dank Alexander für deine Hilfe.
Eigentlich war's ja gar nicht so schwer.
Ich hatte mich wohl einfach ganz schön verfahren.
Also: Thema gelöst. :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!