Domanda

Ho guardato dappertutto, ma io non riesco a trovare esattamente quello che sto cercando di fare. Dovrebbe essere abbastanza semplice ...

Ho una tabella db creato in questo modo:

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

Ho due pulsanti con un valore assegnato di 25, e 50, rispettivamente. Ogni tasto ha un tasto "valore", dove ho assegnare loro valori. Sto cercando di realizzare tre cose: Quando si preme un pulsante, per la colonna di valore corrispondente. aumentare il valore di questa colonna 1. Recuperare il nuovo valore e console di log di esso.

Questo è ciò che il mio aspetto di codice, come quando si preme un pulsante:

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

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

Questo è tutto in un ascoltatore di eventi click dove il "proprietario" variabile è passato come una stringa.

Questo è l'errore che ottengo:

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

Non ho troppa esperienza con SQL, quindi non sono sicuro di quello che sto facendo e quello che sto facendo male. Ogni aiuto è apprezzato!

Grazie.

È stato utile?

Soluzione

Non sono sicuro del tutto esattamente qual è il problema, ma i seguenti lavori per me. Si noti che il "?" sintassi sostituzione delle variabili fa in modo che i valori sono espressi in modo corretto per 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();

Se si ottiene l'errore fila non trovato, è possibile i dati non è sempre inseriti correttamente in primo luogo. Ecco come ho inserito il mio riga di test per il giocatore "pippo":

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

Credo che questo dovrebbe risolvere il problema. Fammi sapere se questo non funziona per voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top