ODBC-Zugriffe nicht möglich
reinhard
- datenbank
1 dedlfix0 Vinzenz Mai
Hallo Leute,
ich habe Probleme, mit dem normalen SQL-statment "UPDATE Tabelle SET Feld1 = 1, Feld2 = 2 WHERE ID = 15" über ODBC auf eine Tabelle in MS-Access zuzugreifen (Active Server Pages mit VBScript). Es kommt die Meldung "Aktualisierung nicht möglich, momentane Sperrung durch Benutzer "admin" auf Computer ... ".
Das Statement ist in einer Schleife eingebaut, die insgesamt rund 30 Einträge eines ADO-recordsets durchläuft und die Daten per Update in die Tabelle überträgt.
Manchmal laufen 10 Datensätze durch, manchmal 3, dann wieder alle. Es ist keine Regel erkennbar. Es kann wohl nicht an den Daten selber liegen, denn sonst würde das Programm immer an der gleichen Stelle abbrechen.
Auch bin ich ganz allein auf dem Server, da die Testanwendung noch keiner kennt. Auf meinem Laptop (auf dem ich die Anwendung entwickelt habe) passiert nie ein Fehler. Ebensowenig in einer Schulungsumgebung, die die gleichen Dateien benutzt, jedoch eine andere Schnittstelle zu einer Kopie der Produktionsdatenbank. Die Schnittstellen und Datenbanken sind genau gleich eingerichtet. Andere Programmteile mit ähnlichen UPDATE-Statements auf die gleiche Tabelle haben auch keine Probleme.
Woran kann es liegen???
Grüße, Reinhard
echo $begrüßung;
ich habe Probleme, mit dem normalen SQL-statment [...] Es kommt die Meldung "Aktualisierung nicht möglich, momentane Sperrung durch Benutzer "admin" auf Computer ... ".
Woran kann es liegen???
An der Sperre durch den "admin". :-)
Vielleicht solltest du in einem Mehrbenutzersystem selber eine Schreib-Sperre einlegen, um dann "in Ruhe" deine Daten ändern zu können.
echo "$verabschiedung $name";
Hallo Reinhard
Woran kann es liegen???
Dass Du nicht überprüfst, ob Dein Zugriff erfolgreich war. Du solltest den auftretenden Laufzeitfehler behandeln, z.B. indem Du beim Auftreten eines Fehlers nach einer Wartezeit es nochmal versuchst. Du kannst auch so vorgehen, wie von dedlfix beschrieben - oder Du folgst der Empfehlung von Microsoft und lässt Die Verwendung von Access bleiben, siehe Microsoft Knowledge Base.
Freundliche Grüße
Vinzenz
Dass Du nicht überprüfst, ob Dein Zugriff erfolgreich war. Du solltest den auftretenden Laufzeitfehler behandeln, z.B. indem Du beim Auftreten eines Fehlers nach einer Wartezeit es nochmal versuchst.
An diesen "work-around" hatte ich auch schon gedacht, aber er löst das Problem ja nicht wirklich. Ich vergaß übrigens zu sagen, daß es auf dem Server garkeinen Benutzer "admin" gibt ...
und lässt Die Verwendung von Access bleiben,
... gute Idee, wer mag schon Microsoft-Produkte. In diesem Fall ist das Zielsystems für die Produktion eines Tages auch ORACLE, aber in der Schulungsumgebung ist Access einfach praktischer, weil man mit einer schnellen Kopieraktion die Datenbank auf den ursprünglichen Stand zurücksetzen kann.
Nochmal zum Problem selbst: in einem anderen Forum habe ich gelesen, daß der Effekt bei ja/nein-Feldern in der Tabelle auftreten kann, allerdings nur bei INSERTs. Hat da jemand Erfahrung?
Gruß, Reinhard
Hallo Reinhard,
... gute Idee, wer mag schon Microsoft-Produkte.
Kommt auf das Produkt an :-)
In diesem Fall ist das Zielsystems für die Produktion eines Tages auch ORACLE, aber in der Schulungsumgebung ist Access einfach praktischer, weil man mit einer schnellen Kopieraktion die Datenbank auf den ursprünglichen Stand zurücksetzen kann.
Autsch. Damit bleibst du aber auf primitives SQL beschränkt. Die Oracle kann um Einiges mehr als Access. Teilweise verhält sie sich auch anders. Ich sag nur Performance. Sachen, die auf Access (oder SQL Server) schnell gehen, können auf der Oracle schnarchlangsam sein. Mit Umstellen der Query, Setzen von Indizes, usw. wird's dann erst flott.
Gruß,
Martin
Moin!
... gute Idee, wer mag schon Microsoft-Produkte. In diesem Fall ist das Zielsystems für die Produktion eines Tages auch ORACLE, aber in der Schulungsumgebung ist Access einfach praktischer, weil man mit einer schnellen Kopieraktion die Datenbank auf den ursprünglichen Stand zurücksetzen kann.
Das geht mit jedem anderen DBMS auch welches kein eigenes Filesystem verwendet (genau genommen auch dann...). Server anhalten, Datenbankdateien(oder Verzeichnisse(oder das Filesystem)) zurückkopieren, Server neu starten. Du kannst das sogar als Batchdatei schreiben.
Informiere Dich im manual des DBMS wo die Daten gehalten werden.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Könnte sein, daß ich den Fehler gefunden habe ...
Konstruktion des Programms war wie folgt:
(Legende: conn = ODBC-Verbindung, rs = recordset, DS = Datensatz)
Funktion A: conn.open, rs.open,
Schleife für DS des rs
Funktion B: Berechnung für DS, conn2.open, UPDATE
Funktion C: Berechnung für DS, conn3.open, UPDATE, conn3.close
End Schleife
conn.close
Ende Funktion A
Wie man unschwer sieht, ist in Funktion B eine Verbindung offen geblieben. Obwohl die Verbindungen alle unterschiedliche Namen haben und ich davon ausgegangen war, daß Objekte mit dem Ende der Funktion "sterben", scheint die Verbindung offen geblieben zu sein und es gab in Funktion C (seltsam) den Fehler. Eigenartigerweise behindert die Verbindung in Funktion A den Zugriff nicht.
Mal abwarten, ob das tatsächlich der Fehler war. Der Anwender wird schon schreien, wenn dem nicht so war ...
Ach ja...
Gruß, Reinhard