Dataset. Update
Zuletzt geändert: 11.06.2023 10:06

Dataset.Update (iScript) #

procedure Update(Fields, Values [, Options])

Update dient zum Aktualisieren einzelner oder mehrerer Felder der Datenmenge. Dabei spielt es keine Rolle, ob sich die Datenmenge gerade im Editiermodus oder Blättermodus befindet. Falls sich die Datenmenge im Editiermodus befindet, so werden die Daten hinterlegt, aber der Datensatz noch nicht gespeichert.

Fields kann ein einzelner Feldname, mehrere durch Kommata getrennte Feldnamen oder ein Array von einzelnenen Feldnamen sein.

Values kann ein einzelner Wert, ein Array von Werten oder ein Recordset-Objekt sein.

Options ist vom Typ Integer und muss 0 oder 1 sein. Der Unterschied liegt in der Update-Strategie, falls der Datensatz sich nicht im Editiermodus befindet. Bei Option = 0 wird der Datensatz dann direkt im Server aktualisiert und in der Maske neu angezeigt. Bei Option = 1 wird der Datensatz direkt in der Maske in den Editiermodus versetzt, die Änderungen vorgenommen und gespeichert - ähnlich einer Eingabe von Hand.

Zuweisen eines einzelnen Wertes an ein oder mehrere Felder #

Wird als Value ein einzelner Wert - also kein Array - angegeben, so wird dieser in alle angegebenen Felder eingetragen.

dataset.update "Name1", "Firma Müller"
dataset.update "Fibukonto", 10025
dataset.update "Name1, Name2, Name3", "unbekannt"
dataset.update Array("Name1","Name2","Name3"), ""

Zuweisung mehrerer Werte #

Möchte man mehreren Feldern jeweils eigene Werte zuweisen, so gibt man als Values ein Array von Werte an.

'folgende Befehle sind haben den gleichen Effekt:
dataset.update Array("Name1","Name2","Name3"), _
  array("Firma","Müller GmbH","Buchhaltung")
dataset.update "Name1, Name2, Name3", _
  array("Firma","Müller GmbH","Buchhaltung")

Falls mehr Werte angegeben wurden, als es Felder gibt, so werden diese Werte ignoriert. Falls umgekehrt mehr Felder, als Werte angegeben wurden, so werden die fehlenden Felder mit NULL aufgefüllt, was i.A. zu einem Fehler führt.

Zuweisen mehrerer Werte über ein Recordset-Objekt #

Die Werte können auch aus einem Recordset-Objekt bezogen werden. Hierbei gibt es zwei Varianten.

A. Man gibt die gewünschten Feldnamen an #

Die Feldnamen, die übernommen werden sollen, gibt man explizit an - entweder als einzelnen Feldname oder mehrere Feldnamen, wie oben beschrieben. Es wird nun versucht die jeweiligen Felder im Recordset zu finden. Falls eines der Felder nicht vorhanden ist, wird ein Fehler ausgegeben.

Dim sql, rs
sql = "select * FROM dbo.Adresse where Match = 'BOND'"
Set rs = Client.ExecuteSql(sql)
dataset.update "Name1, Name2, Name3, Strasse, PLZ, Ort", RS

'oder verkürzt

dataset.update "Name1, Name2, Name3, Strasse, PLZ, Ort", _
  Client.ExecuteSql("select * FROM dbo.Adresse where Match = 'BOND'")

B. Alle Felder des Recordset werden übernommen #

Als Fields wird hierbei ein einzelnes Sternchen (als Text) angegeben.

Es muss dafür gesort werden, dass das Recordset auch wirklich nur die zu aktualisierenden Felder enthält. Eine Sternchen-Abfrage, wie im vorherigen Beispiel würde dann einen Fehler erzeugen.

Dim sql, rs
sql = "select Name1,Name2,Name3 FROM dbo.Adresse where Match = 'BOND'"
Set rs = Client.ExecuteSql(sql)
dataset.update "*", RS

Komplexeres Beispiel #

Hier werden über die Methode Client.ObjectValues die Anschriftsfelder aus einem Adress-Datensatz ermitteln. Diese werden dann im aktuellen Vorgang (Angebot oder Auftrag) eingetragen.

Const Felder = "Name1,Name2,Name3,Strasse,Land,PLZ,Ort"
Dim AdresseId : AdresseId = Dataset.Values("AdresseId")
dataset.update Felder, Client.ObjectValues("AD",AdresseId,Felder,0)