SQL-Aktualisierungsanweisungen zusammensetzen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Aktualisierungen mit der BDE zwischenspeichern - Index


Hinweis: Die Borland Database Engine (BDE) ist veraltet und wird nicht mehr weiterentwickelt. Die BDE wird Unicode beispielsweise nie unterstützen. Sie sollten mit der BDE keine neuen Entwicklungen vornehmen. Überprüfen Sie, ob Sie Ihre vorhandenen Datenbankanwendungen nicht von der BDE nach dbExpress migrieren können.

Zur Entwurfszeit können Sie den Update SQL-Editor verwenden, um die SQL-Anweisungen für die Eigenschaften DeleteSQL, InsertSQL und ModifySQL zu schreiben. Wenn Sie nicht den Update SQL-Editor verwenden oder wenn Sie die erzeugten Anweisungen abändern wollen, sollten Sie bei der Entwicklung von Anweisungen zum Löschen, Einfügen und Ändern von Datensätzen in der Basistabelle die folgenden Richtlinien beachten.

Die Eigenschaft DeleteSQL sollte nur eine SQL-Anweisung mit dem DELETE-Befehl enthalten. Die zu aktualisierende Basistabelle muss in der FROM-Klausel angegeben werden. Damit die SQL-Anweisung nur den Datensatz in der Basistabelle löscht, der dem im Aktualisierungszwischenspeicher gelöschten Datensatz entspricht, verwenden Sie eine WHERE-Klausel. In der WHERE-Klausel verwenden Sie einen Parameter für eines oder mehrere Felder, die den Datensatz in der Basistabelle eindeutig identifizieren, der dem zwischengespeicherten Aktualisierungsdatensatz entspricht. Wenn die Parameter denselben Namen wie das Feld haben und ihnen das Präfix "OLD_" vorangestellt ist, erhalten sie automatisch die Werte aus dem entsprechenden Feld aus dem zum Zwecke der Aktualisierung zwischengespeicherten Datensatz. Wenn die Parameter andere Namen haben, müssen Sie die Parameterwerte bereitstellen.

DELETE FROM Inventory I
WHERE (I.ItemNo = :OLD_ItemNo)

Einige Tabellentypen finden den Datensatz in der Basistabelle nicht, wenn die Felder zur Identifizierung des Datensatzes NULL-Werte enthalten. In diesen Fällen schlagen Löschanweisungen für diese Datensätze fehl. Um dies zu kompensieren, fügen Sie eine Bedingung für Felder ein, die NULL-Werte enthalten könnten. Dazu verwenden Sie das Prädikat IS NULL (neben einer Bedingung für einen anderen als einen NULL-Wert). Wenn beispielsweise das Feld FirstName einen NULL-Wert enthalten könnte, sieht das Ganze wie folgt aus:

DELETE FROM Names
WHERE (LastName = :OLD_LastName) AND
  ((FirstName = :OLD_FirstName) OR (FirstName IS NULL))

Die InsertSQL-Anweisung sollte nur eine SQL-Anweisung mit dem INSERT-Befehl enthalten. Die zu aktualisierende Basistabelle muss in der INTO-Klausel angegeben werden. Geben Sie in der VALUES-Klausel eine Liste mit durch Kommas voneinander getrennten Werten an. Haben die Parameter dieselben Namen wie das Feld, erhalten die Parameter automatisch den Wert aus dem zwischengespeicherten Aktualisierungsdatensatz. Wenn die Parameter andere Namen haben, müssen Sie die Parameterwerte bereitstellen. Die Liste der Parameter gibt die Werte für Felder im neu eingefügten Datensatz an. Es muss so viele Wertparameter geben, wie Felder in der Anweisung aufgeführt sind.

INSERT INTO Inventory
(ItemNo, Amount)
VALUES (:ItemNo, 0)

Die Anweisung ModifySQL sollte nur eine SQL-Anweisung mit dem UPDATE-Befehl enthalten. Die zu aktualisierende Basistabelle muss in der FROM-Klausel angegeben werden. Nehmen Sie ein oder mehr Wertzuweisungen in die SET-Klausel auf. Falls Werte in den Zuweisungen der SET-Klausel Parameter sind, die denselben Namen wie Felder haben, erhalten die Parameter automatisch Werte aus den Feldern desselben Namens im aktualisierten Datensatz aus dem Zwischenspeicher. Sie können unter Verwendung anderer Parameter zusätzliche Feldwerte angeben, solange die Parameter nicht denselben Namen haben wie Felder und Sie die Werte manuell bereitstellen. Wie bei der DeleteSQL-Anweisung geben Sie eine WHERE-Klausel an, um den Datensatz in der zu aktualisierenden Basistabelle eindeutig zu identifizieren, wozu Sie Parameter verwenden, die dieselben Namen wie die Felder tragen, und denen das Präfix "Old_" vorausgeht. In der oben gezeigten Aktualisierungsanweisung erhält der Parameter :ItemNo automatisch einen Wert, :Price dagegen nicht.

UPDATE Inventory I
SET I.ItemNo = :ItemNo, Amount = :Price
WHERE (I.ItemNo = :OLD_ItemNo)

Anhand der oben gezeigten SQL-Aktualisierungsanweisung wird nun ein Beispiel betrachtet, in dem der Endbenutzer der Anwendung einen existierenden Datensatz abändert. Der ursprüngliche Wert des Feldes ItemNo ist 999. In einem mit der zwischengespeicherten Datenmenge verknüpften Tabellensteuerelement ändert der Endbenutzer den Feldwert von ItemNo auf 123 und Amount auf 20. Wird die Methode ApplyUpdates aufgerufen, bezieht sich diese SQL-Anweisung auf alle Datensätze der Basistabelle, deren ItemNo-Feld gleich 999 ist, wobei sie den alten Feldwert im Parameter :OLD_ItemNo verwendet. In diesen Datensätzen ändert sie den Feldwert von ItemNo auf 123 (unter Verwendung des Parameters :ItemNo, dessen Wert aus dem Tabellensteuerelement stammt) und Amount auf 20.

Siehe auch