2010-09-11 25 views
7

Le Delphi XE dbExpress tutorial dans la documentation en ligne utilise ApplyUpdates (-1):Devrais-je utiliser ApplyUpdates (0) ou ApplyUpdates (-1)?

// Client data set has provider do update. 
    ClientDataSet1.ApplyUpdates(-1); 

Certaines sources en ligne dire mais il aurait des avantages à utiliser ApplyUpdates (0), et ce serait une erreur généralisée ou mauvaise pratique utiliser -1. Est-ce vrai? Et quand et pourquoi devrais-je préférer 0 sur -1 comme valeur pour MaxErrors?

+0

Il est étonnant de voir comment l'utilisation (généralement pas si bonne) de ApplyUpdates (-1) a proliféré, puisque ApplyUpdates (0) est généralement beaucoup mieux. –

Répondre

9

-1 Permet de signaler des erreurs illimitées, ainsi chaque mise à jour du delta de ClientDataSet sera essayée.

0 Permet aucune erreur du tout, ce qui signifie qu'aucun effort n'est fait pour essayer les mises à jour après un premier échec.

-1 peut être approprié si vous avez de nombreuses modifications non liées à effectuer dans la base de données. Par exemple, lorsque vous repoussez les changements de l'utilisation hors ligne dans le modèle de porte-documents. Dans ce type de scénario, les mises à jour peuvent échouer car les enregistrements ont entre-temps été mis à jour par d'autres utilisateurs, mais si une mise à jour échoue, les chances que les autres mises à jour échouent sont minces. Il serait alors probablement plus pratique de laisser chaque mise à jour être essayée et de recevoir un rapport de ceux qui ont échoué afin qu'ils puissent être adressés par l'utilisateur.

0 est probablement mieux adapté dans des situations où il est assez prévisible que si une mise à jour échoue, toutes ou plusieurs des autres mises à jour dans le delta échoueront également. Il serait "imprudent" d'avoir le ClientDataSet essayer les autres mises à jour lorsque la probabilité de leur échec est aussi élevée. Doit admettre cependant que j'ai du mal à imaginer un scénario dans lequel ce serait le cas.

+0

Merci pour la réponse détaillée! Une chose me vient à l'esprit quand je le lis: iirc il y a aussi une différence de 'rollback', alors que 0 ne commettra aucun changement dans la base de données pour que le client puisse être sûr que rien ne s'est passé avec la base de données, -1 engager "autant que possible" - ou quelque chose comme ça. (Je suis toujours à la recherche des ressources en ligne qui contenaient une meilleure description de cette différence.) – mjn

+0

@mjustin: -1 commettre autant que possible est un pari assez sûr. 0 ne rien commettre en cas d'échec Je suis moins sûr, mais c'est ce à quoi je m'attendrais ... :) –