Daten von der Quelldatenmenge oder dem Quelldokument abrufen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Eine Client-Datenmenge mit einem Provider verwenden


Client-Datenmengen können steuern, wie sie ihre Datenpakete von einem Provider abrufen. Standardmäßig laden sie alle Datensätze von der Quelldatenmenge. This is true whether the source dataset and provider are internal components (as with TBDEClientDataSet,'TSimpleDataSet, and TIBClientDataSet), or separate components that supply the data for TClientDataSet.

Mithilfe der Eigenschaften PacketRecords und FetchOnDemand legen Sie fest, wie die Client-Datenmenge Datensätze abruft.

Inkrementelles Abrufen

Durch Änderung der Eigenschaft PacketRecords legen Sie fest, ob die Client-Datenmenge Daten in kleineren Mengen abrufen soll. PacketRecords legt entweder fest, wie viele Datensätze gleichzeitig abgerufen werden, oder den Typ der Datensätze, die zurückgegeben werden sollen. Standardmäßig ist PacketRecords auf -1 gesetzt, d.h. alle verfügbaren Datensätze werden gleichzeitig abgerufen – entweder wenn die Client-Datenmenge zum ersten Mal geöffnet wird, oder wenn die Anwendung explizit GetNextPacket aufruft. Ist PacketRecords gleich -1, muss die Client-Datenmenge, nachdem sie zum ersten Mal Daten abgerufen hat, nie wieder Daten abrufen, weil ihr bereits alle vorhandenen Datensätze zur Verfügung stehen.

Um die Datensätze in kleinen Blöcken zu übertragen, setzen Sie PacketRecords auf die Anzahl der Datensätze, die jeweils abgerufen werden sollen. Die folgende Anweisung beispielsweise setzt die Größe der einzelnen Datenpakete auf zehn Datensätze fest:



 ClientDataSet1.PacketRecords := 10;



 ClientDataSet1->PacketRecords = 10;



Diese Vorgehensweise beim Abrufen von Datensätzen in Blöcken bezeichnet man auch als "inkrementelles Abrufen". Client-Datenmengen verwenden inkrementelles Abrufen, wenn PacketRecords größer Null ist.

Um die jeweils nächsten Datensätze abzurufen, ruft die Client-Datenmenge GetNextPacket auf. Neu abgerufene Pakete werden am Ende der bereits in der Client-Datenmenge befindlichen Daten angefügt. GetNextPacket gibt als Ergebnis die Anzahl der abgerufenen Datensätze zurück. Ist der Rückgabewert gleich PacketRecords, ist das Ende der verfügbaren Datensätze noch nicht erreicht. Ist der Rückgabewert größer 0, aber kleiner als PacketRecords, wurde beim Abrufen der letzte Datensatz erreicht. Gibt GetNextPacket den Wert 0 zurück, stehen keine weiteren Datensätze zum Abrufen zur Verfügung.

Warnung:  Das inkrementelle Abrufen funktioniert nicht, wenn Sie Daten von einem externen Provider auf einem statuslosen Anwendungsserver abrufen. Informationen zum inkrementellen Abrufen von Daten bei Verwendung eines statuslosen externen Datenmoduls finden Sie unter Statusinformationen in Remote-Datenmodulen unterstützen.

Anmerkung:  Mit PacketRecords können Sie auch Metadaten-Informationen über die Quelldatenmenge abrufen. Um Metadaten abzurufen, setzen Sie PacketRecords auf 0.

Abrufen nach Bedarf

Das automatische Abrufen von Datensätzen wird durch die Eigenschaft FetchOnDemand gesteuert Ist FetchOnDemand gleich True (Voreinstellung), ruft die Client-Datenmenge automatisch Datensätze nach Bedarf ab. Um zu verhindern, dass die Client-Datenmenge automatisch Datensätze nach Bedarf abruft, setzen Sie FetchOnDemand auf False. In diesem Fall muss die Anwendung explizit GetNextPacket aufrufen, um Datensätze abzurufen.

Beispielsweise können Anwendungen, die sehr große schreibgeschützte Datenmengen darstellen müssen, FetchOnDemand deaktivieren, um auf diese Weise sicherzustellen, dass die Client-Datenmengen nicht versuchen, mehr Daten zu laden, als in den Speicher passen. Zwischen einzelnen Abrufen gibt die Client-Datenmenge ihren Puffer mithilfe der Methode EmptyDataSet frei. Dieser Ansatz funktioniert jedoch nicht zufriedenstellend, wenn der Client Aktualisierungen auf den Server zurückschreiben muss.

Der Provider steuert, ob die Datensätze in den Datenpaketen BLOB-Daten und verschachtelte Detail-Datenmengen enthalten. Schließt der Provider diese Informationen aus Datensätzen aus, veranlasst die Eigenschaft FetchOnDemand die Client-Datenmenge, BLOB-Daten und Detail-Datenmengen automatisch nach Bedarf abzurufen. Ist FetchOnDemand gleich False und lässt der Provider keine BLOB-Daten und Detail-Datenmengen für Datensätze zu, müssen Sie die Methode FetchBlobs oder FetchDetails explizit aufrufen, um diese Daten abzurufen.

Siehe auch