|
Datensätze speichern |
|
|
Letzte Änderung 24.02.2010 In Datenbank schreiben Für dieses Beispiel benötigen Sie das Beispiel-Projekt fahrzeuge.xdev.
Mit der Anweisung
» Datenquelle und Ziel im Assistenten festlegen «
» Verschiedene Füll-Methoden « Bei Füll-Methode können Sie festlegen, wie die Datensätze der Virtuellen Tabelle in die Datenbank-Tabelle eingefügt werden sollen, einfügend (Insert) oder aktualisierend (Update). Mit der Option Löschen (Delete) lassen sich Daten sogar in der Datenbank-Tabelle löschen. Bei Bedingung definieren können Sie mit Hilfe einer Bedingung festlegen, welche Datensätze aktualisiert, bzw. gelöscht werden sollen.
» Datenfelder angleichen « Beim Schreiben von Datensätzen erhält die Datenbank-Tabelle alle Datensätze von der Virtuellen Quell-Tabelle. Hier verknüpfen Sie die Felder der Virtuellen Quell-Tabelle mit den dazugehörigen Datenfeldern der Datenbank-Tabelle. I.d.R. ist die Virtuelle Tabelle ein exaktes Abbild der Datenbank-Tabelle, sodass die Datenfeld-Namen identisch sind. Wenn Sie die Daten jedoch in eine andere Datenbank-Tabelle übertragen möchten, dann müssen Sie hier die Datenfeld-Namen entsprechend umbenennen. Das ID-Feld bleibt i.d.R. frei, da die ID von der Datenbank vergeben wird.
» Konkurrierende Zugriffe - Locking « Beim Speichern von Datensätzen kann es theoretisch zu konkurrierenden Zugriffen kommen, vor allem in großen Datenbank-Anwendungen. Dies ist dann der Fall, wenn mehrere Anwender denselben Datensatz zur gleichen Zeit bearbeiten oder speichern möchten. Datenbanken können bei "gleichzeitigem" Speichern Zeitunterschiede im Mikrosekunden-Bereich festzustellen, sodass das System immer in der Lage sein wird, eine Reihenfolge für die eingehenden Schreibfunkionen festzulegen. Die Problematik besteht vielmehr darin, dass nur die Änderung des Anwenders erhalten bleibt, dessen Speichervorgang als letztes ausgeführt wird. Alle anderen Änderungen werden überschrieben und gehen verloren. Dazu kommt, dass die betroffenen Anwender gar nicht bemerken, dass ihre Änderungen fast zeitgleich wieder überschrieben wurden. Dadurch kann die Qualität der Anwendung erheblich beeinträchtigt werden und erfordert einen unnötig hohen Aufwand für Kontrollen und ggf. Nachbearbeitungen.
Für diese Problematik gibt es grundsätzlich 2 verschiedene Lösungsansätze. Beim sog. optimistischen Verfahren wird ein zur Bearbeitung anstehender Datensatz markiert, z.B. mit einer Versionsnummer, die jeweils um den Wert 1 erhöht wird, oder mit Hilfe eines eindeutigen Zeitstempels (Timestamp). Vor dem Speichern kann dann nochmals überprüft werden, ob sich die Versionsnummer oder der Timestamp während der Bearbeitung geändert hat. Evt. Veränderungen können ggf. angezeigt und berücksichtigt werden. Ansonsten kann der editierte Datensatz sorglos gespeichert werden. Für eine Markierung müssen Sie die entsprechenden Daten lediglich mit einem Datenfeld erweitern.
Beim sog. pessimistischen Verfahren wird der zur Bearbeitung anstehende Datensatz für alle anderen, zumindest für schreibenden Zugriffe gesperrt. Dies kann mit Hilfe eines Flags (z.B. 0 = frei, 1 = gesperrt) oder mit Boolischen Werten erfolgen. Auch die Speicherung der Anwender-ID ist denkbar. Durch die entsprechende Information können andere Anwender sogar darüber informiert werden, dass der jeweilige Datensatz im Moment gerade bearbeitet wird und ggf. sogar von wem. Das große Problem bei diesem Verfahren ist jedoch, dass es dabei zu sog. Dead-Locks kommen kann, z.B. wenn ein Anwender vergisst, den bearbeiteten Datensatz wieder frei zu geben oder wenn es zu einem Absturz des Anwender-Rechners kommt, o.Ä. Eine mögliche Lösung kann u.A. ein Timeout-Szenario sein.
XDEV 2 stellt für die Lösung von konkurrierenden Zugriffen keine fertige Pauschallösung zur Verfügung.
» Alternative: Virtuelle- mit Datenbank-Tabelle synchronisieren « Daten in einer Virtuellen Tabelle lassen sich alternativ auch mit der Methode
Basiswissen: Virtuelle Tabellen, Transaktionen
|