Was ist für änderungsverfolgbarkeit am sinnvollsten?

  • VB.NET
  • .NET 3.5

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von Gottric.

    Was ist für änderungsverfolgbarkeit am sinnvollsten?

    Hallo, ich hab mal ne Frage an euch.

    Ich habe ein Programm was den Inhalt von Textdateien in Textboxen einläd und diese kann man auch wieder abspeichern darüber. Jetzt hätte ich gerne eine Datenbank bzw eine Datei in der ich nachvollziehen kann welche Datei gespeichert wurde und als Text soll man dazuschreiben können warum. Also quasie wo ich eingebe Datei XY und er läd in nen Datagrindview ein alles was mit der Datei passiert ist.
    Jetzt die Frage: Was benutze ich am besten für das umzusetzen?
    Acces- Sql-, oder XML Datenbank?
    Also es wird über mehrere Rechner gearbeitet an dem Programm. Ich könnte aber ne Datei auf einem Nerzwerkpfad bereitstellen auf den alle zentral zugreifen können.
    Hallo

    ​Das kommt ganz darauf an. Wie viele Benutzer werden zugreifen? Hast du einen Server oder einen Rechner zur Verfügung auf welchem MS SQL laufen kann oder nur Netzlaufwerk von z.b. einem NAS?

    ​Wie viele Dateien werden es vermutlich?

    ​Generell ist es hald so das du ja irgendwo abspeichern musst um welche Datei es sich handelt. Speicherst du in der Datenbank das sich die Datei C:\Test\abc.txt nun verändert hat und aus welchem Grund. OK, wenn dann die Infos über diese Datei haben willst schaust du in der DB nach ob für diese Datei Infos vorhanden sind und holst dir diese.

    ​Tja, und was wenn die Datei verschoben wurde? Dann bekommst du keine Infos über die Datei weil in der DB nicht vorhanden. Oder gibt es eine andere Möglichkeit die Datei zuzuordnen? Inhaltlich z.b.

    ​Das sind alles Infos welche du uns nicht gibst, selbst wenn wir dir jetzt einen Vorschlag unterbreiten wird dieser vermutlich nicht zu deinem Problem "passen" denke ich.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    Gottric schrieb:

    was mit der Datei passiert ist.
    Das sehe ich als ungeklärten Punkt. Was verstehst Du darunter? Denn das einfachste wär natürlich, den kompletten Dateiinhalt zu speichern. Lustiger wird's, wenn's um Änderungen geht, die angezeigt werden sollen. Aber welche Art von DB Du verwendest, sollte egal sein. Schließlich klingt es (bisher) so, als ob Du die SQL-Funktionalität dafür nicht (sonderlich) dafür bräuchtest. Sondern nur einen Infospeicher brauchst. Ggf. ließe sich auch ein Versionskontrollsystem dafür zweckentfremden. Für den Fall, dass es nicht eine Patentlösungsvorschlag von den anderen gibt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Sagen wir mal 5 Einträge am Tag maximal. Also die Datenmenge wird wohl nicht so reisig werden.
    Es soll rein, wer, welche Datei und warum. das reicht schon völlig.
    Ne, nicht an die Datei gebunden. Inhaltlich reicht. Einfach eine kleine Datenbank in der ich eintrage, Datei sowieso wurde geändert weil. Soll autark arbeiten von der eigentlichen Datei. Also quasie ein Änderungsjornal wo ich wenn ich will und es jemand eingetragen hat nachlesen kann was mit der Datei passiert ist. Soll optional sein dieses eintragen in die Datenbank.
    Ich könnte auch nen sql bereitgestellt bekommen sagt unsere IT, aber denke das ist zu groß für mein kleines Tool.
    Ich kann die XML ja auch auf einem Nerzwerkpfad ablegen auf den jeder Rechner zugriff hat.
    oder ist xml nicht das geeignete dafür?

    @VaporiZed Ich will jetzt nicht die einzelne Datei mit der vorgänger Datei abgleichen und Änderungen slebst auslesen und abspeichern. Nur ein Feld in dem ich eintrage was ich gemacht habe und warum. Das reicht schon völlig aus. Hab mit das so vorgestellt wie im Anhang
    Bilder
    • Data.PNG

      2,77 kB, 543×95, 44 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gottric“ ()

    Hallo

    Gottric schrieb:

    Ne, nicht an die Datei gebunden. Inhaltlich reicht. Einfach eine kleine Datenbank in der ich eintrage, Datei sowieso wurde geändert weil.


    Sehe ich problematisch. Wie kannst du denn dann die Datensätze zuweisen? Dann brauchst du ja innerhalb der Textdatei eine ID oder ähnliches. Aber das überlass ich jetzt mal dir. Du meinst das bekommst du hin.

    aber denke das ist zu groß für mein kleines Tool.

    Sicher? Du hast dann bei 200 Arbeitstagen im Jahr nach 5 Jahren bereits 5000 Datensätze verteilt auf zig hunderte oder sogar tausende xml`s. Viel spass bei einer Wartung. :S

    Ich würde dir SQLite empfehlen. Geht ohne Server und es können mehrere Benutzer gleichzeitig darauf zugreifen. So in der Art. Klein aber Fein.

    Trotzdem weis ich noch nicht wie du die Files dann zuorndnen willst.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Sorry, aneinander vorbeigeredet. Die Datei existiert nur einmal. Wenn ich sage Datei XY in meiner DB, dann kann er mir nur die anzeigen und ich weis welche geändert wurde.
    Also in einer XML wird für jeden Eintrag eine neue XML-Datei angelegt.
    Ich dachte das sei sowas wie ne Excel Tabelle in der ich dann schreibe und lese, sorry.

    So soll es ausehen und wenn ich dann eingebe Datei 742 an Roboter 3.6 von mir aus soll er mir die Zeilen dazu reinladen
    Bilder
    • Data.PNG

      9,8 kB, 765×193, 43 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gottric“ ()

    Hallo

    Wir reden wirklich aneinander vorbei.
    Mir ist klar das jeder Datei 1x existiert. Gut. Angenommen DU öffnest nun eine Datei, sagen wir "text.txt" in der ist irgendein Text enthalten welchen du leicht abänderst.
    Die Datei liegt z.b. auf C:\Files\text.txt.
    Du änderst den Text und speicherst in die Datenbank OK


    ID
    Filename
    ChangedBy
    ChangedAt
    Reason
    1
    C:\Files\text.txt
    Admin
    2017-07-10 15:30:12
    Absatz hinzugefügt

    ​Jetzt hast du in der DB oder wo auch immer stehen das sich die Datei C:\Files\text.txt am ..... von ..... geändert wurde weil.....

    ​Jetzt verschiebt ein anderer User die Datei, oder er ändert diese auf "text_1.txt" diese um.

    Wenn du nun die Infos haben willst über die Änderungen von "Text_1.txt" wirst du in der DB oder sonst wo nix finden.

    ​Ich hoffe nun hast du mich verstanden.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    Gottric schrieb:

    Also in einer XML wird für jeden Eintrag eine neue XML-Datei angelegt.
    Ich dachte das sei sowas wie ne Excel Tabelle in der ich dann schreibe und lese, sorry.
    Beides mal: nein.
    XML ist ähnlich einer Baumstruktur. nicht wie eine Tabelle. Was man aus der Baumstruktur macht, ist dann wieder eine andere Sache. Zum anderen kann man in einer XML-Datei auch sehr viele Einträge speichern, auch die von Dir gezeigten Daten.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Achso, jetzt versteh ich. Das kann ja egal sein was mit der eigentlichen Datei die geändert wurde passiert ist. Ich möchte ja nur ne Datenbank haben in der die sachen eingetragen sind welche ich auf dem Tool eintrage. Wenn jemand dann die originaldatei löscht ist egal, soll ja ohnehin optional sein.
    Also nen Datenbank in der ich diese eintragungen wie in Post#6 angehangen abspeichern und wieder einlesen kann. egal was mit der eigentlich abgespeicherten Datei passiert.
    verstehst wie ich das meine?

    @VaporiZed. Ok, lese ich mir gleich mal durch, danke.

    Was ist für das abspeichern und auslesen des Datagrindview den ich habe das beste?
    eignet sich XML da? oder gibt es dafür ne andere/bessere Lösung mein kleines Tool umzusezten?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gottric“ ()

    OK, in diesem Fall würde ich dir trotzdem SQLite empfehlen da jetzt ein SQL Server wirklich Overloaded sein wird.
    ​Du kannst es natürlich auch mit XML machen. In diesem Fall würdest du dann eine XML je txtFile anlegen. Und in jeder XML wären dann x Einträge (für jede Änderung einer).

    Das einfachste ist XML, das performanteste wäre DB. XML kannst du auch Probleme bekommen bei gleichzeitigen Zugriff durch mehr als einen User.

    ​PS: ich weis nicht ob es eine Option wäre, so würde man alle Probleme aus dem Weg räumen, wenn die TextFiles von dir kommen, warum nicht den Text auch in der DB speichern?
    ​Dann hast du da keine Probleme und niemand der nicht die Rechte hat kann da rumpfuschen.

    Grüße
    ​Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    Nofear23m schrieb:

    In diesem Fall würdest du dann eine XML je txtFile anlegen
    Echt? Warum? Vielleicht seh ich grad da den Vorteil nicht, denn ich hätte alles in eine XML gehauen. Wo sind da die absehbaren Probleme?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Wo sind da die absehbaren Probleme?


    Wie schon gesagt, 5 Files pro Tag mit 200 Arbeitstagen/Jahr sind das dann schon 5000 Files.
    Wenn ich jetzt von 3-4 Einträgen ausgehe sind wir bei 20000 Knoten im XML.

    Ich weis nicht. Für die Wartung auch schlecht. Wenn ich in 2 Jahren bereinigen möchte kann ich ganz einfach per Script alle XML`s zu denen es keine txt gibt einfach löschen lassen ohne jetzt an einer riesigen XML Hand anlegen zu müssen.

    Ist jetzt meine Einschätzung, ich habe noch nie probiert was performanter wäre. Aber auch hier tendiere ich eher zu kleinen Files als einem großen. Aber ich muss gestehen das ich noch nicht so viel mit größeren XML`s zu tun hatte da ich eine DB fast immer vorziehe.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Also ich kenn mich damit ja überhaupt nicht aus.
    Aber wie ich das so rauslese ist XML das geeigneste für meine Vorhaben?
    Wenn jetzt mehrer Menschen gleichzeitig dort was eintragen ist natürlich doof. Kann ich das nicht vorher abfragen, sind wie gesagt nur 5 Rechner, wenn die XML gerade geöffnet ist dass man dann halt 2 min warten muss beis sie wieder geöffnet werden kann. das ist jetzt nicht so wild.
    Aber ich lese ja auch gerade erst wie das funktioniert mit der XML, vielleicht geht das ja auch garnicht wie ich glaube.
    ​Aber wie ich das so rauslese ist XML das geeigneste für meine Vorhaben?

    ​Kommt drauf an. Ich persönlich mag XML nicht. Kannst aber ruig machen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Hallo

    Sorry, hatte ganz vergessen auf die Frage einzugehen:

    Gottric schrieb:

    Kann ich das nicht vorher abfragen, sind wie gesagt nur 5 Rechner


    ​Abfragen wird evtl. auch gehen. Aber wenn du versuchst die XML zu schreiben obwohl diese gesperrt ist weil jemand anderes schreibt bekommst du eine Exception welche du abfangen könntest.

    ​Aber bei 5 Usern wird das vermutlich sehr selten vorkommen da das schreiben sehr schnell geht und da müssten 2 User innerhalb von ich sage mal 50 ms gleichzeitig etwas schreibe wollen.
    ​Das schlimmere Problem ist eher, was wenn die Textdatei von 2 Usern geändert wird? Dann überschreibt der zweite User komplett die Änderungen des ersten. Wer zuletzt speichert gewinnt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Ja, aber denk mal nach. Willst du es nicht besser machen?
    ​Wenn du XML`s hast, warum speicherst du dann nicht in der XML auch gleich einen Wert "IsOpenByUser" hinein.
    ​Wenn jemand anderes Die Datei laden will schaust du in der XML nach ob diese Jemand offen hat.
    Quasi:
    Die Datei ist durch XYZ in Bearbeitung, sind Sie sicher das Sie die Datei öffnen möchten? JA/NEIN

    Wäre doch lässig oder? Und viel Sicherer.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Ggf. overkill, aber Stichwort DataSet. Leichtes Abspeichern und Laden einer XML, einfache Anzeige im DGV. Siehe Tutorial vom EdR, Stichwort »vier Views«.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.