Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Storage et statement

Envoyé par : dedale

Date : 04/04/2007 15:22

Bonjour, j'essaye d'utiliser l'api storage avec Firefox 2, je me sers de la documentation du MDC, mais j'ai toujours le même message d'erreur que je ne comprends pas. Le message est le suivant :

Erreur : \[Exception... 'Component returned failure code: 0x80004005 (NS_ERROR_FAILURE)  \[mozIStorageConnection.createStatement\]'  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame ::  chrome://xultest/content/javascript/storage.js :: anonymous :: line 15"  data: no\]
Fichier source : chrome://xultest/content/javascript/storage.js
Ligne : 15

et le code est :

var file = Components.classes["@mozilla.org/file/directory_service;1"]
	.getService(Components.interfaces.nsIProperties)
	.get("ProfD", Components.interfaces.nsIFile);
	
file.append("elements.sdb3");

var storage = Components.classes["@mozilla.org/storage/service;1"]
.getService(Components.interfaces.mozIStorageService);

var db = storage.openDatabase(file);

var statement = db.createStatement("SELECT * FROM elements");
while (statement.executeStep()) {
	var value = statement.getInt32(0);
}

La ligne 15 est : var statement = db.createStatement("SELECT * FROM elements");

Le fichier elements.sdb3 existe bien et c'est du sqlite3 la table elements existe et contient des lignes.

Toute aide sera la bienvenue. Merci d'avance.

# Re: Storage et statement

Envoyé par : Raphael

Date : 04/04/2007 22:17

Je ne me sers pas vraiment du Storage de Firefox je crois... En fait, je me connecte juste à ma base SQLite3 via XULrunner 1.9a3 de cette manière :

function connectsqlite(dbfile)
{
this.db = dbfile;
this.get = executeQuery;
this.do = executeUpdate;
this.getNextID = getNextID;
}
function getConnection(dbfile)
{
// get the storage service
var store = Components.classes["@mozilla.org/storage/service;1"].getService(Components.interfaces.mozIStorageService);
// get the profile directory
var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("CurProcD", Components.interfaces.nsILocalFile);
file.append("chrome");
file.append("content");
file.append("data");
file.append("databases");
file.append(dbfile);
var db = store.openDatabase(file);
return db;
}
function executeQuery(query)
{
var statement = Components.classes['@mozilla.org/storage/statement-wrapper;1'].createInstance(Components.interfaces.mozIStorageStatementWrapper);
var results = getConnection(this.db).createStatement(query);
return results;
}
function executeUpdate(query)
{
var statement = Components.classes['@mozilla.org/storage/statement-wrapper;1'].createInstance(Components.interfaces.mozIStorageStatementWrapper);
var s = getConnection(this.db).createStatement(query);
s.execute();
}

En espérant que ça t'aide un peu, en tous cas moi maintenant je ne peux plus m'en passer :)

# Re: Storage et statement

Envoyé par : dedale

Date : 05/04/2007 15:55

Bonjour, Merci pour ta réponse. En fait, le problème semble venir du fait qu'il ne trouve pas la base. Elle est situé dans le dossier content de mon extension. La requête suivante retourne un résultat : select DATETIME('NOW') as date;

tandis que celle ci ne retourne rien : SELECT * FROM SQLITE_MASTER;

Dans quel répertoire mets tu ta base et quel chemin donne tu à ta fonction?

Merci d'avance

# Re: Storage et statement

Envoyé par : Raphael

Date : 05/04/2007 16:18

Bien, c'est écrit dans mon script... J'ouvre un objet nsILocalFile à la racine de mon appli. (là où se trouve mon exécutable Xulrunner).

Ensuite, tu peux voir que j'entre dans chrome\content\databases\db.sql3

Ca doit être ton répertoire de base qui ne concorde pas avec l'endroit où se trouve ton fichier.

# Re: Storage et statement

Envoyé par : dedale

Date : 05/04/2007 16:49

Effectivement, la base de données était dans le répertoire chrome de l'extension, je l'ai mise dans le répertoire chrome de firefox et ça marche parfaitement.

Merci beaucoup.

# Re: Storage et statement

Envoyé par : dedale

Date : 13/04/2007 23:28

Bonjour, Je voudrais savoir comment revenir au début d'un statement. une fois que l'on a executé le code suivant :

while (statement.step()) {
...
}

comment faire en sorte de revenir au premier élément du statement?

Merci d'avance

# Re: Storage et statement

Envoyé par : Raphael

Date : 14/04/2007 15:41

Hum... je sais pas... généralement, je stocke tout ce dont j'ai besoin dans un tableau moi.

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.