Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: Aldus67 - 04 Gennaio 2011, 23:45:25

Titolo: [RISOLTO] Errore in SQLite3
Inserito da: Aldus67 - 04 Gennaio 2011, 23:45:25
Io ho il seguente codice:

Codice: [Seleziona]
  DIM sql AS String
  DIM hres AS Result
  IF bop = 1 THEN
    WITH MSysCont.$hConn
      .Type = "sqlite3"
      .Host = MSysCont.sPercorso
      .Login = ""
      .Password = ""
      .Open
      .Begin
      hres = .Create("clienti")
      hres!ragsociale = TextBox1.Text
      hres!indirizzo = TextBox2.Text
      hres!cap = TextBox3.Text
      hres!citta = TextBox4.Text
      hres!provincia = TextBox5.Text
      hres!partitaiva = TextBox6.Text
      hres!codicefiscale = TextBox7.Text
      hres!telefono1 = TextBox8.Text
      hres!telefono2 = TextBox9.Text
      hres!fax = TextBox10.Text
      hres!email = TextBox11.Text
      hres.Update
      .Commit
      .Close
    END WITH
    bOp = 0
    MenuFileApri.Enabled = TRUE
    MenuFileNuovo.Enabled = TRUE
    MenuFileSalva.Enabled = FALSE
    MenuFileStampa.Enabled = TRUE
    FPulisci
  ENDIF

Quando lancio il programma con F5 alla riga che dice:
hres = .Create("clienti")
mi da' il seguente errore:
Unknown table: clienti

Ho già controllato che nel database la tabella clienti è presente (vuota)...
...e non so che fare
 :hatecomputer:
Titolo: Re: Errore in SQLite3
Inserito da: Golia - 05 Gennaio 2011, 09:01:14
Ciao,
prova con questa funzione
Codice: gambas [Seleziona]

PUBLIC $conn AS NEW Connection

PUBLIC sqliteName AS String = "prova"
PUBLIC sqlitePercorso AS String = Application.Path
'''XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

PUBLIC PROCEDURE Connect()


  
   $conn.Close  
   $conn.Type = "sqlite3"
   $conn.Host = sqlitePercorso
   $conn.Name = sqliteName
   $conn.Open

END

PUBLIC PROCEDURE disconnect()
   $conn.Close  
END

'''XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

PUBLIC SUB controlladb()


    IF NOT Exist(sqlitePercorso & "/" & sqliteName) THEN
     IF Message.Question("Creo il database", "Si", "No") = 1 THEN
      WITH $conn
      .Type = "sqlite3"
      .Host = sqlitePercorso

      END WITH

      $conn.Open    

      $conn.Databases.Add(sqliteName)            
      $conn.Close        
      
      $conn.Name = sqliteName
      $conn.Open()
      creatabella()
    ENDIF  
    ENDIF
END


PUBLIC SUB creatabella()

DIM sql AS String
      sql = "CREATE TABLE 'rubrica' ("
      sql &= " 'idrubrica' INTEGER PRIMARY KEY,"    
      sql &= " 'cognome' varchar(20) DEFAULT NULL,"
      sql &= " 'nome' varchar(20) DEFAULT NULL,"
      sql &= " 'indirizzo' varchar(30) DEFAULT NULL,"            
      sql &= " 'citta' varchar(30) DEFAULT NULL,"
      sql &= " 'provincia' varchar(20) DEFAULT NULL,"
      sql &= " 'telefono' varchar(10) DEFAULT NULL);"        
      $conn.EXEC(sql)
      $conn.Commit
      $conn.Close

END


se questo codice lo metti in un modulo con nome esempio MODMain
all'apertura del programma ci metti un bel

Codice: gambas [Seleziona]
MODMain.controlladb()

così controlla se esiste il db, altrimenti lo crea e crea anche la tabella
e per connetterti al database un bel
Codice: gambas [Seleziona]
MODMain.Connect()

fammi sapere, ciao
Titolo: Re: Errore in SQLite3
Inserito da: Taurus dei miracoli - 05 Gennaio 2011, 15:04:58
Però con l'istruzione

hres = .Create("clienti")

non si crea la tabella, ma la si collego in modalità creazione record.
Il codice che hai proposto è per la creazione di db e tabella.
Inoltre il codice è stato preso in modo quasi pedissequo dalla guida proposta nella sezione download.
Non so. :hatecomputer:
Titolo: Re: Errore in SQLite3
Inserito da: fsurfing - 05 Gennaio 2011, 18:56:18
non hai indicato un nome per il db o è già presente nel percorso?

cmq se ti dice che non esiste la tabella clienti vuol dire che dove la sta cercando non esiste la tabella clienti.

ricontrolla le variabili di connessione
Titolo: Re: Errore in SQLite3
Inserito da: Aldus67 - 05 Gennaio 2011, 22:56:42
Era effettivamente un problema di connessione.
Ho riscritto un pochino di codice ed ho risolto.
Grazie
 :ok: