Подтвердить что ты не робот

Прикосновение подписи к холсту создает проблему в телефонной зазоре

Я нашел несколько сообщений, связанных с "подписью 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]);
4b9b3361

Ответ 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);
}