Прикосновение подписи к холсту создает проблему в телефонной зазоре
Я нашел несколько сообщений, связанных с "подписью canvas phonegap", но они не помогли. У меня есть раскрывающиеся ящики, текстовые поля и одно поле подписи. Я хочу вставить эти поля в базу данных sqlite.
Создание моей таблицы базы данных выглядит следующим образом:
tx.executeSql("CREATE TABLE IF NOT EXISTS parts(id INTEGER PRIMARY KEY AUTOINCREMENT,nr,productId,description,toolsVerified)");
tx.executeSql("CREATE TABLE IF NOT EXISTS costs(id INTEGER PRIMARY KEY AUTOINCREMENT,nr,date,starttime,endtime,reason,cost)");
tx.executeSql("CREATE TABLE IF NOT EXISTS sign(orderNr unique ,rapport,sign)");
Прочитайте значения полей, такие как нормальные для текста и выпадающего списка для поля подписи в виде холста, как
kundusSign = $("#mKundusskirt")[0];
kundensUnderSkrift = kundusSign.toDataURL();
Вот код для вставки данных:
db
.transaction(function(tx) {
// for parts table
tx
.executeSql(
"insert into parts(nr,productid,description,toolsVerified) values(?,?,?,?)",
[ nr, productId, desc, tool ]);
// for cost table
tx
.executeSql(
"insert into costs(nr,date,starttime,endtime,reason,cost) values (?,?,?,?,?,?)",
[ nr, date, startTime, endTime, reason, cost ]);
// for sign table
signQuery = 'UNION SELECT ' + nr + ", '" + rapport + "','"
+ kundensUnderSkrift + "'";
tx
.executeSql('insert or replace into "sign" SELECT "orderNr","rapport","sign"'
+ signQuery);
});
Я включил подпись плагина для подписей. Теперь моя проблема заключается в том, что при вводе поля подписи поля базы данных не вставляются. Также, когда я пытаюсь удалить запрос вставки знака и поместить знак, значения двух других таблиц (стоимость и части) также не вставлены. Если я не коснулся знаковых полей, все значения вставляются успешно для изображения вставки формата toDataurl().
Я получил эту ошибку только в трассировке стека:
sqlite (23) not authorised
.
Пожалуйста, дайте некоторое решение.
EDIT:
Я также пробовал это:
tx.executeSql("insert into sign(orderNr,sign,rapport)values(?,?,?)",[nr,rapport,kundensUnderSkrift]);
Ответы
Ответ 1
Ну, это может быть из многих мест.
В первую очередь вы тестируете его на Android (2.3 или ниже)? Если это так, то проблема, скорее всего, в том, что .toDataUrl()
не поддерживается браузером Android по умолчанию, что означает, что он не будет работать и в PhoneGap.
Итак, сначала подумайте, что я предлагаю вам дважды проверить, что у вас действительно есть строка в kundensUnderSkrift.
Вторая иногда WebSql может быть сложной. Я буду так уверен, что буду использовать ее для создания таблицы:
tx.executeSql("CREATE TABLE IF NOT EXISTS sign(orderNr unique ,rapport,sign STRING)");
Обновления WebSql, похоже, вообще не работают, поэтому убедитесь, что вы очистили данные или удалили их, а затем отпустите еще один.
Третий Ваш заказ выглядит неправильно:
tx.executeSql("insert into sign(orderNr,sign,rapport)values(?,?,?)",[nr,rapport,kundensUnderSkrift]);
Должно быть:
tx.executeSql("insert into sign(orderNr,rapport,sign)values(?,?,?)",[nr,rapport,kundensUnderSkrift]);
Если после проверки всех 3 пунктов он все еще не работает, я предлагаю попробовать следующий подход UGLY:
tx.executeSql("insert into sign(orderNr,sign,rapport) values('"+nr+"','"+ kundensUnderSkrift+"','"+rapport+"');",[],function(tx,success){alert("ALL OK");},function(tx,error){alert(error.message);});
Вы можете использовать console.log вместо предупреждения, но на мобильном устройстве мне гораздо легче выполнить отладку с помощью предупреждения. (за исключением окна телефона, где предупреждение по умолчанию не поддерживается).
Сообщите мне, помогло ли вам это.
Ответ 2
Вы действительно должны передавать обратные вызовы ошибок методам transaction()
и executeSql()
- это поможет отладить ваши операции с базой данных в процессе разработки. Вы хотите использовать что-то отличное от alert()
для обработки ошибок в процессе производства.
db.transaction(function(tx) {
// for parts table
tx.executeSql(
"insert into parts(nr,productid,description,toolsVerified) values(?,?,?,?)",
[ nr, productId, desc, tool ],
null, sqlError
);
// for cost table
tx.executeSql(
"insert into costs(nr,date,starttime,endtime,reason,cost) values (?,?,?,?,?,?)",
[ nr, date, startTime, endTime, reason, cost ],
null, sqlError
);
// for sign table
tx.executeSql(
'insert or replace into sign(orderNr,rapport,sign) values (?,?,?)'
[nr, rapport, kundensUnderSkrift],
null, sqlError
);
}, xactError);
function sqlError(tx, err) {
alert("Statement failed: " + err.message);
}
function xactError(err) {
alert("Transaction failed: " + err.message);
}