Announcement

Collapse
No announcement yet.

elegante Lösung zum Speichern gesucht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • elegante Lösung zum Speichern gesucht

    Hallo Gemeinde,

    ich suche für folgendes Problem eine Lösung:
    mit einer IBSQL Abfrage wird ein Stringgrid gefüllt. Nun wird ein weiterer Datensatz in dies Grid eingegeben, bzw. bestehende Datensätze geändert. Die Frage ist, wie speichert man die geänderten/neuen Datensätze mit möglichst wenig Overhead.
    Ich möchte die Verwendung von IBDataset, DBGrid, etc. verzichten.
    Versucht habe ich dies: Schleife über das Grid laufen lassen, dabei jeden Eintrag in der DB mittels SQL-Abfrage auf Vorhandensein prüfen; wenn vorhanden, dann UPDATE, wenn nicht, dann INSERT. Bei kleinen Datenbeständen ist das sicher kein Problem, bei einigen tausend Datensätzen, glaube ich aber, dass die Methode sicher ziemlich langsam ist, insbesondere, wenn ca. 30 User an der DB hängen.

    Wer hat eine Idee?

    Danke für's "Mitbrainen"

    Gruß
    Uwe

  • #2
    Hallo Uwe,

    ich sehe zwei Möglichkeiten. Entweder Du schreibst bei jeder Änderung / jedem neuen Datensatz die Daten sofort wieder in die DB. Oder Du liest die Datensätze in Objekte. Daraus befüllst Du das SG und trägst in diesen Objekten die Änderungen des Users ein. In den Objekten solltest Du eine Eigenschaft mitführen, ob dieses geändert wurde. Am Ende dann einfach nur durch die Objektliste iterieren und die Änderungen in der DB eintragen.

    Grundsätzlich sehe ich bei beiden Vorgehensweisen allerdings ein Problem mit der Datenkonsistenz. Wie willst Du es handhaben, wenn mehrere Leute den gleichen Datensatz geändert haben?

    Grüße Jochen

    Comment


    • #3
      Hallo Jochen,

      erst mal vielen Dank für Deine Idee.

      Das Problem mit der Datenkonsistenz sehe ich auch, habe aber umsoweniger eine Lösung dafür parat.

      Wie hat man denn solche Probleme in Zeiten als es noch keine Datenbank-Komponenten gab gelöst? Ist ggf. ein Event-Trigger eine Lösung - so in der Form, dass wenn ein DS in die DB geschrieben wird(Commit) eine Nachricht an die Applikation gesendet wird, dass der DS in SG gesperrt ist, weil in Bearbeitung durch einen anderen User. Wie machen denn die DB-Komponenten das?

      Ich will sicher nicht das Rad neu erfinden, sondern einfach progammieren. Soll heissen, alles was die Applikation "einbremst" vermeiden.

      Gruß
      Uwe

      Comment


      • #4
        Hab mir gerade mal die Interbase-Komponenten angesehen und wüßte nicht, wo man dort den benötigten Isolations-Level einstellen könnte, respektive wie man damit Zeilen in einer Tabelle sperren kann, damit kein anderer diese DS ändern kann.

        Im Zweifelsfall, die Originaldaten ebenfalls im Objekt belassen und vor dem Update prüfen, ob diese zwischenzeitlich geändert wurde. Wenn ja, den Anwender entscheiden lassen...

        Grüße Joe

        Comment

        Working...
        X