Я нашел обходной путь, но я полностью озадачен проблемой, с которой я столкнулся в Adobe Air и SQLite.Запрос UPDATE
, который, как я считаю, работал правильно ранее в процессе разработки, неожиданно начал сбой с ошибкой details:'could not convert text value to numeric value.', operation:'execute', detailID:'2300'
.Несколько часов спустя я обнаружил, что если я включил в запрос довольно нерелевантный столбец, установив его в произвольное значение, проблема исчезнет.К счастью, это никак не повлияло на бизнес-логику, поэтому я оставлю все как есть.Однако я ненавижу подобные загадки.Кто-нибудь может подумать о том, что могло случиться?
(Изменить: Извините, я допустил ошибку в своем коде. Последние два запроса были идентичны в моем исходном сообщении. На самом деле, запрос UPDATE
работал только тогда, когда я также добавил locked = null
или locked = 0
к запросу. Если я не установлю это значение, запрос завершится неудачей. Я сделал все, что мог, чтобы обойти это, включая перестройку файла базы данных.)
Вот определение таблицы:
CREATE TABLE cars (
car_id INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT NULL,
cargroup_id NUMERIC,
starting_ordinal NUMERIC,
ending_ordinal NUMERIC,
locked NUMERIC
);
Этот запрос всегда работал:
var query = new Query(
"UPDATE cars SET locked = (car_id = ?) WHERE cargroup_id = ?",
[intCarId,intCargroupId],
success,failure
);
Этот запрос не выполнен с вышеуказанной ошибкой ([править]):
var query = new Query(
"UPDATE cars SET starting_ordinal = ?, ending_ordinal = ?, cargroup_id = ? WHERE car_id = ?",
[
parseInt(objPayout.starting_ordinal,10),
parseInt(objPayout.ending_ordinal,10),
parseInt(objPayout.cargroup_id,10),
parseInt(objPayout.car_id,10)
],
success,failure
);
Я решил проблему с помощьюизменив запрос на это:
var query = new Query(
"UPDATE cars SET starting_ordinal = ?, ending_ordinal = ?, cargroup_id = ?, locked = null WHERE car_id = ?",
[
parseInt(objPayout.starting_ordinal,10),
parseInt(objPayout.ending_ordinal,10),
parseInt(objPayout.cargroup_id,10),
parseInt(objPayout.car_id,10)
],
success,failure
);