ONLINE HELP
 WINDEVWEBDEV AND WINDEV MOBILE

Help / WLanguage / Managing databases / HFSQL / Managing transactions / WLanguage functions
  • Cas d'erreurs
  • Manipulations d'enregistrements pendant une transaction
  • 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
Valide la transaction en cours :
  • les modifications effectuées sur le fichier de données depuis le début de la transaction (fonction HTransactionDébut ou fonction HTransaction) sont validées.
  • le fichier de transaction est supprimé (si la transaction est la dernière transaction en cours dans le cas d'une application réseau).
  • les enregistrements bloqués en lecture par la transaction sont débloqués.
AndroidWidget AndroidiPhone/iPadWidget IOSMac Catalyst La gestion des transactions est disponible uniquement pour les bases de données HFSQL Client/Serveur.
Exemple
MaConnexion1 est une Connexion

// Début de la transaction sur les fichiers de données associés Ã  la connexion MaConnexion1
HTransactionDébut(MaConnexion1)

// Code permettant de préparer la commande Ã  ajouter
// ...

QUAND EXCEPTION DANS
// Ajout de la commande
HAjoute(Commande) 
// Validation de l'ajout
HTransactionFin(MaConnexion1)
FAIRE
// Suppression des lignes de commandes
HTransactionAnnule(MaConnexion1)
FIN
// Début de la transaction sur les fichiers de données Commande et LigneCde
HTransactionDébut("C:\Temp\Transaction.trs", "Commande,LigneCde,-Client")

// Code permettant de préparer la commande Ã  ajouter
// ...

QUAND EXCEPTION DANS
// Ajout de la commande
HAjoute(Commande) 
// Validation de l'ajout
HTransactionFin() 
FAIRE
// Suppression des lignes de commandes
HTransactionAnnule() 
FIN
Syntaxe

Valider une transaction en cours sur une connexion Masquer les détails

<Résultat> = HTransactionFin(<Connexion>)
<Résultat> : Booléen
  • Vrai si la transaction est terminée,
  • Faux en cas de problème. La fonction HErreurInfo permet d'obtenir plus de renseignements sur l'erreur.
Attention : Si une transaction globale est commencée, la fonction ne fait rien. Il faut utiliser la syntaxe 2.
<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 réalisée sur les fichiers de données HFSQL ISAM.

Valider une transaction globale en cours Masquer les détails

<Résultat> = HTransactionFin()
<Résultat> : Booléen
  • Vrai si la transaction est terminée,
  • Faux en cas de problème. La fonction HErreurInfo permet d'obtenir plus de renseignements sur l'erreur.
Remarques

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".

Manipulations d'enregistrements pendant une transaction

Pendant une transaction, il est nécessaire de suivre certaines règles lors de la manipulation des enregistrements. Pour plus de détails, consultez Transactions : Manipuler les enregistrements lors d'une transaction.

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 ServeurOLE DBConnecteurs Natifs (Accès Natifs)

OLE DB et Connecteurs Natifs

Seules les syntaxes avec connexion sont prises en compte par les Connecteurs Natifs (appelés également Accès Natifs) qui gèrent les transactions. Il est également possible d'utiliser la fonction SQLTransaction.
Composante : wd290hf.dll
Minimum version required
  • Version 9
Comments
Example in doc correcton
When using Transaction commands Start, End and Cancel always include the connection or source used in the Start in the associated End and Cancel

TransactionStart(MyConnection)

Hadd(Customer)
if ErrorOccurred() then
TransactionCancel(MyConnection)
ELSE
TransactionEnd(MyConnection)
END
CCordes
03 Oct. 2019
Example Transaction with commit 100 in 100
//SQL

SERIAL is int

HTransactionStart(Hfsql)

FOR EACH t0010_enderecoscorreios //leitura da tabela ms sql server // TABELA DE ORIGEM

SERIAL += 1

PROGBAR_01..Value += 1
IF PROGBAR_01..Value = 100 THEN
HTransactionEnd(Hfsql) //commit
PROGBAR_01..Value = 0
HTransactionStart(Hfsql) //start
Multitask(1) //permite compartilhar o processador com os outros prog e serviços windows
END

//HFSQL = MS SQL SERVER 2016 / DEVELOPER
enderecoscorreios.LogradouroAbrev = t0010_enderecoscorreios.LogradouroAbrev
enderecoscorreios.Logradouro = t0010_enderecoscorreios.Logradouro

ok is boolean = HAdd(enderecoscorreios) // gravacao no hfsql
IF ok = False THEN
HTransactionCancel(Hfsql) //Rollback
END

END

Info(SERIAL)
BOLLER
13 Apr. 2017

Last update: 05/25/2022

Send a report | Local help