Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    [AIR] Connessione a database SQLite

    Ciao a tutti,
    sto facendo un pò di prove con AIR e mi sono incastrato con la connessione ai database SQLite.
    Seguendo il tutorial di Adobe ho scritto qualche riga di codice...

    var dbconn = new air.SQLConnection();
    dbconn.addEventListener(air.SQLEvent.OPEN,connecti onOK);
    dbconn.addEventListener(air.SQLErrorEvent.ERROR.co nnectionKO);

    var file = air.File.applicationResourceDirectory.resolve("dem o.db");
    air.trace(file.exists);
    dbconn.open(file,true);
    air.trace(dbconn.connected);

    var sqlRequest = new air.SQLStatement();
    sqlRequest.sqlConnection = dbconn;
    sqlRequest.text = "SELECT * FROM table";
    sqlRequest.addEventListener(air.SQLEvent.RESULT,sh owData);
    sqlRequest.addEventListener(air.SQLErrorEvent.ERRO R,selectKO);
    sqlRequest.execute();

    dbconn.close();

    (...tralascio il codice dei gestori degli eventi...)

    La connessione al db sembra riuscire (perchè viene eseguita la funzione connectionOK) ma quando viene eseguito il metodo execute() la console riporta questo errore:
    "Associated database must be open to perform this operation"

    Ho verificato che il file viene trovato (con file.exists) ma la connessione non viene eseguita (dbconn.connected ritorna false) nonostante si verifichi l'evento OPEN.

    Cosa sbaglio? Forse è colpa del formato del database? (l'ho creato con SQLite Administrator)

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Perdona l'ignoranza... ma che e' AIR? :master: di quale linguaggio stai parlando? sei lato server o lato client?

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    AIR (Adobe Integrated Runtime) è il nuovo nome di Apollo.

    Trattasi di tecnologia che consente di inglobare in un exe pagine (X)HTML, javascript (e actionscript), CSS, SWF per creare applicazioni desktop.

    Per l'interazione con i dati si appoggia ad una API javascript che consente di colloquiare in locale con db in formato SQLite. In alternativa si può impiegare Flex e colloquiare tramite file XML con script server side e database remoti (es. file PHP che estraggono informazioni da database MySQL).

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    non ho ancora avuto modo di vedere AIR nè la sua API, perciò probabilmente non potrò esserti molto d'aiuto... comunque ci provo

    generalmente in AS quello che succede è che le informazioni sono utilizzabili ed esistono solo quando la sorgente di dati è effettivamente fruibile (caricamento ecc...)
    perciò non vorrei che il problema fosse rappresentato dal fatto che questo codice è incompleto di un evento tipo onLoad di LoadVars

    magari se hai un link alla reference, o al tutorial di cui parli, si può ricavare qualcosa insieme

  5. #5
    Ciao and80,
    grazie dell'interessamento!

    Qua trovi l'SDK e la documentazione (quella disponibile online è più scarna):
    AIR SDK

    Dezippando troverai il file dev_guide_html.pdf.
    Il capitolo 18 riguarda i database...

    Come dicevo sopra ho creato il db usando SQLite Admin e temo di aver "cappellato" qualcosa. Vorrei provare a creare il db direttamente via javascript e vedere che succede...

    Ti aggiorno sugli esiti

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    ok, quindi dovrebbe essere come dicevo io, esistono due eventi che gestiscono l'errore e il corretto caricamento

    var conn = new air.SQLConnection();
    conn.addEventListener(air.SQLEvent.OPEN, openHandler);
    conn.addEventListener(air.SQLErrorEvent.ERROR, errorHandler);
    var dbFile = air.File.applicationStorageDirectory.resolve("DBSa mple.db");
    conn.open(dbFile, false);
    function openHandler(event)
    {
    air.trace("the database was opened successfully");
    }
    function errorHandler(event)
    {
    air.trace("Error code:", event.error.code);
    air.trace("Details:", event.error.message);
    }


    ed è lì dentro che devi scrivere le operazioni di utilizzo del database, i trace ecc... e probabilmente anche il comando execute() che invece nel tuo codice è a spasso

  7. #7
    Hai assolutamente ragione... il mio execute() era un pò fuori luogo...

    Adesso il codice diventa:

    var dbconn = new air.SQLConnection();
    dbconn.addEventListener(air.SQLEvent.OPEN, function(){connectionOK(dbconn)});
    var file = air.File.applicationResourceDirectory.resolve("dem o.db");
    dbconn.open(file,false);

    function connectionOK(dbconn) {
    air.trace(dbconn.connected);
    var sqlRequest = new air.SQLStatement();
    sqlRequest.sqlConnection = dbconn;
    sqlRequest.text = "SELECT * FROM pages";
    sqlRequest.addEventListener(air.SQLEvent.RESULT,sh owData);
    sqlRequest.addEventListener(air.SQLErrorEvent.ERRO R,selectKO);
    sqlRequest.execute();
    }

    function showData(event) {
    alert('ok');
    }

    Gia meglio...
    ma adesso mi ritorna un errore sul solito execute(): TypeError Undefined value

    Ci smanetto ancora...

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    ma con il codice di base fornito dalla reference non riesci a ricavare nulla?

    Codice PHP:
    var conn = new air.SQLConnection();
    conn.addEventListener(air.SQLEvent.OPENopenHandler);
    conn.addEventListener(air.SQLErrorEvent.ERRORerrorHandler);
    var 
    dbFile air.File.applicationStorageDirectory.resolve("DBSample.db");
    conn.open(dbFilefalse);
    function 
    openHandler(event) {
        
    air.trace("the database was opened successfully");
    }
    function 
    errorHandler(event) {
        
    air.trace("Error code:"event.error.code);
        
    air.trace("Details:"event.error.message);
    }
    var 
    selectStmt = new air.SQLStatement();
    selectStmt.sqlConnection conn;
    var 
    sql "SELECT firstName, lastName "+"FROM employees";
    selectStmt.text sql;
    selectStmt.addEventListener(air.SQLEvent.RESULTselectResult);
    selectStmt.addEventListener(air.SQLErrorEvent.ERRORselectError);
    selectStmt.execute();
    function 
    selectResult(event) {
        var 
    result selectStmt.getResult();
        var 
    numRows result.data.length;
        for (
    i=0i<numRowsi++) {
            var 
    output "";
            for (
    columnName in result.data[i]) {
                
    output += columnName+": "+result.data[i][columnName]+"; ";
            }
            
    air.trace("row["+i.toString()+"]\t"output);
        }
    }
    function 
    selectError(event) {
        
    air.trace("Error code:"event.error.code);
        
    air.trace("Details:"event.error.message);


  9. #9
    Il primo problema è su...
    var dbFile = air.File.applicationStorageDirectory.resolve("DBSa mple.db");

    Non trova il file anche se esiste! La soluzione è usare...
    var dbFile = air.File.applicationResourceDirectory.resolve("DBS ample.db");

    Fatto ciò l'errore passa sull'execute():
    Associated database must be open to perform this operation

    Spostando l'execute, come giustamente mi hai fatto notare, dentro il gestore OPEN riconosce che il file è stato correttamente aperto (conn.connected ritorna true) ma comunque ritorna l'errore TypeError: undefined value



    Ovviamente bloccandosi sull'execute non chiama il gestore selectResult()

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    sto provando ad installare la beta di AIR sul mio terminale, anche se penso che mi servirà a poco, visto che ho flash 8

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.