Autore Topic: [RISOLTO] creare database sqlite3  (Letto 2701 volte)

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
[RISOLTO] creare database sqlite3
« il: 24 Novembre 2010, 12:53:23 »
non capisco perchè con il seguente codice non riesco a creare un nuovo database.

Codice: gambas [Seleziona]

PUBLIC Percorso AS String
PUBLIC Datanome AS String
PUBLIC Conn AS NEW Connection
PUBLIC Risultato AS Result



PUBLIC SUB Main()
  
  Connessione()
  
END


PUBLIC SUB Connessione()
DIM sql AS String
  
  Percorso = Application.Path
  Datanome = "ordini"
  
  WITH Conn
    .Name = Datanome
    .Host = Percorso
    .Type = "Sqlite3"
    .Login = ""
    .Password = ""
  END WITH
  
  TRY Conn.Open()
  IF ERROR THEN
    Conn.Databases.Add("ordini")
    sql = "CREATE TABLE fornitori (ID INTEGER AUTO_INCREMENT PRIMARY KEY, fornitore VARCHAR(50))"
    Risultato = Conn.Exec(sql)
  ENDIF
  
END


in giro ho trovato degli esempi che dicevano di fare così
« Ultima modifica: 24 Novembre 2010, 23:02:28 da doublemm »
Matteo DoubleMM Mion

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: creare database sqlite3
« Risposta #1 il: 24 Novembre 2010, 14:45:23 »
prova così:
Codice: gambas [Seleziona]
 Percorso = Application.Path  
 Datanome = "/ordini"


edit:
ti consiglio di impostare la query così
Codice: gambas [Seleziona]

      sql = "CREATE TABLE 'fornitori' ("      
      sql &= " 'idfornitore' INTEGER PRIMARY KEY,"
      sql &= " 'fornitore' varchar(30) DEFAULT NULL,"
      sql &= " 'ragionesociale' varchar(30) DEFAULT NULL,"
      sql &= " 'telefono' varchar(15) DEFAULT NULL,"
      sql &= " 'indirizzo' varchar(30) DEFAULT NULL,"
      sql &= " 'citta' varchar(30) DEFAULT NULL,"
      sql &= " 'cap' varchar(8) DEFAULT NULL,"
      sql &= " 'provincia' varchar(20) DEFAULT NULL,"
      sql &= " 'telefono2' varchar(15) DEFAULT NULL,"
      sql &= " 'fax' varchar(15) DEFAULT NULL,"
      sql &= " 'email' varchar(30) DEFAULT NULL,"
      sql &= " 'note' varchar(400) DEFAULT NULL,"  
      Risultato = Conn.Exec(sql) 

« Ultima modifica: 24 Novembre 2010, 14:57:33 da Golia »

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: creare database sqlite3
« Risposta #2 il: 24 Novembre 2010, 15:09:00 »
ad occhio mi pare che:

- manchi il punto&virgola finale nella stringa SQL...
- e poi devi dare il "commit" per eseguire la transazione (credo ).
Codice: vb.net [Seleziona]

...
Risultato = Conn.Exec(sql)

Conn.Commit

End


PS. se non l'avessi già fatto leggi anche la fantastica guida di fsurfing...
http://www.gambas-it.org/wp/?wpfb_dl=123

PPS. segui l'ottimo suggerimento di Golia, che serve a dare più ordine alla query SQl che vai a scrivere...

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: creare database sqlite3
« Risposta #3 il: 24 Novembre 2010, 15:44:29 »
prova così:
Codice: gambas [Seleziona]
 Percorso = Application.Path  
 Datanome = "/ordini"


edit:
ti consiglio di impostare la query così
Codice: gambas [Seleziona]

      sql = "CREATE TABLE 'fornitori' ("      
      sql &= " 'idfornitore' INTEGER PRIMARY KEY,"
      sql &= " 'fornitore' varchar(30) DEFAULT NULL,"
      sql &= " 'ragionesociale' varchar(30) DEFAULT NULL,"
      sql &= " 'telefono' varchar(15) DEFAULT NULL,"
      sql &= " 'indirizzo' varchar(30) DEFAULT NULL,"
      sql &= " 'citta' varchar(30) DEFAULT NULL,"
      sql &= " 'cap' varchar(8) DEFAULT NULL,"
      sql &= " 'provincia' varchar(20) DEFAULT NULL,"
      sql &= " 'telefono2' varchar(15) DEFAULT NULL,"
      sql &= " 'fax' varchar(15) DEFAULT NULL,"
      sql &= " 'email' varchar(30) DEFAULT NULL,"
      sql &= " 'note' varchar(400) DEFAULT NULL,"  
      Risultato = Conn.Exec(sql) 



non cambia nulla con /ordini. il problema è che se apro la connessione mi dice che il database non esiste, se creo il database.add("ordini") mi dice che la connessione non è aperta
Matteo DoubleMM Mion

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: creare database sqlite3
« Risposta #4 il: 24 Novembre 2010, 17:34:43 »
@doublemm

io per praticità uso la seguente procedura, avendo poco tempo:
1. pianifico il db e lo creo con sqlite db browser
2. eventualmente importo i dati nel db, se già disponibili
3. ripasso il db nel db editor di g2 per sistemare i campi (se necessario)

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: creare database sqlite3
« Risposta #5 il: 24 Novembre 2010, 18:10:05 »
e se dovessi dare il prog a utenti poco esperti non in grado di crearsi il db?
Matteo DoubleMM Mion

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: creare database sqlite3
« Risposta #6 il: 24 Novembre 2010, 18:43:15 »
Ti incollo questo modulo, a me funziona
Codice: gambas [Seleziona]

PUBLIC $conn AS NEW Connection

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


PUBLIC PROCEDURE Connect()


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

END

PUBLIC PROCEDURE disconnect()
   $conn.Close  
END


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
DIM htable AS Result
      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);"      
      
 hTable = $conn.EXEC(sql)      
      
      $conn.Commit
      $conn.Close
END

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: creare database sqlite3
« Risposta #7 il: 24 Novembre 2010, 18:45:50 »
e se dovessi dare il prog a utenti poco esperti non in grado di crearsi il db?

Dipende da come organizzi il programma, in genere per la gestione dei dati serve un solo db, che costruisci prima, l'utente deve solo popolarlo..

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: creare database sqlite3
« Risposta #8 il: 24 Novembre 2010, 18:48:52 »
Citazione
ad occhio mi pare che:

- manchi il punto&virgola finale nella stringa SQL...
- e poi devi dare il "commit" per eseguire la transazione (credo ).
Si è giusto, mancavano

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: creare database sqlite3
« Risposta #9 il: 24 Novembre 2010, 18:52:25 »
@doublemm

io per praticità uso la seguente procedura, avendo poco tempo:
1. pianifico il db e lo creo con sqlite db browser
2. eventualmente importo i dati nel db, se già disponibili
3. ripasso il db nel db editor di g2 per sistemare i campi (se necessario)

A volte dimenticate che se un programma lo usa solo chi lo sviluppa allora queste soluzioni vanno bene mentre se un programma poi ha l'esigenza di essere distribuito allora non vanno più così bene....creare un database già impostato non è di per sè sbagliato ma implica che poi si debba scrivere una funzione che importi o sposti il database dove serve sul sistema dell'utente finale....

Se serve tempo fa scrissi questo: http://soluzionisoftware.blogspot.com/2009/11/gambas-creare-database-al-primo-avvio.html

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: creare database sqlite3
« Risposta #10 il: 24 Novembre 2010, 18:54:14 »
@doublemm

io per praticità uso la seguente procedura, avendo poco tempo:
1. pianifico il db e lo creo con sqlite db browser
2. eventualmente importo i dati nel db, se già disponibili
3. ripasso il db nel db editor di g2 per sistemare i campi (se necessario)

A volte dimenticate che se un programma lo usa solo chi lo sviluppa allora queste soluzioni vanno bene mentre se un programma poi ha l'esigenza di essere distribuito allora non vanno più così bene....creare un database già impostato non è di per sè sbagliato ma implica che poi si debba scrivere una funzione che importi o sposti il database dove serve sul sistema dell'utente finale....

Se serve tempo fa scrissi questo: http://soluzionisoftware.blogspot.com/2009/11/gambas-creare-database-al-primo-avvio.html

Boh io cosi' mi trovo benissimo, myZone è previsto sia instalalto in una certa cartella e l'utente si deve uniformare...

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: creare database sqlite3
« Risposta #11 il: 24 Novembre 2010, 18:56:55 »
@doublemm

io per praticità uso la seguente procedura, avendo poco tempo:
1. pianifico il db e lo creo con sqlite db browser
2. eventualmente importo i dati nel db, se già disponibili
3. ripasso il db nel db editor di g2 per sistemare i campi (se necessario)

A volte dimenticate che se un programma lo usa solo chi lo sviluppa allora queste soluzioni vanno bene mentre se un programma poi ha l'esigenza di essere distribuito allora non vanno più così bene....creare un database già impostato non è di per sè sbagliato ma implica che poi si debba scrivere una funzione che importi o sposti il database dove serve sul sistema dell'utente finale....

Se serve tempo fa scrissi questo: http://soluzionisoftware.blogspot.com/2009/11/gambas-creare-database-al-primo-avvio.html

Boh io cosi' mi trovo benissimo, myZone è previsto sia instalalto in una certa cartella e l'utente si deve uniformare...

Non è così...l'utente deve solo installare il programma ed avere tutto pronto...gli smanettamenti anche per un software semplice sono fastidiosi secondo me....meglio perdere un giorno a programmare che 100 utenti finali....

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: creare database sqlite3
« Risposta #12 il: 24 Novembre 2010, 19:08:47 »
@Ceskho

vedro' di guardare il tuo articolo, per i software futuri :2birre:

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: creare database sqlite3
« Risposta #13 il: 24 Novembre 2010, 19:23:45 »
@Golia

Non mi funziona come il mio, all'apertura della connessione mi dice unable to locate database. Ma è normale visto che il database non esiste.

@Ceskho

avevo già letto il tuo articolo ma non capisco perchè se apro la connessione mi dice che non esiste il database. se cerco di crearlo con conn.databases.add mi dice che la connessione non è aperta. Mi sembra un cane che si mangia la coda
Matteo DoubleMM Mion

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: creare database sqlite3
« Risposta #14 il: 24 Novembre 2010, 20:15:31 »
il codice che hai scritto non mi sembra molto valido..


prima di tutto assicurati che il db non esista con

Codice: [Seleziona]
IF NOT $hConn.Databases.Exist(nome) THEN 
attribuire la creazione ad un errore generico non è il massimo.

poi la creazione del db e la crazione delle tabelle devono avvenire in due momenti separati da un commit

per la creazione del db sul codice di definizione della connessione non mettere il nome (lo metterai se lo crei nel codice di creazione)

creato il db  fai un commit o un close

poi definisci il nome del db  con connessione.name=nome

e apri il db per la creazione delle tavole