2013-01-16 3 views
9

Mam działającą transakcję bazy danych PhoneGap, w której mogę uruchomić kwerendę sql i przetworzyć wyniki. Jednak w celu umożliwienia ponownego użycia, muszę być w stanie przekazać argumenty do funkcji zapytań. Powinien istnieć lepszy sposób niż deklarowanie zmiennych globalnych i uzyskiwanie do nich dostępu/resetowanie w funkcji zapytania. Wdzięczni za każdą pomoc w konwersji to:jak przekazywać argumenty do funkcji transakcji bazy danych PhoneGap

//update images function 
    function updateGalleryCovers() { 
     var db = window.openDatabase("test db", "1.0", "Cordova DB", 200000); 
     db.transaction(queryDB_u_g, errorCB); 
    } 
    //Query the database 
    function queryDB_u_g(tx) { 
     var query = 'SELECT cover_img, objectId FROM USER_GALLERY WHERE userId="'+getUserId()+'"'; 
     tx.executeSql(query, [], querySuccess_u_g, errorCB); 
    } 
//Query success callback 
function querySuccess_u_g(tx, results) { 
    var len = results.rows.length; 
    for (var i=0; i<len; i++){ 
     // process results 
    } 
} 

do czegoś takiego:

//update images function 
    function updateGalleryCovers(userid) { 
     var db = window.openDatabase("test db", "1.0", "Cordova DB", 200000); 
     db.transaction(queryDB_u_g, userid, errorCB); 
    } 
    //Query the database 
    function queryDB_u_g(tx, userid) { 
     var query = 'SELECT cover_img, objectId FROM USER_GALLERY WHERE userId="'+userid+'"'; 
     tx.executeSql(query, [], querySuccess_u_g, errorCB); 
    } 
//Query success callback 
function querySuccess_u_g(tx, results) { 
    var len = results.rows.length; 
    for (var i=0; i<len; i++){ 
     // process results 
    } 
} 

Dzięki!

+0

A dlaczego twój drugi przykład nie działa? Jestem pewien, że możesz przekazać zmienne do funkcji i użyć ich. – Leeish

+0

@Leeish: Metoda phonegap Database.transaction() akceptuje nazwy funkcji, które wykonują zapytanie, a następnie nazwy funkcji wywołania zwrotnego. Nie ma przepisu na przekazywanie argumentów, które znam. http://docs.phonegap.com/en/2.3.0/cordova_storage_storage.md.html#Database – nikhilw

+0

Pozwól mi spojrzeć na niektóre z mojego kodu ... – Leeish

Odpowiedz

13

Funkcje transakcji są oferowane przez sqlite, a nie phonegap. To prawda, że ​​nie można przekazać dodatkowych zmiennych do funkcji, ponieważ metoda podpisu akceptuje sqlite.

Ale tutaj jest obejście dla tego samego:

db_conn.transaction(function(tx){ your_function(tx, parameter1, parameter2) }, ErrorCallBack); 

Tutaj jesteś przejazdem obojętne funkcję do sukcesu zwrotnego transakcji i biorąc przedmiot transakcji wraz z nim.

Nadzieję, że pomaga

+0

, który działa. dzięki! – nikhilw

+0

co oznacza tx? –

+0

tx tutaj oznacza "transakcję" – SHANK