Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Beste Möglichkeit für Datenaustausch für ein Programm (https://www.delphipraxis.net/131189-beste-moeglichkeit-fuer-datenaustausch-fuer-ein-programm.html)

cyanroot 20. Mär 2009 00:57


Beste Möglichkeit für Datenaustausch für ein Programm
 
Hallo Leute,

ich habe eine Frage, ich hoffe ihr könnt mir helfen ;).
Mein Programm macht simple Internet Einwahlprozeduren, also Laufwerke mounten, meine Clients per RDP verbinden usw.

Zurzeit lese ich die Informationen aus .txt Dateien aus. Das läuft ganz gut, aber ich habe Angst, dass es nicht mehr funktioniert, wenn mehrere Freunde damit gleichzeitig arbeiten (die .txt liegt dann auf einem Server). Es wird dauernd in diese Textdateien geschrieben (ob die Verbindung erfolgreich war und das Datum, zum Beispiel).

Ich wollte Fragen, welche Methode dafür am besten ist? Mit INI kenne ich mich nicht aus und Datenbanken auch nicht.

Ich danke für jede Hilfe ;).

jaenicke 20. Mär 2009 02:44

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
INI-Dateien würden ja nichts ändern, das sind ja nur spezielle Textdateien.

Ein Datenbankserver würde parallele Zugriffe ermöglichen. Wenn es darum geht zentral Daten zu speichern, dann wäre das eine gute Lösung.

Ein direkter Datenaustausch zwischen den Programmen wäre vielleicht auch möglich, je nachdem wozu die Daten dann verwendet werden sollen. Ich habe nicht so richtig verstanden was das Programm eigentlich macht und wofür dann Informationen zentral gespeichert werden müssen. Die genannten Aufgaben hören sich eigentlich ja eher clientseitig an.

Um Fehlermeldungen zu protokollieren wäre auch ein Webserver mit einem PHP-Skript denkbar, das auf eine Datenbank zugreift. Es gibt viele denkbare Lösungen, je nachdem.

cyanroot 20. Mär 2009 02:55

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Würde es denn Probleme machen, wenn 10 Leute auf eine txt Datei zugreifen? Und sagen wir alle 10 sekunden jemand was neues in der txt abspeichert? Das wäre z.B. eine Notiz über einen bestimmten Server.
Würde das schon Probleme machen?

jaenicke 20. Mär 2009 03:35

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Sicher gibt das Probleme. Denn in die selbe Datei kann nicht von verschiedenen Seiten aus gleichzeitig geschrieben werden.

Genau dafür braucht man dann ein Programm (einen Server, zum Beispiel einen Datenbankserver), das die entsprechenden Anfragen verarbeitet und in die Datei schreibt.

cyanroot 20. Mär 2009 03:51

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Welche Probleme können denn entstehen? Weil die Wahrscheinlichkeit, dass 2 oder mehr Leute GLEICHZEITIG auf die selbe txt schreibend zugreifen ist sehr gering.

jaenicke 20. Mär 2009 03:55

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Es gibt eben Fehler beim Dateizugriff. Solange du die entsprechend abfängst, funktioniert das, aber es ist keine gute Lösung. Und du müsstest eben Schreibzugriffe entsprechend wiederholen bis sie klappen.

Wenn du das Programm nur selbst verwendest, dann ist das deine Sache. Aber für ein Programm, das veröffentlicht werden soll, wäre es keine akzeptable Lösung.

cyanroot 20. Mär 2009 04:00

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Leider kann ich bis jetzt nur aus txt's auslesen und abspeichern... Datenbanken wär viel zu gross für so ein kleines Projekt. Gibt es da noch eine Möglichkeit?

jaenicke 20. Mär 2009 04:13

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Ein eigenes Serverprogramm, an das du die Daten sendest.

gsh 20. Mär 2009 07:08

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Oder du snycs deine Programme mit einem Mutex. Hier im Forum suchenCreateMutex

Im Prinzip:
Mutex erstellen -> wenn er schon existiert -> warten und dann noch mal veruschen
wenn er nicht exestiert -> in datei schreiben
Datei schliessen
Mutex schliessen

cyanroot 20. Mär 2009 10:38

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Momemt mal, aber das Prinzip habe ich ja jetzt auch. Die Daten werden in eine Memo geladen, jemand verändert den Inhalt und speichert. Dabei werden die Lines der Memo in eine notes.txt abgespeichert. Was sollte denn daran nicht gehen?

jaenicke 20. Mär 2009 10:51

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Zitat:

Zitat von cyanroot
Momemt mal, aber das Prinzip habe ich ja jetzt auch. Die Daten werden in eine Memo geladen, jemand verändert den Inhalt und speichert. Dabei werden die Lines der Memo in eine notes.txt abgespeichert. Was sollte denn daran nicht gehen?

So funktioniert das allerdings gar nicht...

Überleg mal: Eine Instanz des Programms lädt den Inhalt. Kurz danach lädt eine andere diesen ebenfalls. Jetzt wird in beiden Instanzen der Inhalt verändert.
Jetzt speichert eine der beiden Instanzen die Datei. Aber was passiert, wenn jetzt die zweite Instanz speichert?
Die Änderungen der ersten Instanz sind dann weg, denn die Datei wurde ja zum Ändern geladen bevor die erste Instanz ihre Änderungen gespeichert hat...

Die wirklich einzige Möglichkeit sowas überhaupt so zu machen wäre, wenn die Datei direkt zum Schreiben geöffnet, sofort geändert und sofort wieder geschlossen wird.

cyanroot 20. Mär 2009 12:25

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Die Änderung wird aber sofort in die Datei gespeichert und neu in alle Instanzen geladen. So müsste es doch gehen?

jaenicke 20. Mär 2009 13:06

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Das neu laden ist der Punkt: Woher wollen die anderen Instanzen das wissen? Eine Benachrichtigung über Änderungen gibt es im Netzwerk nicht, das funktioniert nur lokal.
Zudem gehen dann die gerade bearbeiteten Änderungen der anderen Instanzen verloren, die in dem Memo gerade getippt stehen, wenn du das Memo mit einer Änderung überschreibst.

Wie gesagt: Für deine persönlichen Zwecke mag es so ausreichen, aber es gibt einige schwerwiegende Probleme. Für eine Veröffentlichung oder die Verwendung in einer Firma wäre dieses Vorgehen inakzeptabel.

cyanroot 20. Mär 2009 13:37

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Also die Programm-exe liegt bei mir aufm Server (auch die .txt's) und im lokalen Netzwerk greifen ein paar Leute drauf zu, somit leigt die .txt auch zentrail. Geht's so auch nicht? Danke.

jaenicke 20. Mär 2009 13:49

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Genau darum geht es doch. Ich habe den Ablauf doch erklärt.

Überleg doch einmal selbst was passiert, wenn die einzelnen Teile des Zugriffs parallel ablaufen.

Oder wenn du dir das nicht vorstellen kannst :shock: , dann probiere es eben aus. Es passiert ja genauso, wenn du es lokal mit zwei Instanzen ausprobierst.
Du musst während der Bearbeitung z.B. eine andere Instanz des Programms starten und dort etwas bearbeiten. Jetzt speichere beides und du siehst, dass das schief geht.

shmia 20. Mär 2009 14:53

Re: Beste Möglichkeit für Datenaustausch für ein Programm
 
Man könnte die zentrale Datei exklusive sperren, kurz etwas schreiben und dann wieder schliesen.
http://www.delphipraxis.net/internal...ct.php?t=62072
Diese Technik funktioniert zuverlässig auch bei vielen Arbeitsstationen wenn die Schreib- und Leseaktionen kurz und relativ selten sind.
Der Fileserver selbst stellt dann den Mutex dar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz