Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 242945 (4381)
  Suchen
 Zurück zur Übersicht
 AutorThema: Datei zweimal öffnen
Sascha Etzrodt
Datum:29.05.02 08:40 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (schmidts@flat2serv.de) 


Ich und mein Rolf .... was wäre die Welt nur ohne uns ;)


Jörg Sellmeyer
Datum:29.05.02 22:56 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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