Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 241111 (2547)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Datei zweimal öffnen
Sascha Etzrodt
| Datum:29.05.02 08:40 (Sascha@EtzrodtCity.de) |
Hallo, ich tüfftle gerade mit zwei Rechnern im Netzwerk. (Windowsdateifreigabe - Netzlaufwerk verbinden - die Pfandangaben entsprechend - usw.) Das Problem was ich habe ist: Eine Datenbank von zwei Rechner gleichzeitig zu öffnen. Wenn ich eine Datenbank mit irgendeinem Prog öffne und dann versuche mit Profan auf die Datei zuzugreifen ( @dbopen ) bekomme ich eine Fehlermeldung "Datei wird bereits verwendet". Wie kann ich von einer Anwendung die Datenbank Schreiben und von einer Anderen gleichzeitig lesen? PS: Ich arbeite mit Profan 4.5
Bernd Haase
| Datum:29.05.02 11:35 (info@ebs-haase.de) |
Moin ! Also DBase III ist nicht mehrfach benutzbar. Das was Du machen möchtest, geht so nicht. Du hast zwei Möglichkeiten das Problem in den Griff zu bekommen. 1. Du öffnest die Db, machst deine Aktionen und schließt diese sofort. Der nächste Lesezugriff vom anderen Arbeitsplatz aus müßte dann klappen. Es ist unwahrscheinlich, daß von beiden Arbeitsplätzen aus, gleichzeitig zugegriffen wird. 2. Die andere Möglichkeit bietet MRK-Soft an. Dieser hat in seinen Downloadbereich eine Datenbank (ähnlich Dbase), die mehrfachzugriffe zuläßt. Diese mußt Du downloaden und probieren. Gruß bernd
Alexander Schoenfeld
| Datum:29.05.02 12:34 (alexander.schoenfeld@chronologic.de) |
Hier noch der Link zu MRK-Soft, die Dll heisst EASYDB.DLL :) http://www.mrk-soft.de/profan/start.htm Mit freundlichem Gruss / kind regards, Alexander Schoenfeld Email: alexander.schoenfeld@chronologic.de
Sascha Etzrodt
| Datum:29.05.02 17:05 (Sascha@EtzrodtCity.de) |
Hi, danke erstmal für eure schnelle Antwort! Zu der 1. Möglichkeit: Genau so mache ich es in den meisten Fällen. Aber die seltene Möglichkeit des gleichzeitigen Zugriffs besteht halt (teoretisch). Zu der 2. Möglichkeit: Ich habe es gerade runter geladen und werde es mal in Ruhe testen. Gibt es evt. eine Möglichkeit den Programmabsturtz bei einem Doppelzugriff in eine Fehlermeldung umzuwandeln? So unter dem Motte: "Probiere solange zu öffnen, bis es klappt" MFG SASCHA
Sven Schmidts
| Datum:29.05.02 19:16 (schmidts@flat2serv.de) |
Hallo, die einfachste Möglichkeit: Jede Anwendung schreibt beim öffnen der DB einen Eintrag in eine INI (im gleichen Verzeichnis wie die DB) und löscht diesen nach dem schliessen wieder. Die 2. Instance kann nun aufgrund des Eintrages prüfen, ob die DB bereits geöffnet ist und entsprechend warten. Mfg. Sven Schmidts
Rolf Koch
| Datum:29.05.02 19:38 (webmaster@rokosoft.de) |
Genau wie Sven sagt und als Erweiterung: Von der Quelldatei wird bei jedem User eine Kopie angelegt Beispiel: Original: Daten.txt Wobei diese Kopien direkt beim Öffnen der Anwendung verteilt werden. User 1 : Daten1.txt User 2 : Daten2.txt ..... Nun können die einzelnen User sich an Ihrer Kopie austoben - und nur beim Speichern wird auf die Hauptdatei zugegriffen. If equ$(dateiauf$,"1") 'das wäre Svens Beispiel wenn aus der Ini gelesen wird, daß Datei gerade benutzt wird. HIER IRGENDEIN DIALOGFELD MIT EINER SCHLEIFE ZUM WARTEN else Writeini dateipfad$,"Datei","Geöffnet","1" copy Daten1.txt > dateipfad$ 'Kopie über Originial '(Date1.txt sollte eine angepasste Userdatei sein) Writeini dateipfad$,"Datei","Geöffnet","0" endif Dies alles hat halt den Vorteil, daß nur das Speichern zum Warten zwingt - und nicht wenn einer 10 Min. Daten eingibt. Einfach so als Vorschlag Rolf
Sven Schmidts
| Datum:29.05.02 20:11 (schmidts@flat2serv.de) |
Ich und mein Rolf .... was wäre die Welt nur ohne uns ;)
Jörg Sellmeyer
| Datum:29.05.02 22:56 (joerse@gmx.de) |
Hallo Rolf, Das System kann aber ziemlich in die Hose gehen. Wenn z. B. 3 Leute ihre Kopie bearbeiten sind nach dem speichern immer nur die Änderungen vom letzten "Schreiber" in der Datei. Alle anderen Änderungen vom Vorgänger werden ja wieder überschrieben. Gruß Jörg
Rolf Koch
| Datum:30.05.02 00:24 (webmaster@rokosoft.de) |
Oh ja, stimmt ;) Es war ja auch nur ein Denkanstoß ohne vorher zu testen - aber irgendwelche Sachen gibts ja immer. Wie zum Beispiel anstatt eine Datei eine Ini die je User geschrieben wird und dann die jeweiligen Inieinträge ins Original geschrieben werden o.ä. Das meiste an Problemlösungen (ist halt bei mir so) kommt sowieso mit dem Coden. Es gibt eigentlich keine unumgänglichen Probleme, nur die Frage wie - das ist immer das Problem ;) Rolf
Sven Schmidts
| Datum:30.05.02 08:07 (schmidts@flat2serv.de) |
Klar funktioniert das. Du trägst einen Integer in die Ini ein, z.B. "OpenCount=3". Jede Instance erhöht den Eintrag beim öffnen bzw. setzt ihn runter. Wenn er bei 0 ist, ist die DB zum schreiben bereit. Mfg. Sven Schmidts
carlo keil
| Datum: 30.05.02 11:51 (carlo.keil@web.de) |
Folgender Ansatz hat sich bei mir schon vor vielen Jahren bewährt: Als Vorbereitung die Datenstruktur um das Feld "GESPERRT" ergänzen. Der Datentyp ist beliebig, solange man "0" und "1" reinschreiben kann. Die eigentliche Äktschen kann dann so ablaufen: 1. Datenbank öffnen 2. Auf den gewünschten Datensatz positionieren 3. "GESPERRT" auslesen. Wenn "1", dann Datenbank schliessen(!) und Meldung ausgeben, abwarten oder sonst irgendetwas Vernünftiges tun. Andernfalls weiter mit 4. 4. "GESPERRT" auf "1" setzen und Datensatz sofort(!) schreiben, dann Datenbank schliessen. 5. Datensatz bearbeiten 6. Datenbank öffnen 7. Auf den gewünschten Datensatz positionieren 8. "GESPERRT" auslesen. Wenn "0", dann Meldung ausgeben und irgendetwas Vernünftiges tun. Andernfalls weiter mit 9. 9. "GESPERRT" auf "0" setzen und Datensatz sofort(!) schreiben, dann Datenbank schliessen. ... Für praktische Zwecke ist das, nach meiner Erfahrung mit einstelligen Benutzerzahlen, ausreichend wasserdicht. Wer ganz vorsichtig sein will setzt statt der "1" eine Zufallszahl, die vor dem Speichern des Satzes überprüft wird oder berechnet aus dem Datensatz einen Hashwert und nimmt den. HTH Carlo

| Zurück zur Übersicht