Extraction des données dans l'ensemble de données ou le document source

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation d'un ensemble de données client avec un fournisseur


Les ensembles de données client peuvent contrôler comment ils vont extraire les paquets de données d'un fournisseur. Par défaut, un ensemble de données client extrait tous les enregistrements de l'ensemble de données source. Cela est vrai si l'ensemble source et le fournisseur sont des composants internes (comme avec TBDEClientDataSet, TSimpleDataSet et TIBClientDataSet), ou des composants séparés qui fournissent les données au TClientDataSet.

Vous pouvez changer la façon dont l'ensemble de données client lit les enregistrements, en utilisant les propriétés PacketRecords et FetchOnDemand.

Extractions incrémentales

En changeant la propriété PacketRecords, vous pouvez demander que l'ensemble de données client lise les données en fragments plus petits. PacketRecords spécifie la quantité d'enregistrements à extraire à la fois et le type des enregistrements à renvoyer. Par défaut, PacketRecords vaut -1, ce qui signifie que tous les enregistrements disponibles sont extraits à la fois, que ce soit à la première ouverture de l'ensemble de données client ou lorsque l'application appelle explicitement GetNextPacket. Lorsque PacketRecords vaut -1, l'ensemble de données client n'extrait pas de données supplémentaires après la première extraction des données, car il dispose de tous les enregistrements disponibles.

Pour extraire les enregistrements par petits lots, affectez à PacketRecords une valeur correspondant au nombre d'enregistrements voulu. Par exemple, l'instruction suivante fixe la taille de chaque paquet de données à dix enregistrements :

ClientDataSet1.PacketRecords := 10;
ClientDataSet1->PacketRecords = 10;

Ce processus d'extraction d'enregistrements par petits lots est appelé "extraction incrémentale". Les ensembles de données client utilisent l'extraction incrémentale lorsque PacketRecords est supérieur à zéro.

Pour lire chaque lot d'enregistrements, l'ensemble de données client appelle GetNextPacket. Les paquets extraits sont ajoutés à la fin des données se trouvant déjà dans l'ensemble de données client. GetNextPacket renvoie le nombre d'enregistrements extraits. Si la valeur renvoyée est équivalente à la valeur de PacketRecords, c'est que tous les enregistrements disponibles n'ont pas été traités. Si la valeur renvoyée est supérieure à 0 mais inférieure à PacketRecords, c'est que le dernier enregistrement a été atteint durant l'opération d'extraction. Si GetNextPacket renvoie 0, c'est qu'il n'y a plus aucun enregistrement à extraire.

Avertissement :  L'extraction incrémentale ne fonctionne pas si les données sont extraites d'un fournisseur distant situé sur un serveur d'applications sans état. Voir Gestion des informations d'état dans les modules de données distants pour plus d'informations sur l'utilisation de l'extraction incrémentale avec les modules de données distants sans état.

Remarque :  La propriété PacketRecords peut aussi être utilisée pour extraire des informations métadonnées sur l'ensemble de données source. Pour extraire des informations métadonnées, PacketRecords doit valoir 0.

Extraction à la demande

L'extraction automatique d'enregistrements est contrôlée par la propriété 'FetchOnDemand. Lorsque FetchOnDemand vaut True (la valeur par défaut), l'ensemble de données client lit automatiquement les enregistrements en fonction des besoins. Pour empêcher l'extraction automatique des enregistrements, mettez FetchOnDemand à False. Si FetchOnDemand est à False, l'application doit appeler explicitement GetNextPacket pour extraire des enregistrements.

Par exemple, les applications qui doivent représenter des ensembles de données très volumineux accessibles en lecture seulement peuvent désactiver FetchOnDemand afin que les ensembles de données client n'essaient pas de charger plus de données que la mémoire ne peut en contenir. Entre les extractions, l'ensemble de données client libère sa mémoire cache à l'aide de la méthode EmptyDataSet. Cette approche, toutefois, ne fonctionne pas très bien lorsque le client doit renvoyer les mises à jour au serveur.

Le fournisseur contrôle si les enregistrements figurant dans les paquets de données comprennent des données BLOB et des ensembles de données détail imbriqués. Si le fournisseur exclut cette information des enregistrements, la propriété FetchOnDemand oblige l'ensemble de données client à extraire automatiquement les données BLOB et les ensembles de données détail au fur et à mesure des besoins. Si FetchOnDemand vaut False, et si le fournisseur ne contient pas de données BLOB ni d'ensembles de données détail avec les enregistrements, vous devez appeler explicitement la méthode FetchBlobs ou FetchDetails pour extraire ces informations.

Voir aussi