Pregunta

He mirado a todas partes, pero parece que no puedo encontrar exactamente lo que estoy tratando de hacer. Debería ser bastante simple ...

Tengo una mesa DB configurada así:

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

Tengo dos botones con un valor asignado de 25 y 50, respectivamente. Cada botón tiene una tecla "Valor", donde asigno sus valores. Estoy tratando de lograr tres cosas: cuando se presiona un botón, busque la columna del valor correspondiente. Aumente el valor de esta columna por 1. Recupere el nuevo valor y el registro de la consola.

Así es como se ve mi código cuando se presiona un botón:

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

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

Todo esto está en un escucha de eventos de clic donde se pasa la variable "propietario" como cadena.

Este es el error que recibo:

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

No tengo demasiada experiencia con SQL, así que no estoy seguro de lo que estoy haciendo bien y qué estoy haciendo mal. ¡Se agradece cualquier ayuda!

Gracias.

¿Fue útil?

Solución

No estoy seguro exactamente cuál es el problema, pero lo siguiente funciona para mí. Tenga en cuenta que el "?" La sintaxis de sustitución variable se asegura de que los valores se citen correctamente para 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 obtiene el error de la fila no encontrado, es posible que sus datos no se inserten correctamente en primer lugar. Así es como inserté mi fila de prueba para el jugador "foo":

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

Creo que esto debería resolver tu problema. Avísame si esto no funciona para ti.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top