Qu'est ce qu'une transaction?
Comme son nom l'indique une transaction est un échange de données entre un ensemble A et un ensemble B.
Le meilleur exemple utilisé pour expliquer une transaction est celui de la banque et de la carte de crédit :
Lorsque vous règlez vos courses avec votre carte bancaire, votre compte est alors débité, et celui du magasin est crédité. La transaction n'est pas ici simplement le fait de débiter ou de créditer un compte mais regroupe l'ensemble des deux opérations.
En effet pour débiter le compte du client X, la banque doit être sûre que le compte du magasin a été crédité... Si le compte du magasin n'est pas crédité (pour une raison quelconque ... panne de matériel, etc...) alors l'action de débiter sur le client est annulée.
Voilà en gros ce qu'est une transaction. C'est la capacité de pouvoir gérer n actions, en étant sûr que les n actions se sont toutes déroulées correctement.
Les Transactions et ADO
Ado (composant d'accès aux données) fournit 3 méthodes (BeginTrans, RollbackTrans, CommitTrans) permettant de gérer une transaction. Ces méthodes se situent au niveau de l'objet connection. Tout recordset ouvert alors sur cet objet ne sera validé qu'à l'appel de la méthode CommitTrans.
- BeginTrans : Début de la transaction
- CommitTrans : Validation de la transaction
- RollbackTrans : annule la transaction en cours
Exemple d'utilisation d'une transaction :
Dans la base de donnée nous disposons d'une table client dont un des champs compte contient l' argent dont dispose le client sur son compte.
Egalement une table magasin, contenant une liste de magasins avec leur champ compte associé.
<%
'--- Client_debit est le numéro de client à débiter
client_debit=2
'--- Magasin à crédité dans la transaction
magasin_credit=3
'--- Montant de la transaction entre magasin et client (1700 F)
montant_transac="1700"
'------- Ouverture de l'accès aux données
Set conn=server.createObject ("ADODB.connection")
conn.open "base_de_donnee","",""
'----- Début de la transaction
conn.Begintrans
SQL="select * From client where id_client="&client_debit
Set rs=server.createObject("ADODB.recordset")
rs.open SQL, conn, 3, 3
rs.movefirst
rs("compte")=rs("compte")-montant_transac
rs.update
SQL="select * From magasin where id_magasin="&magasin_credit
Set rs1=server.createObject("ADODB.recordset")
rs1.open SQL, conn, 3, 3
rs1.movefirst
rs1("compte")=rs1("compte")+montant_transac
rs1.update
'--- Si les deux actions précédentes se sont effectuées correctement
'--- La transaction est validée
conn.CommitTrans
set rs=nothing
set rs1=nothing
set conn=nothing
%>