30 votes

La signature tactile de la toile crée un problème dans l'intervalle de téléphone

J'ai trouvé quelques messages liés à "phonegap toile signature", mais ils n'ont pas d'aide. J'ai quelques boîtes déroulantes, des cases de texte, et un champ de signature. Je veux insérer ces champs dans la Base de données sqlite.

Ma base de données création de la table ressemble à ceci:

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

Lire les valeurs de champ comme normal pour le texte et la liste déroulante pour toile de champ de signature, c'est comme

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

Voici le code pour insérer des données:

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

J'ai inclus signe plugin pour les signatures. Maintenant, mon problème est que lorsque je tape dans le champ de signature, les champs de base de données ne sont pas insérées. Aussi lorsque j'essaie de supprimer le signe requête d'insertion et de mettre le moyen de signe aux deux autres de la table (coût et pièces) les valeurs sont également pas inséré. Si je n'ai pas touché le signe des champs, toutes les valeurs sont insérés avec succès pour l'image de l'insère le toDataurl (format.

J'ai seulement eu cette erreur dans la trace de la pile:

sqlite (23) not authorised.

Merci de donner la solution à ce.

EDIT: J'ai aussi essayé ceci:

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

1voto

Emil Borconi Points 1031

Eh bien, il peut être à partir de nombreux endroits.

1er de tous, vous de le tester sur Android (2.3 ou moins)? Si donc, que le problème n'est probablement qu' .toDataUrl() n'est pas pris en charge par Android du navigateur par défaut, ce qui signifie qu'il ne fonctionnera pas dans PhoneGap soit.

Alors d'abord je pense que vous suggérons de le faire est de vérifier que vous avez vraiment une chaîne dans kundensUnderSkrift.

2ème parfois WebSql peut être difficile, je vais donc, pour être sur le côté sûr, je vais l'utiliser pour créer la table:

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

WebSql mises à jour ne semble pas fonctionner à tous, alors assurez-vous d'effacer des données ou de le désinstaller en haut, que de donner un autre aller.

3e Votre déclaration afin de regarder de mal:

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

Devrait être:

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

Si après avoir vérifié tous les points 3 ça ne marche toujours pas, je vous suggère d'essayer le suivant LAID approche:

tx.executeSql("insert into sign(orderNr,sign,rapport) values('"+nr+"','"+ kundensUnderSkrift+"','"+rapport+"');",[],function(tx,success){alert("ALL OK");},function(tx,error){alert(error.message);});

Vous pouvez utiliser la console.journal de la place de l'alerte, mais sur mobile, je trouve ça beaucoup plus facile de faire de débogage avec alerte. (à l'exception de windows phone, où l'alerte n'est pas pris en charge par défaut).

Laissez-moi savoir si cela vous a aidé.

1voto

Stepan Riha Points 1031

Vous devriez vraiment transmettre des rappels d'erreur aux méthodes transaction() et executeSql() - cela vous aidera à déboguer vos opérations de base de données en cours de développement. Vous voudrez utiliser autre chose que alert() pour la gestion des erreurs en production.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X