Actualisation des enregistrements

De RAD Studio
Aller à : navigation, rechercher

Remonter à Transmission de paramètres à l'ensemble de données source


Les ensembles de données client manipulent une photographie mémorisée des données de l'ensemble de données source. Si l'ensemble source représente un serveur de base de données, au fur et à mesure que le temps passe, d'autres utilisateurs peuvent modifier ces données. Les données de l'ensemble de données client deviennent une représentation de moins en moins fidèle des données sous-jacentes.

Comme tout ensemble de données, les ensembles de données client disposent d'une méthode Refresh qui met à jour ses enregistrements en fonction des valeurs courantes sur le serveur. Toutefois, l'appel de Refresh ne fonctionne que si le journal de modifications ne contient aucun changement. L'appel de Refresh alors que des modifications n'ont pas été appliquées déclenche une exception.

Les ensembles de données client peuvent aussi mettre à jour les données sans toucher au journal de modifications. Pour ce faire, appelez la méthode RefreshRecord. A la différence de la méthode Refresh, RefreshRecord ne met à jour que l'enregistrement en cours dans l'ensemble de données client. RefreshRecord modifie la valeur d'enregistrement initialement obtenue du fournisseur mais laisse intacts tous les changements contenus dans le journal de modifications.

Avertissement :  Il n'est pas approprié d'appeler systématiquement RefreshRecord. Si les modifications de l'utilisateur entrent en conflit avec celles apportées à l'ensemble de données sous-jacent par d'autres utilisateurs, l'appel de RefreshRecord masque ce conflit. Lorsque l'ensemble de données client applique ses mises à jour, aucune erreur de conciliation ne se produit et l'application ne peut pas résoudre le conflit.

Pour éviter que les erreurs de mise à jour ne soient masquées, vous pouvez vérifier qu'aucune mise à jour n'est en attente avant d'appeler RefreshRecord. Par exemple, ci-dessous, AfterScroll rafraîchit l'enregistrement en cours chaque fois que l'utilisateur se déplace sur un nouvel enregistrement (ce qui garantit la valeur la plus récente), mais seulement lorsqu'il n'est pas dangereux de procéder ainsi :

procedure TForm1.ClientDataSet1AfterScroll(DataSet: TDataSet);
begin
  if ClientDataSet1.UpdateStatus = usUnModified then
    ClientDataSet1.RefreshRecord;
end;
void __fastcall TForm1::ClientDataSet1AfterScroll(TDataSet *DataSet)
{
  if (ClientDataSet1->UpdateStatus == usUnModified)
    ClientDataSet1->RefreshRecord();
}

Voir aussi