El tacto de la firma de la lona crea la edición en teléfono

Encontré unos cuantos posts relacionados con "phonegap canvas signature" pero no ayudaron. Tengo algunos cuadros de la gota abajo, cuadros de texto, y un campo de la firma. Quiero insertar estos campos en sqlite Database.

Mi creación de la tabla de base de datos se ve así:

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

Lea los valores de campo como normal para el texto y el cuadro desplegable para la firma de lienzo es como

 kundusSign = $("#mKundusskirt")[0]; kundensUnderSkrift = kundusSign.toDataURL(); 

Aquí está el código para insertar datos:

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

Incluí plugin de signo para firmas. Ahora mi problema es que cuando escribo en el campo de la firma, los campos de la base de datos no se insertan. También cuando intento quitar la muestra inserte la pregunta y ponga la muestra significa que los otros dos valores de la tabla (coste y piezas) también no se insertan. Si no toco los campos de signo, todos los valores se insertan correctamente para la imagen y se inserta el formato toDataurl ().

Sólo tengo este error en el seguimiento de pila:

sqlite (23) not authorised .

Por favor dé una solución a esto.

EDIT: También he intentado esto:

 tx.executeSql("insert into sign(orderNr,sign,rapport)values(?,?,?)",[nr,rapport,kundensUnderSkrift]); 

Bueno, puede ser de muchos lugares.

En primer lugar, ¿lo está probando en Android (2,3 o inferior)? Si es así, probablemente el problema es que .toDataUrl() no es compatible con el navegador predeterminado de Android, lo que significa que no funcionará en PhoneGap tampoco.

Así que primero creo que te sugiero que hacer es comprobar que realmente tienes una cadena en kundensUnderSkrift.

2 veces a veces WebSql puede ser complicado Voy a estar en el lado seguro Voy a utilizar esto para crear la mesa:

 tx.executeSql("CREATE TABLE IF NOT EXISTS sign(orderNr unique ,rapport,sign STRING)"); 

Actualizaciones WebSql no parecen funcionar en absoluto, así que asegúrese de borrar los datos o desinstalar, que darle otra oportunidad.

3er Su orden de la orden parece incorrecta:

 tx.executeSql("insert into sign(orderNr,sign,rapport)values(?,?,?)",[nr,rapport,kundensUnderSkrift]); 

Debiera ser:

 tx.executeSql("insert into sign(orderNr,rapport,sign)values(?,?,?)",[nr,rapport,kundensUnderSkrift]); 

Si después de revisar los 3 puntos sigue sin funcionar, le sugeriré que pruebe el siguiente enfoque 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);}); 

Usted puede utilizar console.log en lugar de alerta, pero en el móvil me resulta mucho más fácil hacer la depuración con alerta. (Excepto el teléfono de Windows, donde no se admite la alerta de forma predeterminada).

Déjame saber si esto te ayudó.

Realmente debería pasar las devoluciones de error a transaction() métodos transaction() y executeSql() – le ayudará a depurar las operaciones de la base de datos en desarrollo. Deseará utilizar algo distinto de alert() para el manejo de errores en la producción.

 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); } 
  • ¿Es posible usar Couch DB o MySql o cualquier otro DB en Android?
  • Android Room: ¿Cómo modelar las relaciones?
  • SQLiteDatabase getWritableDatabase () no funciona
  • Cómo actualizar la base de datos Sqlite para una sola columna utilizando cláusula WHERE en android
  • Android.database.sqlite.SQLiteException: no hay tal columna
  • Tabla de actualización de Android sqlite siempre devuelve 0
  • ¿Tengo que usar _ID como una clave primaria de SQlite? Y tiene que ser un INT? (Android Dev)
  • ¿Cómo aceptar cadenas aproximadamente correctas como correctas, al comparar?
  • Cómo utilizar una base de datos existente con una aplicación de Android
  • El método SQLite .query (), la cláusula WHERE solo toma cadenas de comillas dobles
  • Android: filtrar un SimpleCursorAdapter ListView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.