WinDev 21 : La gestion des bases de données HFSQL

Gérer les transactions

Testez gratuitement nos 1257 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Les transactions assurent l'intégrité des données en cas de panne. Vous allez alors apprendre à mieux les gérer.
08:07

Transcription

Maintenant ce qui va être intéressant, c'est de simuler une panne entre les deux étapes. Dans la pratique, on ne met pas ces deux étapes dans du code différent, comme je l'ai fait ici. Au contraire, il faudrait qu'elles soient dans le même code si possible, et que le "fin de transaction" arrive le plus vite possible après le "début transaction" pour justement qu'il y ait le moins de chances possibles d'y avoir un problème entre les deux. Mais là c'est vraiment, encore une fois, pour faire de la démo. Donc à titre d'exemple ici ça c'est le bouton normal qui enregistre une transaction et qui la valide. On peut imaginer qu'on veuille annuler la transaction. Annuler la transaction ça serait avec un bouton que j'appellerais, pourquoi pas, Annuler. Donc Annuler même une fois que ça a été enregistré, vous allez le voir, Annuler. Je rentre dans le code, et là je fais un HTransactionAnnule. Voilà, et je vais mettre un petit toast, ToastAffiche Transaction annulée. Donc maintenant, on va tester tout ça. Je lance le programme, pour faire une modification sur les abeilles, je vais donc mettre n'importe quoi ici. Si je clique sur Enregistrer, bon on le voit pas vraiment, parce que j'ai pas fermé la fenêtre, mais vous êtes d'accord avec moi qu'il y a donc dans ce code une phrase qui dit HModifie donc les modifications ont bien été enregistrées, je pourrais à la limite les visualiser. Je vais cliquer sur Annuler, si je ferme, voyez qu'ici ça n'a pas bougé. C'est pas rafraîchi mais ici vous avez vu qu'on avait mis le rafraîchissement, de toute façon si je viens ici voyez que c'est pas modifié. On peut même, pour être sûr de ce qu'on a fait, juste avant de faire le Transaction annule afficher. Info, Animaux "point", j'avais modifié donc par exemple l'espérance de vie admettons, juste avant d'annuler la transaction comme ça on peut vérifier ce que je viens de dire donc je vais le modifier, je mets ici un chiffre quelconque, enregistre. annule, voyez qu'il a bien enregistré 120. Ça n'empêche pas que quand je reviens, il a annulé la transaction et ça a été effacé. Autre exemple, là je l'ai fait volontairement, j'ai annulé la transaction volontairement, on va imaginer le cas où il y a un plantage, ça c'est encore plus intéressant. Deux cas possibles qu'on pourrait simuler, le premier c'est une erreur de programmation qui plante le programme ou alors carrément une erreur machine, application qui se plante complètement, ordinateur qui s'arrête etc. Alors ici on va simuler une erreur. Et dans le code de ce bouton je vais tout simplement faire quelque chose de bien grave genre une division par zéro. Donc je vais afficher un petit message Attention à l'erreur et j'écris donc x est un entier = 1/0 ça, ça pardonne pas. Pour traiter l'erreur je vais utiliser le système de traitement automatique qui est ici, Si Erreur eh bien on va lui demander de traiter ce qu'il y a dans le cas erreur, donc il m'ajoute ici un cas erreur, et je fais un HTransactionAnnule tout simplement sur ma base de données. Donc on peut imaginer tout un traitement de plusieurs lignes, on aurait pu faire également un cas Exception, il y a plein de possibilités, et en cas d'erreur il va tout simplement annuler la transaction, on peut le tester aussi, allons-y. Je reviens sur mes abeilles, je modifie ici la valeur, je l'affiche pas mais vous avez vu que ça s'enregistrait de toute façon, je provoque une erreur, voilà, plantage. Pour traiter l'erreur je vais utiliser un des systèmes automatiques proposés ici. Il faut distinguer l'erreur et l'exception, la division par zéro ça sera plutôt une exception, donc je vais prendre "cas exception". Je vais lui demander d'activer le traitement d'erreur spécifique, donc "exécuter le code dans cas exception". Il me met ici, et là je vais faire un HTransactionAnnule et éventuellement je peux fermer la fenêtre. Donc en cas d'erreur il va tout simplement annuler la transaction. On va tester. Donc je prends mes abeilles, je mets une valeur quelconque, j'ai pas affiché la valeur pour vérifier mais c'est pas grave, on enregistre, j'ai provoqué l'erreur, voilà, on n'a rien vu du tout; il a traité le cas d'erreur. Il est revenu en arrière sur la transaction automatiquement. On le voit ici puisque les données n'ont pas été modifiées. Donc évidemment c'est pas très visuel, mais vous avez vu que c'est exactement ce qu'il s'est passé. Le dernier cas qu'on peut traiter, ça serait un plantage, donc dans ce cas-là, le mieux c'est d'arrêter brutalement l'application tout simplement j'ai même pas besoin de faire de bouton pour ça. On va lancer donc le programme, je lance l'ouverture de la fiche, je modifie une valeur, j'enregistre, donc là je ne ferme pas surtout parce que je ne veux pas terminer la transaction et je vais l'arrêter brutalement. Alors pour arrêter brutalement, le plus simple ça sera encore de prendre ici le projet et de l'arrêter comme ça. Normalement il devrait pas exécuter le "fin de transaction" si je redémarre le projet, vous allez voir ce qu'il va se passer, voilà un message d'erreur. Il nous dit qu'il ne peut pas accéder au premier enregistrement, numéro 1 en l'occurrence, bon parce que c'est là que ça s'est passé mais ça peut être n'importe lequel. Parce qu'une transaction qui a essayé d'accéder à cet enregistrement a échoué et elle n'a pas été annulée. Effectivement j'ai arrêté le programme en cours de route entre le "début de transaction" et le "fin de transaction" donc la fin de transaction n'a jamais pu s'exécuter. Là on me dit également qu'on pourrait éventuellement revenir en arrière, enfin annuler la transaction avec un nouveau HTransactionDébut ou un HTransactionAnnule qu'il faudrait par exemple mettre au début du code du programme, dans le code d'initialisation. Alors évidemment dans un vrai programme c'est probablement ce que je ferais. Ici, je vais vous montrer autre chose, si je veux résoudre ce problème parce que là je suis un petit peu coincé à chaque fois que je vais tenter de relancer l'application je vais avoir le même message d'erreur. Si je clique ici, je vais avoir strictement le même message, voyez ça tourne indéfiniment. Donc la solution ici ça va être d'utiliser un outil qui se trouve dans l'onglet Outils justement qui s'appelle WDTrans. Et en cliquant sur cet outil, je vais pouvoir annuler la transaction qui ne s'est pas exécutée jusqu'au bout. Cette option ici va me permettre d'aller chercher le fichier de transactions que je dois lui donner dans cette zone. Alors le fichier, voyez ici, il s'appelle Exeanimaux, parce qu'en fait j'ai fait une petite erreur je crois quand j'ai défini le chemin du fichier. Donc au lieu de se retrouver dans Exe tout simplement parce qu'il n'a pas eu l'antislash. Bon, ça n'est pas bien grave, ça ne l'empêche pas de fonctionner et c'est quand même un fichier de transactions. Donc je le prends, je l'ouvre, donc il voit que c'est le fichier sur lequel il y a eu les transactions je vais lui demander d'annuler la transaction. C'est terminé. Je peux refermer, je referme ça, maintenant je peux relancer mon projet, la transaction ayant été annulée par Outils on va dire manuellement je peux à nouveau faire fonctionner mon application. Donc voilà le principe général des transactions. Commencez le code par un HTransactionDébut, indiquez le chemin du fichier, donc ici ce que j'aurais dû faire c'est un ComplèteRep pour être sûr qu'il ajoute justement l'antislash. Donc commencez par un HTransactionDébut et terminez, dès que les données ont été modifiées, par un HTransactionFin.

WinDev 21 : La gestion des bases de données HFSQL

Découvrez les manipulations, les outils et les possibilités intéressantes des bases de données HFSQL dans WinDev. Installez, utilisez, et gérez le serveur HFSQL client/serveur.

2h03 (23 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
WinDev WinDev 21
Spécial abonnés
Date de parution :23 févr. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !