DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Gestion des bases de données / HFSQL / Gestion des transactions / Fonctions WLangage
  • Localisation et accès aux fichiers de données
  • Détection d'une erreur
  • Conseil : Rétablir la cohérence de la base de données
  • Cas d'erreurs
  • Transactions et contexte HFSQL indépendant
  • OLE DB et Connecteurs Natifs
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Si une transaction est en cours, annule toutes les opérations effectuées sur les fichiers de données en transactions depuis le début de la transaction. Dans ce cas, la transaction est annulée sans interrompre l'exécution du programme.
Si aucune transaction est en cours, rétablit la cohérence de la base de données et annule la transaction qui a échoué (cas d'une coupure de courant par exemple).
Remarque : Une transaction qui a échoué peut être annulée par n'importe quel programme.
Si le fichier de transaction n'est pas partagé, il est automatiquement détruit. Les enregistrements bloqués par les écritures effectuées durant la transaction sont débloqués.
Remarque : La fonction HTransactionLibère transforme tous les enregistrements "en transaction" en enregistrements "normaux" si ces enregistrements n'appartiennent pas à une transaction actuellement en cours.
AndroidWidget AndroidiPhone/iPadWidget IOSMac Catalyst La gestion des transactions est disponible uniquement pour les bases de données HFSQL Client/Serveur.
Exemple
MaConnexion est une Connexion
 
// Début de la transaction sur les fichiers de données associés à la connexion MaConnexion
HTransactionDébut(MaConnexion)
Ajout_Commande()
QUAND EXCEPTION DANS
// Ajout de la commande
HAjoute(Commande)
// Validation de l'ajout
HTransactionFin(MaConnexion)
FAIRE
// Suppression des lignes de commandes
HTransactionAnnule(MaConnexion)
FIN
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL Classic
// Début de la transaction sur les fichiers de données Commande et LigneCde
HTransactionDébut("C:\Temp\Transaction.trs", "Commande, LigneCde, -Client")
Ajout_Commande()
QUAND EXCEPTION DANS
// Ajout de la commande
HAjoute(Commande)
// Validation de l'ajout
HTransactionFin()
FAIRE
// Suppression des lignes de commandes
HTransactionAnnule()
FIN
WINDEVWEBDEV - Code ServeurEtats et RequêtesAndroidWidget AndroidiPhone/iPadWidget IOSMac CatalystCode Utilisateur (MCU)AjaxHFSQL Client/Serveur
// Début de la transaction sur les fichiers de données Commande et LigneCde
HTransactionDébut("Commande,LigneCde,-Client")
Ajout_Commande()
QUAND EXCEPTION DANS
// Ajout de la commande
HAjoute(Commande)
// Validation de l'ajout
HTransactionFin()
FAIRE
// Suppression des lignes de commandes
HTransactionAnnule()
FIN
Syntaxe

Annuler une transaction en cours ou une transaction interrompue sur une connexion Client/Serveur Masquer les détails

<Résultat> = HTransactionAnnule(<Connexion>)
<Résultat> : Booléen
  • Vrai la transaction a été annulée,
  • Faux en cas de problème. La fonction HErreurInfo permet d'obtenir plus de renseignements sur l'erreur.
Attention :
  • S'il y a une transaction en cours sur la connexion, elle est annulée.
  • S'il n'y a pas de transactions en cours, les transactions interrompues sont annulées pour la connexion spécifiée.
<Connexion> : Chaîne de caractères ou variable de type Connexion
Connexion à manipuler. Cette connexion correspond : Si ce paramètre correspond à la constante hAccèsHF7, la transaction est annulée sur les fichiers HFSQL Classic (ISAM).

Annuler une transaction en cours ou une transaction interrompue sur toutes les connexions (HFSQL Classic ou Client/Serveur) Masquer les détails

<Résultat> = HTransactionAnnule([<Fichier de transaction>])
<Résultat> : Booléen
  • Vrai la transaction a été annulée,
  • Faux en cas de problème. La fonction HErreurInfo permet d'obtenir plus de renseignements sur l'erreur.
Attention :
  • HFSQL Classic Si le paramètre <Fichier de transaction> n'est pas précisé, la transaction en cours est annulée.
  • Si il y a une transaction en cours, TOUTES les transactions en cours sont annulées (transactions HFSQL Classic et/ou transactions HFSQL Client/Serveur).
  • Si il n'y a pas de transaction en cours, TOUTES les transactions interrompues sont annulées (en HFSQL Classic et Client/Serveur).
<Fichier de transaction> : Chaîne de caractères optionnelle
HFSQL Classic Nom et chemin du fichier de transaction à annuler :
  • Ce paramètre doit être identique au nom indiqué dans la fonction HTransactionDébut (ou dans la fonction HTransaction).
  • Si ce paramètre n'est pas précisé et qu'aucune transaction n'est en cours, le fichier des transactions par défaut est pris en compte.
  • Si une transaction est en cours, cette transaction est annulée et le nom du fichier de transactions n'est pas pris en compte.
HFSQL Client/ServeurOLE DBConnecteurs Natifs (Accès Natifs) Ce paramètre n'est pas pris en compte.

Annuler une transaction interrompue sur une base de données Client/Serveur (à utiliser si aucune transaction n'est en cours) Masquer les détails

<Résultat> = HTransactionAnnule(<Connexion> , <Base de données>)
<Résultat> : Booléen
  • Vrai la transaction a été annulée,
  • Faux en cas de problème. La fonction HErreurInfo permet d'obtenir plus de renseignements sur l'erreur.
Attention :
  • Seules les transactions interrompues sur la base de données spécifiée sont annulées.
  • Les transactions en cours ne sont pas annulées.
<Connexion> : Chaîne de caractères ou variable de type Connexion
Connexion à manipuler. Cette connexion correspond : Si ce paramètre correspond à la constante hAccèsHF7, seules les transactions interrompues en mode HFSQL Classic sont annulées.
<Base de données> : Chaîne de caractères
Nom de la base de données concernée. Si ce paramètre correspond à une chaîne vide (""), une erreur est affichée.
WINDEVWEBDEV - Code ServeurWINDEV MobileEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL Classic

Annuler une transaction (à utiliser si aucune transaction n'est en cours) Masquer les détails

<Résultat> = HTransactionAnnule(<Fichier de transaction> , <Connexion>)
<Résultat> : Booléen
  • Vrai la transaction a été annulée,
  • Faux en cas de problème. La fonction HErreurInfo permet d'obtenir plus de renseignements sur l'erreur.
Attention :
  • Si le paramètre <Fichier de transaction> n'est pas précisé, la transaction en cours est annulée.
  • S'il y a une transaction "générale" en cours, TOUTES les transactions en cours sont annulées (transactions HFSQL Classic et/ou transactions HFSQL Client/Serveur).
  • S'il y a une transaction en cours sur la connexion, elle est annulée.
  • S'il n'y a pas de transaction en cours, seules les transactions interrompues pour la connexion spécifiée sont annulées.
<Fichier de transaction> : Chaîne de caractères
Nom et chemin du fichier de transaction à annuler.
Ce paramètre doit être identique au nom indiqué dans la fonction HTransactionDébut (ou dans la fonction HTransaction).
<Connexion> : Chaîne de caractères ou variable de type Connexion
Connexion à manipuler. Cette connexion correspond : Si ce paramètre correspond à la constante hAccèsHF7, seules les transactions interrompues en mode HFSQL Classic sont annulées.

Annuler une transaction spécifique, liée à une connexion Masquer les détails

<Résultat> = HTransactionAnnule(<Connexion> , <Transaction à annuler>)
<Résultat> : Booléen
  • Vrai la transaction a été annulée,
  • Faux en cas de problème. La fonction HErreurInfo permet d'obtenir plus de renseignements sur l'erreur.
Attention : Seules les transactions interrompues sur la base de données spécifiée sont annulées.
<Connexion> : Chaîne de caractères ou variable de type Connexion
Connexion à manipuler. Cette connexion correspond : Si ce paramètre correspond à la constante hAccèsHF7, seule la transaction interrompue en mode HFSQL Classic est annulée.
<Transaction à annuler> : Entier
Identifiant de la transaction à annuler pour la connexion spécifiée. Cet identifiant peut être connu grâce à la fonction HTransactionListe.
Remarques

Localisation et accès aux fichiers de données

Avant d'appeler la fonction HTransactionAnnule, les fichiers de données manipulés par la transaction annulée doivent être :

Détection d'une erreur

Lorsqu'une erreur est détectée par le programme (gestion des erreurs avec QUAND EXCEPTION par exemple), la fonction HTransactionAnnule permet de :
  • remettre les fichiers de données dans leur état initial.
  • annuler l'ensemble des opérations effectuées sur les fichiers de données depuis l'appel à la fonction HTransactionDébut (ou à la fonction HTransaction).

Conseil : Rétablir la cohérence de la base de données

Si une panne (coupure de courant, re-démarrage du poste, ...) survient pendant une transaction, les fichiers de données risquent d'être incohérents : la transaction n'a été ni validée, ni abandonnée. Le fichier de transaction est toujours présent sur le poste.
Pour rétablir la cohérence de la base de données, il est conseillé de proposer dans votre application :
  • soit une option permettant de maintenir la cohérence de la base de données.
    Cette option peut par exemple appeler la fonction HTransactionAnnule ou les fonctions HTransactionDébut/HTransactionFin.
  • soit une gestion de l'erreur 70034 dans le code d'initialisation du projet grâce au mot-clé QUAND EXCEPTION.
    Ainsi, quand l'erreur 70034 surviendra, la cohérence de la base de données sera restaurée soit par la fonction HTransactionAnnule, soit par les fonctions HTransactionDébut/HTransactionFin.
Remarque : cette opération peut être relativement longue (selon le nombre d'opérations effectuées en transaction).

Cas d'erreurs

  • Imbrication de transactions : Il est impossible d'imbriquer les transactions (c'est-à-dire d'appeler la fonction HTransactionDébut ou la fonction HTransaction dans une transaction). Dans ce cas, l'erreur 70031 est générée.
  • Une erreur fatale est affichée dans les cas suivants :
    • Une transaction est débutée sur toutes les connexions alors qu'il existe au moins une connexion en transaction.
    • Une transaction sur une connexion est débutée après avoir commencé une transaction sur toutes les connexions.
    • Une transaction sur toutes les connexions est débutée alors qu'il existe au moins une connexion dont le mode d'isolation n'est pas "Read Uncommitted".

Transactions et contexte HFSQL indépendant

Lors de la copie de contexte, si une transaction est en cours sur le premier contexte, le nouveau contexte n'est pas en transaction. Il faut rappeler la fonction HTransactionDébut (ou la fonction HTransaction) pour démarrer une transaction dans le nouveau contexte.
WINDEVWEBDEV - Code ServeurCode Utilisateur (MCU)AjaxOLE DBConnecteurs Natifs (Accès Natifs)

OLE DB et Connecteurs Natifs

Seules les syntaxes avec connexion sont prises en compte par les Connecteurs Natifs qui gèrent les transactions. Il est également possible d'utiliser la fonction SQLTransaction.
Composante : wd290hf.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 19/04/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale