Conciliation des erreurs de mise à jour

De RAD Studio
Aller à : navigation, rechercher

Remonter à Mise à jour des enregistrements


Deux événements vous permettent de gérer les erreurs qui se produisent pendant le processus de mise à jour :

  • Pendant le processus de mise à jour, le fournisseur interne génère un événement OnUpdateError chaque fois qu'il rencontre une mise à jour qu'il ne peut pas traiter. Si vous corrigez le problème dans le gestionnaire de l'événement OnUpdateError, l'erreur n'est pas comptabilisée dans le nombre maximal d'erreurs passé à la méthode ApplyUpdates. Cet événement ne se produit que pour les ensembles de données client utilisant un fournisseur interne. Si vous utilisez TClientDataSet, vous pouvez utiliser à la place l'événement OnUpdateError du composant fournisseur.
  • Lorsque l'opération de mise à jour est complètement terminée, l'ensemble de données client génère un événement DBClient.OnReconcileError pour chaque enregistrement que le fournisseur n'a pas pu appliquer sur le serveur de la base de données.

Il faut toujours coder un gestionnaire d'événement OnReconcileError ou OnUpdateError, même s'il ne fait qu'abandonner les enregistrements n'ayant pas pu être appliqués. Les gestionnaires des deux événements fonctionnent de manière identique. Ils incluent les paramètres suivants :

DataSet : Un ensemble de données client qui contient l'enregistrement mis à jour qui n'a pas pu être appliqué. Vous pouvez utiliser les méthodes de l'ensemble de données client pour obtenir des informations sur l'enregistrement problématique et pour le modifier afin de résoudre tous les problèmes. Vous pouvez notamment utiliser les propriétés CurValue, OldValue et NewValue des champs de l'enregistrement en cours pour déterminer la cause du problème de mise à jour. Toutefois, vous ne pouvez pas appeler une méthode de l'ensemble de données client qui modifie l'enregistrement en cours dans votre gestionnaire d'événement.

E : Un objet qui représente le problème qui s'est produit. Vous pouvez utiliser cette exception pour extraire un message d'erreur ou pour déterminer la cause d'une erreur de mise à jour.

UpdateKind : Le type de mise à jour ayant généré l'erreur. UpdateKind peut être ukModify (problème survenu lors de la mise à jour d'un enregistrement existant modifié), ukInsert (problème survenu lors de l'insertion d'un nouvel enregistrement) ou ukDelete (problème survenu lors de la suppression d'un enregistrement existant).

Action : Un paramètre var qui indique l'action à entreprendre à la fin de l'exécution du gestionnaire d'événement. Dans votre gestionnaire d'événement, vous initialisez ce paramètre pour

  • Ignorer l'enregistrement et le laisser dans le journal de modifications (rrSkip ou raSkip)
  • Abandonner l'opération de conciliation entière (rrAbort ou raAbort)
  • Fusionner la modification infructueuse avec l'enregistrement correspondant sur le serveur (rrMerge ou raMerge) Cela ne fonctionne que si l'enregistrement du serveur n'inclut pas de modification sur les champs modifiés dans l'enregistrement de l'ensemble de données client.
  • Remplacer la mise à jour courante dans le journal de modifications par la valeur de l'enregistrement dans le gestionnaire d'événement, qui a normalement été corrigé. (rrApply ou raCorrect)
  • Ignorer l'erreur complètement. (rrIgnore) Cette possibilité n'existe que dans le gestionnaire d'événement OnUpdateError, elle est prévue pour le cas où le gestionnaire d'événement applique la mise à jour dans le serveur de la base de données. L'enregistrement mis à jour est supprimé du journal de modifications et fusionné dans Data, comme si le fournisseur avait appliqué la mise à jour.
  • Retirer les modifications de l'enregistrement sur l'ensemble de données client, en réappliquant les valeurs initialement fournies. (raCancel) Cette possibilité n'existe que dans le gestionnaire d'événement OnReconcileError.
  • Mettre à jour la valeur de l'enregistrement en cours en fonction de l'enregistrement du serveur. (raRefresh) Cette possibilité n'existe que dans le gestionnaire d'événement OnReconcileError.

Le code suivant montre un gestionnaire d'événement OnReconcileError qui utilise la boîte de dialogue d'erreur et de conciliation de l'unité RecError présente dans le répertoire objrepos. (Pour utiliser ce dialogue, ajoutez RecError à votre clause utilise.)

procedure TForm1.ClientDataSetReconcileError(DataSet: TCustomClientDataSet; E: EReconcileError; UpdateKind: TUpdateKind, var Action TReconcileAction);
begin
  Action := HandleReconcileError(DataSet, UpdateKind, E);
end;
void __fastcall TForm1::ClientDataSetReconcileError(TCustomClientDataSet *DataSet,
    EReconcileError *E, TUpdateKind UpdateKind, TReconcileAction &Action)
{
  Action = HandleReconcileError(this, DataSet, UpdateKind, E);
}

Voir aussi