Autore Topic: [RISOLTO]query failed: sql error or missing database...WTF???  (Letto 6021 volte)

Offline RiCi12

  • Gamberetto
  • *
  • Post: 46
    • Mostra profilo
    • http://rici12.altervista.org
Io e ditabase andiamo d'amore e d'accordo..

Comunque, dopo aver finito il mio programma, e in attesa che il mio amcio torni a casa per farmi spiegare una cosa(magari, però...vabbé), ho deciso di fare un'altra versione del mio programma, per un pubblico un po' diverso..

Comunque, prendo i pezzi di codice dal vecchio programma (almeno quelli per i database), ma continua, in una maniera a dir poco indecente, a darmi il solito errore, ovvero quello del titolo..

vi mostro un pezzo di codice, un po' confusionario, forse..

Codice: [Seleziona]

nomedb = "registro_del_prof_" & user.Name
  path = user.Home
  WITH $hConn
    .type = "sqlite3"
    .host = path
  END WITH
  $hConn.name = nomedb
  classesel = lstclassi.Text
  lstmat.Clear()
  $hConn.Open()
  sql = "SELECT * FROM mat WHERE classi2 LIKE classesel"
  hres = $hConn.exec(sql)
  FOR EACH hres
    lstmat.Add(hres!mat)
  NEXT
  $hConn.Close()


e mi da errore sul..
Codice: [Seleziona]
hres = $hConn.exec(sql)


però...
Codice: [Seleziona]

$hConn.Close()
    lstclassi.Clear()
    $hConn.Open()
    sql = "SELECT * FROM classe"
    hres = $hConn.exec(sql)
    FOR EACH hres
      lstclassi.Add(hres!classi)
    NEXT
    $hConn.Close()


qui non mi da alcun problema, nulla di nulla..Non riesco a capirlo..E aprendo il database con sqlitebrowser, nessun problema, nulla di nulla..E' tutto in ordine..

thanks..

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: query failed: sql error or missing database...WTF???
« Risposta #1 il: 10 Luglio 2009, 14:54:53 »
hres è dichiarato?

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: query failed: sql error or missing database...WTF???
« Risposta #2 il: 10 Luglio 2009, 15:29:08 »
Citazione

RiCi12 ha scritto:
.......................

Codice: [Seleziona]

nomedb = "registro_del_prof_" & user.Name
  path = user.Home
  WITH $hConn
    .type = "sqlite3"
    .host = path
  END WITH
  $hConn.name = nomedb
  classesel = lstclassi.Text
  lstmat.Clear()
  $hConn.Open()
  sql = "SELECT * FROM mat WHERE classi2 LIKE classesel"
  hres = $hConn.exec(sql)
  FOR EACH hres
    lstmat.Add(hres!mat)
  NEXT
  $hConn.Close()



Uso da poco Sqlite3 e quindi lo conosco altrettanto poco, però secondo me il problema é dentro l'istruzione 'sql=' dove leggo l'uso della funzione LIKE, la quale permette la ricerca di tutti quegli elementi di tabella "classi2" il cui contenuto comprenmda almeno un crt della variabile "classesel". Ecco, mi pare che LIKE desideri che la stringa da ricercare sia compresa fra due "*". Poiché "classesel" contiene un valore proveniente da  "lstclassi.Text", può darsi che manchino proprio gli "*" di delimitazione voluti dalla funzione LIKE. Potresti perciò modificare l'istruzione "sql=" nella seguente:
Codice: [Seleziona]
sql = "SELECT * FROM mat WHERE classi2 LIKE" & "*" & "classesel" & "*"

e riprovare.
Magari, quello che ho notato non c'entra niente, ma provare non fa mai male.  :-)  :ciao:
:ciao:

Offline RiCi12

  • Gamberetto
  • *
  • Post: 46
    • Mostra profilo
    • http://rici12.altervista.org
Re: query failed: sql error or missing database...WTF???
« Risposta #3 il: 10 Luglio 2009, 19:35:22 »
Citazione

Ceskho ha scritto:
hres è dichiarato?


si si...
Citazione

picavbg ha scritto:
Citazione

RiCi12 ha scritto:
.......................

Codice: [Seleziona]

nomedb = "registro_del_prof_" & user.Name
  path = user.Home
  WITH $hConn
    .type = "sqlite3"
    .host = path
  END WITH
  $hConn.name = nomedb
  classesel = lstclassi.Text
  lstmat.Clear()
  $hConn.Open()
  sql = "SELECT * FROM mat WHERE classi2 LIKE classesel"
  hres = $hConn.exec(sql)
  FOR EACH hres
    lstmat.Add(hres!mat)
  NEXT
  $hConn.Close()



Uso da poco Sqlite3 e quindi lo conosco altrettanto poco, però secondo me il problema é dentro l'istruzione 'sql=' dove leggo l'uso della funzione LIKE, la quale permette la ricerca di tutti quegli elementi di tabella "classi2" il cui contenuto comprenmda almeno un crt della variabile "classesel". Ecco, mi pare che LIKE desideri che la stringa da ricercare sia compresa fra due "*". Poiché "classesel" contiene un valore proveniente da  "lstclassi.Text", può darsi che manchino proprio gli "*" di delimitazione voluti dalla funzione LIKE. Potresti perciò modificare l'istruzione "sql=" nella seguente:
Codice: [Seleziona]
sql = "SELECT * FROM mat WHERE classi2 LIKE" & "*" & "classesel" & "*"

e riprovare.
Magari, quello che ho notato non c'entra niente, ma provare non fa mai male.  :-)  :ciao:


giusta osservazione, ma quello li non è un problema. Mi son visto costretto, nel programma precedente, a fare in modo che cercasse solo la parola esatta, e avevo risolto così...
Codice: [Seleziona]
sql = "SELECT * FROM voti WHERE materia2 LIKE '" & materiasel & "'"

Risolvendo perfettamente..

Il problema, però non si va a risolvere: com'è possibile che in parte vada e in parte no? Lo stesso pezzo di codice, oltretutto. Non ha minimamente senso..
Comunque, vi posto il pezzo di codice incriminato: praticamente, all'avvio(form_open), gli faccio controllare se esiste tale database, altrimenti lo crea. Se già esiste, mi va a leggere i valori in esso contenuto, e mi prende le varie classi e me le mette in una listbox.. E basta..E già qui non va, dandomi l'errore sull'hres = bla bla bla..Se cancello il database, e uso dei valori che inserisco at the moment( senza usvire dal programma), il pezzo riportato sopra va', tranquillamente(quello segnalato come funzionante)
Comunque..
Codice: [Seleziona]
PUBLIC SUB Form_Open()
  nomedb = "registro_del_prof_" & user.Name
  path = user.Home
   
  WITH $hConn
    .type = "sqlite3"
    .host = path
  END WITH
 
  $hConn.Open()
  IF NOT $hConn.Databases.Exist(nomedb) THEN
    $hConn.databases.Add(nomedb)
    $hConn.name = nomedb

    $hConn.Close()

    $hConn.Open()
   
    sql = "CREATE TABLE 'classe' ('id' INTEGER PRIMARY KEY, 'classi' VARCHAR(255) DEFAULT NULL);"
    htable = $hConn.exec(sql)
    sql = "CREATE TABLE 'mat' ('id' INTEGER PRIMARY KEY, 'classi2' VARCHAR(255) DEFAULT NULL, 'materia' VARCHAR(255) DEFAULT NULL);"
    htable = $hConn.exec(sql)
    sql = "CREATE TABLE 'stud' ('id' INTEGER PRIMARY KEY, 'classi3' VARCHAR(255) DEFAULT NULL, 'stud' VARCHAR(255) DEFAULT NULL);"
    htable = $hConn.exec(sql)
    sql = "CREATE TABLE 'voti' ('id' INTEGER PRIMARY KEY, 'materia2' VARCHAR(255) DEFAULT NULL, 'voto' VARCHAR(255) DEFAULT NULL, 'stud2' VARCHAR(255) DEFAULT NULL);"
    htable = $hConn.exec(sql)
    $hConn.Close()
ELSE  
  lstclassi.Clear()
  $hConn.Close()
  $hConn.Open()
  sql = "SELECT * FROM classe"
  hres = $hConn.exec(sql)
  FOR EACH hres
    lstclassi.Add(hres!classi)
  NEXT
  $hConn.Close()
   
ENDIF
END

l'errore lo riporta li, solo li...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: query failed: sql error or missing database...WTF???
« Risposta #4 il: 10 Luglio 2009, 19:51:13 »
posta il valore di sql quando va in errore(chiudi il messaggio di errore e selezioni la variabile sql , compare un balloon con il valore della variabile).

Offline RiCi12

  • Gamberetto
  • *
  • Post: 46
    • Mostra profilo
    • http://rici12.altervista.org
Re: query failed: sql error or missing database...WTF???
« Risposta #5 il: 10 Luglio 2009, 20:30:32 »
mmmm,strano,mi ripete questo...

Codice: [Seleziona]
"SELECT * FROM classe"


E, hres, assume valore "null"

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: query failed: sql error or missing database...WTF???
« Risposta #6 il: 10 Luglio 2009, 22:25:14 »
@  RiCi12:
Domanda stupida: Sei sicuro chhe la tabella "mat" del DB non sia vuota?
mi viene in mente una prova. Visto  che
Citazione
sql = "SELECT * FROM mat WHERE classi2 LIKE classesel"

é diversa da

sql = "SELECT * FROM mat"

perché non estrai la funzione "Where dalla riga sql e la trasferisci nella riga for each", cioé:
Codice: [Seleziona]
 sql = "SELECT * FROM mat"
  hres = $hConn.exec(sql)
  FOR EACH hres
        WHERE hres!classi2 LIKE classesel
    lstmat.Add(hres!mat)
  NEXT
  $hConn.Close()
:ciao:

Offline RiCi12

  • Gamberetto
  • *
  • Post: 46
    • Mostra profilo
    • http://rici12.altervista.org
Re: query failed: sql error or missing database...WTF???
« Risposta #7 il: 10 Luglio 2009, 22:46:03 »
no quella parte funziona perfettamente, ho fatto numerose prove, e la ricerca, e il "cambio", funzionano alla perfezione, il problema non sussiste.

Il problema dell'errore si verifica soltanto con il pezzo di codice riferito all'avvio..

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: query failed: sql error or missing database...WTF???
« Risposta #8 il: 10 Luglio 2009, 23:52:03 »
potresti allegare l' intero progetto così facciamo delle prove

Offline RiCi12

  • Gamberetto
  • *
  • Post: 46
    • Mostra profilo
    • http://rici12.altervista.org
Re: query failed: sql error or missing database...WTF???
« Risposta #9 il: 11 Luglio 2009, 13:27:01 »
mmm, ok, ma lo posso postare solo domani, mi dispiace(anzi, vi ringrazio), perché sono su un altro pc, e non ho i sorgenti..

Offline RiCi12

  • Gamberetto
  • *
  • Post: 46
    • Mostra profilo
    • http://rici12.altervista.org
Re: query failed: sql error or missing database...WTF???
« Risposta #10 il: 12 Luglio 2009, 20:48:14 »
allora, ecco i sorgenti. Non ho avuto il tempo di commentarli, mi dispiace. Cercherò di uploadarli di nuovo, con un po' di commenti. Il problema, se lo avrete anche voi, sarà durante l'evento (form_open) di fmain..

grazie,
ciao

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: query failed: sql error or missing database...WTF???
« Risposta #11 il: 12 Luglio 2009, 21:03:56 »
il sorgente che hai postato non è funzionante, probabilmente hai fatto copia incolla dei file della cartella e li hai compattati.

devi usare l' utility fornita da gambas : "Crea pacchetti sorgenti"

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: query failed: sql error or missing database...WTF???
« Risposta #12 il: 12 Luglio 2009, 21:15:44 »
era un banale errore

nel caso il db non esista devi indicarne il nome prima di aprirlo

Codice: [Seleziona]

PUBLIC SUB Form_Open()
  nomedb = "registro_del_prof_" & user.Name
  path = user.Home
   
  WITH $hConn
    .type = "sqlite3"
    .host = path
  END WITH
 
  $hConn.Open()
  IF NOT $hConn.Databases.Exist(nomedb) THEN
    $hConn.databases.Add(nomedb)
    $hConn.name = nomedb

    $hConn.Close()

    $hConn.Open()
   
    sql = "CREATE TABLE 'classe' ('id' INTEGER PRIMARY KEY, 'classi' VARCHAR(255) DEFAULT NULL);"
    htable = $hConn.exec(sql)
    $hConn.Commit
    sql = "CREATE TABLE 'mat' ('id' INTEGER PRIMARY KEY, 'classi2' VARCHAR(255) DEFAULT NULL, 'materia' VARCHAR(255) DEFAULT NULL);"
    htable = $hConn.exec(sql)
    $hConn.Commit
    sql = "CREATE TABLE 'stud' ('id' INTEGER PRIMARY KEY, 'classi3' VARCHAR(255) DEFAULT NULL, 'stud' VARCHAR(255) DEFAULT NULL);"
    htable = $hConn.exec(sql)
    $hConn.Commit
    sql = "CREATE TABLE 'voti' ('id' INTEGER PRIMARY KEY, 'materia2' VARCHAR(255) DEFAULT NULL, 'voto' VARCHAR(255) DEFAULT NULL, 'stud2' VARCHAR(255) DEFAULT NULL);"
    htable = $hConn.exec(sql)
    $hConn.Commit
    $hConn.Close()
ELSE  
  lstclassi.Clear()
  $hConn.Close()
  $hConn.name = nomedb'''''''codice mancante
  $hConn.Open()
  sql = "SELECT * FROM classe"
  hres = $hConn.exec(sql)
  FOR EACH hres
    lstclassi.Add(hres!classi)
  NEXT
  $hConn.Close()
   
ENDIF
END

 

Offline RiCi12

  • Gamberetto
  • *
  • Post: 46
    • Mostra profilo
    • http://rici12.altervista.org
Re: query failed: sql error or missing database...WTF???
« Risposta #13 il: 13 Luglio 2009, 12:01:33 »
allora, qui sta veramente diventando una comica.
Ora, oltre a non funzionare più il nuovo programma, controllando quello vecchio, scopro che lo stesso errore mi viene dato. Ma quello vecchio funzioanva alla perfezione, lo avrò controllato una quarantina di volte..

E allora, li mi viene a pensare che sia un problema di gambas che vuole fare l'antipatico. Possibile qualche problema causato dalle diverse versioni usate per lo sviluppo? Anche se mi sembra strano...

:cry:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: query failed: sql error or missing database...WTF???
« Risposta #14 il: 13 Luglio 2009, 12:56:17 »
non è sicuramente un problema di gambas ..molte volte una piccola svista fa perdere un sacco di tempo a me il tuo programma con quella modifica funziona benissimo