Question

Je l'ai regardé partout, mais je ne peux pas sembler trouver exactement ce que je suis en train de faire. Il devrait être assez simple ...

J'ai une table db mis en place comme ceci:

var db = Ti.Database.open('playerInfo.db');
db.execute('CREATE TABLE IF NOT EXISTS playersTable (id INTEGER PRIMARY KEY, name TEXT NOT NULL, "50" INTEGER, "25" INTEGER )');

I ont deux boutons avec une valeur attribuée de 25 et 50, respectivement. Chaque bouton a une touche « valeur », où j'assigne leurs valeurs. Je suis en train d'accomplir trois choses: Quand un bouton est pressé, trouver la colonne de valeur correspondant. augmenter la valeur de cette colonne par une. Récupérer le nouveau journal valeur et la console il.

Voici ce que mon apparence de code comme quand un bouton est pressé:

var rows = db.execute("SELECT '" + button.value + "' FROM playersTable WHERE name= '" + owner + "'");

var imagesString = rows.fieldByName(button.value);
Ti.API.debug(imagesString)

est dans un écouteur d'événement de clic où la variable « propriétaire » est passé en tant que chaîne.

Ceci est l'erreur que je reçois:

message = "Attempted to access unknown result column 25";

Je n'ai pas trop d'expérience avec sql, donc je ne suis pas sûr de ce que je fais bien et ce que je fais mal. Toute aide est appréciée!

Merci.

Était-ce utile?

La solution

Je ne suis pas sûr tout à fait exactement ce que le problème est, mais les travaux suivants pour moi. Notez que le « ? » la syntaxe de substitution de variable fait en sorte que les valeurs sont citées correctement pour MySQL:

button = e.source;
db = Titanium.Database.open('test');
var rows = db.execute("SELECT * FROM playersTable WHERE name= ?", "foo");
// Theoretically this should be returning a single row. For other results,
// we would loop through the result set using result.next, but here just check if
// we got a valid row.
if (rows.isValidRow()) {
    var imagesString = rows.fieldByName(button.value);
    var id = rows.fieldByName('id');
    imagesString = imagesString + 1;
    Ti.API.info("id = " + id + " val = " + imagesString);
    // The ? substitution syntax doesn't work for column names, so we 
    // still need to stick the button value into the query string.
    db.execute('UPDATE playersTable set "' + button.value +'"= ? where id = ?', imagesString, id);
}
else
{
    Ti.API.info("Row not found.");
}
db.close();

Si vous obtenez l'erreur de ligne introuvable, il est possible que vos données sont correctement insérées ne s'en premier lieu. Voici comment j'inséré ma ligne de test pour le joueur « foo »:

db.execute('insert into playersTable (name, "50", "25") values (?,?,?)', 'foo', 0, 0);

Je pense que cela devrait résoudre votre problème. Laissez-moi savoir si cela ne fonctionne pas pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top