From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../fr/web/api/idbdatabase/transaction/index.html | 224 +++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 files/fr/web/api/idbdatabase/transaction/index.html (limited to 'files/fr/web/api/idbdatabase/transaction') diff --git a/files/fr/web/api/idbdatabase/transaction/index.html b/files/fr/web/api/idbdatabase/transaction/index.html new file mode 100644 index 0000000000..82f9006306 --- /dev/null +++ b/files/fr/web/api/idbdatabase/transaction/index.html @@ -0,0 +1,224 @@ +--- +title: IDBDatabase.transaction() +slug: Web/API/IDBDatabase/transaction +translation_of: Web/API/IDBDatabase/transaction +--- +

{{ APIRef("IndexedDB") }}

+ +
+

La méthode transaction de l'interface {{domxref("IDBDatabase")}} renvoie une {{domxref("IDBTransaction","transaction")}} sur laquelle on peut appeler la méthode {{domxref("IDBTransaction.objectStore")}} pour accéder aux magasins d'objets de la base de donnée.

+
+ +

{{AvailableInWorkers}}

+ +

Syntaxe

+ +
var transaction = db.transaction(storeNames, mode);
+ +

Paramètres

+ +
+
storeNames
+
un tableau de noms de magasins d'objets entrant dans le cadre de cette transaction. Indique seulement les magasins d'objets dont on a besoin.
+ Si l’on n’a besoin que d’un seul magasin d'objet, on peut simplement passer son nom. Les lignes suivantes sont équivalentes : +
var transaction = db.transaction(['my-store-name']);
+var transaction = db.transaction('my-store-name');
+ Pour utiliser tous les magasins d'objets de la base de donnée, on peut appeler la methode {{domxref("IDBDatabase.objectStoreNames")}}: + +
var transaction = db.transaction(db.objectStoreNames);
+ Passer un tableau vide lèvera une exception.
+
mode {{optional_inline}}
+
+

Le {{domxref("IDBTransactionMode","mode")}} d’{{domxref("IDBObjectStore","accès aux magasins d'objets")}} à la base de données (par default readonly):

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
ValeurExplication
readonlypermet de prendre des objets dans les magasins d'objets, de lire les index et de faire des curseurs.
readwritePermet en plus de que l'on peut faire en readonly, d’ajouter et mettre à jour des objets dans les magasins d'objets.
versionchangePermet toute les opérations, y compris celles qui suppriment ou ajoutent des {{domxref("IDBOjectStore","magasins d'objets")}} ou des {{domxref("IDBIndex","index")}}. Ce mode met à jour le numéro de version de la base de données, il se sert au début de {{domxref ("IDBDatabase.setVersion")}}. Les {{domxref("IDBTransaction","transactions")}} dans ce mode ne peuvent pas fonctionner en même temps que d'autres.
readwriteflush +

Si vous devez vous assurer de l'efficacité d'une transaction pour une raison quelconque (par exemple, vous stockez des données critiques qui ne peuvent être recalculées plus tard), vous pouvez forcer l’enregistrement complet sur disque avant de déclencher l’événement complete en utilisant le mode readwriteflush (non standard) expérimental ( voir {{domxref("IDBDatabase.transaction")}} ). C'est expérimental, et ne peut être utilisé que si le dom.indexedDB.experimental pref est réglé sur true dans about:config.

+ +

Depuis Firefox 40, les transactions IndexedDB diminuent en efficacité pour gagner en efficience (voir {{Bug ( "1112702")}}.) Auparavant, dans une transaction en readwrite l'événement complete était déclanché seulement lorsque toutes les données étaient écrites sur le disque. Maintenant l'événement complete est déclenché après que l'OS ai envoyé l'ordre d'écrire les données, mais potentiellement avant qu'elles aient été écrites sur le disque. L'événement complete peut ainsi se déclancher plus rapidement qu'auparavant, cependant, il existe une chance infime pour que l'ensemble de la transaction soit perdue si le système d'exploitation plante ou s'il y a une perte de courant avant que les données aient été écites sur le disque. Étant donné que ces événements catastrophiques sont rares la plupart des utilisateurs ne devraient pas avoir à s'en préoccuper davantage.

+
+ {{note("Pour éviter des pertes de performance, n’utilisez le mode readwrite que si vous avez effectivement besoin d’écrire ou de mettre à jour des données sur la base.")}} Si on a besoin d’accéder à un magasin d'objets pour écrire ou mettre à jour des enregistrement, on utilise la sytaxe: + +
var transaction = db.transaction('monMagasin','readwrite');
+
+
 
+
+ +

Renvoie

+ +

Une {{domxref("IDBTransaction","transaction")}}.

+ +

Exceptions

+ +
+
InvalidStateError
+
Cette {{domxref("DOMException","exception")}} est levée si la méthode close() a été appelée sur cette connexion à la base de donnée.
+
NotFoundError
+
Cette {{domxref("DOMException","exception")}} est levée si un magasin d'objets indiqué dans le paramètre storeNames n'existe pas ou plus.
+
TypeError
+
Cette {{domxref("DOMException","exception")}} est levée si la valeur du paramètre mode n'est pas valide.
+
InvalidAccessError
+
Cette {{domxref("DOMException","exception")}} est levée si la liste passée à storeNames est vide
+
+ +

Exemple

+ +

Dans cet exemple, on ouvre simplement une connexion à la base de donnée puis une transaction sur cette connexion.

+ +
var db;
+
+// Connexion à la base de donnée
+var DBOpenRequest = window.indexedDB.open("toDoList", 4);
+
+DBOpenRequest.onsuccess = function(event) {
+  note.innerHTML += '<li>Base de donnée initialisée.</li>';
+
+  // affecte la connexion à la variable db
+  db = DBOpenRequest.result;
+
+  // exécute la fonction displayData() qui affiche la liste des taches présentes dans la base de donnée
+  displayData();
+
+};
+
+// ouvre une transaction en lecture/écriture prête pour l'ajout d'enregistrement.
+var transaction = db.transaction(["toDoList"], "readwrite");
+
+// affiche le succès de l'ouverture de la transaction
+transaction.oncomplete = function(event) {
+  note.innerHTML += '<li>Fin de transaction: les modifications sur la base de donnée sont terminées.</li>';
+};
+
+transaction.onerror = function(event) {
+  note.innerHTML += '<li>La transaction n'a pas pu être initiée.</li>';
+};
+
+// On peut maintenant accéder au magasin d'objet
+var objectStore = transaction.objectStore("toDoList");
+// etc.
+ +

Pour un exemple de travail complet, voir notre To-do Notifications app (view example live).

+ +

Spécification

+ + + + + + + + + + + + + + +
SpécificationStatutCommentaire
{{SpecName('IndexedDB', '#widl-IDBDatabase-transaction-IDBTransaction-DOMString-sequence-DOMString--storeNames-IDBTransactionMode-mode', 'transaction()')}}{{Spec2('IndexedDB')}} 
+ +

Compatibilité avec les navigateurs

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FonctionnalitéChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Support basique23{{property_prefix("webkit")}}
+ 24
10 {{property_prefix("moz")}}
+ {{CompatGeckoDesktop("16.0")}}
10, en partie157.1
Disponible dans workers{{CompatVersionUnknown}}{{CompatGeckoMobile("37.0")}}{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FonctionnalitéAndroidFirefox Mobile (Gecko)Firefox OSIE PhoneOpera MobileSafari Mobile
Support basique4.4{{CompatGeckoMobile("22.0")}}1.0.110228
Disponible dans workers{{CompatVersionUnknown}}{{CompatGeckoMobile("37.0")}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}
+
+ +

Voir aussi

+ + -- cgit v1.2.3-54-g00ecf