Mehrere Aktualisierungsobjekte verwenden - Index

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu BDE verwenden - 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. Weitere Informationen zum Migrieren von der BDE nach dbExpress finden Sie unter http://www.embarcadero.com/rad-in-action/migration-upgrade-center (EN)

Werden in den zu aktualisierenden Datenmengen mehrere Basistabellen referenziert, müssen Sie mehrere Aktualisierungsobjekte verwenden: eines für jede zu aktualisierende Basistabelle. Weil das UpdateObject der Datenmengenkomponente nur erlaubt, einer Datenmenge jeweils ein Aktualisierungsobjekt zuzuordnen, müssen Sie der Datenmenge die einzelnen Aktualisierungsobjekte zuordnen, indem Sie ihre Eigenschaft DataSet auf den Namen der Datenmenge setzen.

Tipp: Wenn Sie mehrere Aktualisierungsobjekte verwenden, können Sie TBDEClientDataSet statt TClientDataSet mit externem Provider verwenden. Das ist möglich, weil Sie die Eigenschaft UpdateObject der Quelldatenmengen nicht setzen müssen.

Die Eigenschaft DataSet für Aktualisierungsobjekte steht im Objektinspektor zur Entwurfszeit nicht zur Verfügung. Sie können diese Eigenschaft nur zur Laufzeit setzen:

UpdateSQL1.DataSet := Query1;
UpdateSQL1->DataSet = Query1;

Das Aktualisierungsobjekt verwendet diese Datenmenge, um den ursprünglichen und den aktualisierten Feldwert für die Parametersubstitution zu erhalten, und, falls es sich um eine BDE-Datenmenge handelt, die Sitzung und die Datenbank zu ermitteln, die bei der Anwendung der Aktualisierung verwendet werden sollen. Damit die Parametersubstitution korrekt funktioniert, muss die Eigenschaft DataSet die Datenmenge darstellen, die die aktualisierten Feldwerte enthält. Wird die BDE-Datenmenge verwendet, um Aktualisierungen zwischenzuspeichern, ist dies die BDE-Datenmenge selbst. Wird eine Client-Datenmenge verwendet, ist dies eine Client-Datenmenge, die der Ereignisbehandlungsroutine für BeforeUpdateRecord als Parameter bereitgestellt wird.

Wurde das aktualisierte Objekt nicht der Eigenschaft UpdateObject der Datenmenge zugeordnet, werden ihre SQL-Anweisungen beim Aufruf von ApplyUpdates nicht automatisch ausgeführt. Um Datensätze zu aktualisieren, müssen Sie das Aktualisierungsobjekt manuell aus einer Ereignisbehandlungsroutine für Bde.DBTables.TBDEDataSet.OnUpdateRecord heraus aufrufen (wenn Sie die BDE zum Zwischenspeichern von Aktualisierungen verwenden). In der Ereignisbehandlungsroutine müssen mindestens die folgenden Aktionen durchgeführt werden:

  • Falls Sie zur Zwischenspeicherung von Aktualisierungen eine Client-Datenmenge verwenden, müssen Sie sicherstellen, dass die Eigenschaften DatabaseName und SessionName des Aktualisierungsobjekts auf die Eigenschaften DatabaseName und SessionName der Quelldatenmenge gesetzt sind.
  • Die Ereignisbehandlungsroutine muss die Methode ExecSQL oder Apply des Aktualisierungsobjekts aufrufen. Damit wird das Aktualisierungsobjekt für jeden Datensatz aufgerufen, der aktualisiert werden muss. Weitere Informationen über die Ausführung von Aktualisierungsanweisungen finden Sie unter Die SQL-Anweisungen ausführen.
  • Setzen Sie den Parameter UpdateAction der Ereignisbehandlungsroutine auf uaApplied (OnUpdateRecord) oder den Parameter Applied auf True (BeforeUpdateRecord).

Optional können Sie auch eine Datenauswertung, Datenänderung oder andere Operationen ausführen, die von der Aktualisierung der einzelnen Datensätze abhängig sind.

Warnung: Wenn Sie in einer OnUpdateRecord-Ereignisbehandlungsroutine die Methode ExecSQL oder Apply eines Aktualisierungsobjekts aufrufen, sollten Sie darauf achten, nicht die UpdateObject-Eigenschaft auf dieses Aktualisierungsobjekt zu setzen. Andernfalls erfolgt ein zweiter Versuch, die Aktualisierung für die einzelnen Datensätze vorzunehmen.

Siehe auch

Themen