Autore Topic: query sqlite3  (Letto 5625 volte)

g.paolo

  • Visitatore
query sqlite3
« il: 05 Maggio 2008, 14:52:35 »
Mi trovo a dover creare una nuova tabella via codice, ma tutte le varie sintassi provate finora mi hanno sempre restituito errori.
Un tipo di sintassi che ho usato è la seguente:
sql = "CREATE TABLE 'prova' ('id' INTEGER PRIMARY KEY, 'prova' CHAR)"
result = conn.exec(sql)
In altri esempi ho trovato l'omissione degli apici, ma anche in tal modo non sembra funzionare.
Avete gia risolto questo problema?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: query sqlite3
« Risposta #1 il: 05 Maggio 2008, 15:48:21 »
Prova a mettere il punto e virgola ";" finale in fondo alla stringa; lo standard lo prevede per chiudere il comando SQL.
Inoltre, non serve mettere il risultato dell'exec in una variabile, perchè il comando non restituisce nulla, a meno che non si verifichi un errore, nel qual caso devi andarlo a tracciare con la classe Error o con TRY...CATCH.

g.paolo

  • Visitatore
Re: query sqlite3
« Risposta #2 il: 05 Maggio 2008, 18:56:51 »
Come al solito sei sempre tu che mi rispondi, sei impagabile!
Ora provo a fare come dici, a volte una semplice sciocchezza ti fa perdere ore intere!

g.paolo

  • Visitatore
Re: query sqlite3
« Risposta #3 il: 05 Maggio 2008, 19:24:35 »
Niente da fare, non capisco proprio!
Questo è il codice che ho provato, ma l'errore è sempre lo stesso:
Query failed: SQL error or missing database

Codice: [Seleziona]
WITH connessione 
        .Name = user.home & nomeDB                            
        .Type = "sqlite3"
        .OPEN
        .Begin
       
        sql = "CREATE TABLE prova("
        "id integer NOT NULL primary key autoincrement, "
        "descrizione char);"

        .Exec(sql)
        .Commit
        .Close
END WITH
CATCH
    Message.Error(Error.Text)
    connessione.Close    
END

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: query sqlite3
« Risposta #4 il: 05 Maggio 2008, 20:25:12 »
nei parametri di connessione non hai impostato il parametro host (percorso)
inoltre prova anche a indicare la lunghezza anche per i campi integer (a parte l' id)

Codice: [Seleziona]

WITH connessione
        .Name = user.home & nomeDB                            
        .Type = "sqlite3"
        .Host=percorso del db
        .OPEN
        .Begin
       
        sql = "CREATE TABLE 'prova' ("id INTEGER PRIMARY KEY,"
        sql=sql & " 'descrizione' VARCHAR(255) DEFAULT NULL);"

        .Exec(sql)
        .Commit
        .Close
END WITH
CATCH
    Message.Error(Error.Text)
    connessione.Close    
END
 

così dovrebbe funzionare

g.paolo

  • Visitatore
Re: query sqlite3
« Risposta #5 il: 05 Maggio 2008, 20:55:30 »
Il problema non sta nell'host visto che tutto il resto funziona perfettamente. Infatti il "name" contiene gia il percorso corretto del DB.
Ho provato a copiare le righe del tuo comando SQL ma l'errore continua, stavolta col messaggio "unexpected id".
Ho provato a modificare ancora la sintassi, ma la cosa non vuole proprio andare!

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: query sqlite3
« Risposta #6 il: 05 Maggio 2008, 20:56:51 »
scusa ho fatto un errore  :muro: così è corretto:

Codice: [Seleziona]

WITH connessione
        .Name = user.home & nomeDB                            
        .Type = "sqlite3"
        .Host=percorso del db
        .OPEN
        .Begin
       
        sql = "CREATE TABLE 'prova' ('id' INTEGER PRIMARY KEY,"
        sql=sql & " 'descrizione' VARCHAR(255) DEFAULT NULL);"

        .Exec(sql)
        .Commit
        .Close
END WITH
CATCH
    Message.Error(Error.Text)
    connessione.Close    
END
 

g.paolo

  • Visitatore
Re: query sqlite3
« Risposta #7 il: 05 Maggio 2008, 21:00:56 »
Niente da fare! Stesso errore iniziale.
Il bello è che funziona tutto quanto, qualsiasi comando exec, find. edit, etc.
ma solo col create mi da il problema
La cosa interessante è che il comando non sembra nemmeno avere bisogno del carattere di unione &.
Facendo il debug. il risultato di sql è identico sia nel tuo esempio, sia in questo qui:

        sql = "CREATE TABLE 'prova' ('id' INTEGER PRIMARY KEY,"
                " 'descrizione' VARCHAR(255) DEFAULT NULL);"

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: query sqlite3
« Risposta #8 il: 05 Maggio 2008, 21:05:15 »
impossibile ho proivato a me funziona ti posto il programmino di prova , per ogni tavola nuova cambia il nome nel text box.

non è che stai creando una tavola che gia esiste? (2 tavole con stesso nome?)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: query sqlite3
« Risposta #9 il: 05 Maggio 2008, 21:06:49 »
in questi casi in cui non si capisce bene dovè il problema ti consiglio di commentare le operazioni di ricerca errore così il compilatore si bloccas esattamente nel punto critico

g.paolo

  • Visitatore
Re: query sqlite3
« Risposta #10 il: 05 Maggio 2008, 21:06:54 »
No, no, la tavola non esiste affatto, tranquillo!
Ora provo a caricare il tuo esempio.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: query sqlite3
« Risposta #11 il: 05 Maggio 2008, 21:08:20 »
il risultato deve essere:

Codice: [Seleziona]
sql = "CREATE TABLE 'prova' ('id' INTEGER PRIMARY KEY, 'descrizione' VARCHAR(255) DEFAULT NULL);"

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: query sqlite3
« Risposta #12 il: 05 Maggio 2008, 21:12:59 »
giusto per sicurezza prova ad aprire il bd con sqlitebrow così vedi subito se c'è  qualcosa di strano nel db

g.paolo

  • Visitatore
Re: query sqlite3
« Risposta #13 il: 05 Maggio 2008, 21:15:09 »
Aperto il DB e tutte le tabelle, funziona tutto.
Ma il problema resta. Sto provando col tuo esempio in cui ho dato il mio percorso del DB ma sono alle prese con un'altro errore, stavolta un "null object"

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: query sqlite3
« Risposta #14 il: 05 Maggio 2008, 21:19:27 »
il mio esempio crea un db ..per quello c'è l' errore te lo modifico per fare solo apertura e riposto