Hi,
Nach allem was du da schreibst, scheinen aber
Concurrency-Probleme bei dieser Technik sprichwörtlich
„vorpgrammiert zu sein“.
Es gibt in der Tat ein erhöhtes Risiko, dass die Daten, die jemand sieht und lokal ändert, auf dem Server schon lange nicht mehr aktuell sind und munter geändert werden kann, bis die Daten schlussendlich am Server landen. ApplyUpdates() läuft dann entweder einfach schief (wenn z.B. ein Update auf einen DS erfolgen soll, der zwischenzeitlich gelöscht wurde) oder der letzte überschreibt einfach. Diese Gecache gefällt mir auch nicht, deswegen verwende ich lieber bidirektionale Queries und benutze eine eigene Technik zur Sperrung von Datensätzen, immer auf einzelne Eingabeformulare bezogen.
Der Sinn der ClientDataSets ist die serverseitigen Locks während einer Transaktion zu verringern, indem diese eine möglichst kurze Zeit dauern, nämlich nur während des Schreibvorgangs. Nur so kann auch die Benutzung eines unidirektionalen Systems funktionieren. Auf die Query reduziert ist DBExpress eine Zumutung.
die verbindungslosen
„offline“ CLient-DataSets gefallen mir bei ADO.NET eigentlich
auch nicht so deswegen…
.NET programmiere ich nicht, aber bei ‚offline-ClientdataSet‘ sträuben sich meine MultiTier-Haare Ohne eine zuverlässige Methode, die Gültigkeit der Daten für jeden Client zu garantieren, kommt mir das reichlich unsicher vor. Die DB-Komponenten von Delphi mag ich sowieso nicht verwenden.
Ciao,
Rudy