Frage

Ich habe mich überall umgesehen, aber ich kann nicht genau finden, was ich versuche zu tun. Es sollte ziemlich einfach sein ...

Ich habe eine DB -Tabelle wie folgt eingerichtet:

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 )');

Ich habe zwei Tasten mit einem zugewiesenen Wert von 25 bzw. 50. Jede Taste hat eine "Wert" -Taste, bei der ich ihre Werte zuweist. Ich versuche drei Dinge zu erreichen: Wenn eine Taste gedrückt wird, finden Sie die Spalte des entsprechenden Werts. Erhöhen Sie den Wert dieser Spalte um 1. Rufen Sie den neuen Wert und den Konsolenprotokoll ab.

So sieht mein Code aus, wenn eine Taste gedrückt wird:

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

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

Dies ist alles in einem Click -Event -Listener, in dem der Variable "Eigentümer" als Zeichenfolge übergeben wird.

Dies ist der Fehler, den ich bekomme:

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

Ich habe nicht zu viel Erfahrung mit SQL, also bin ich mir nicht sicher, was ich richtig mache und was ich falsch mache. Jede Hilfe wird geschätzt!

Vielen Dank.

War es hilfreich?

Lösung

Ich bin mir nicht sicher, was das Problem ist, aber die folgenden Funktionen für mich. Notiere dass der "?" Die variable Substitutionssyntax stellt sicher, dass die Werte für MySQL ordnungsgemäß angegeben werden:

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();

Wenn Sie den nicht gefundenen Fehler erhalten, ist dies möglich, dass Ihre Daten nicht in erster Linie ordnungsgemäß eingefügt werden. So habe ich meine Testzeile für Spieler "Foo" eingefügt:

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

Ich denke, das sollte Ihr Problem lösen. Lassen Sie mich wissen, ob das für Sie nicht funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top