Autore Topic: aprire un database sqlite  (Letto 7430 volte)

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
aprire un database sqlite
« il: 03 Giugno 2012, 19:38:42 »

Salve
Ho il solito problema, che mi porto da tanto tempo, non riesco ad importare un file (datatabase) sqlite già esistente nel mio progetto. Non sono riuscito ad adattare la funzione (utility) che  gentilmente mi è stata suggerita da golia : 'importa file csv'. Qualcuno potrebbe aiutarmi ?
Saluti

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #1 il: 04 Giugno 2012, 00:20:19 »
Ho notato che avevi segnalato un problema simile in altra discussione.

Dovresti spiegare meglio cosa devi effettivamente ottenere...

Da quello che avevo capito, era che dovevi importare dati da un file csv in un db sqlite:

1) il db sqlite è già stato creato?
2) la tabella per l'import è già stata creata?
3) il formato del file è un vero csv?
4) devi importare il file una-tantum, o devi creare una procedura ad-hoc?

Soluzioni da analizzare:

a) nei download dovrebbe esserci una mia classe per il trattamento dei file csv
b) sicuramente nel forum, ma anche negli esempi gambas, c'è qualche esempio per connettersi ad un db sqlite
c) una volta risolto il problema di caricare un file csv in memoria, e risolto il problema di collegamento al db, costruire una procedura di caricamento credo sia semplice...

Se, dopo aver dato un'occhiata a quanto ti ho suggerito, hai ancora problemi, fammelo sapere...

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #2 il: 04 Giugno 2012, 15:36:51 »

 Salve
Innanzitutto grazie per aver (ri)preso in considerazione il mio quesito. Tempo fa ho avuto un problema simile , ma riguardava  l'import di file csv, risolto alla grande , con la 'classe' messa nell'area download e anche con l'aiuto di persone di questo forum. Ma la stessa 'classe' purtroppo, non riesco ad adattarla al mio problema attuale che riguarda l'import di un database sqlite, che presentai anche tempo fa su questo forum, mi spiego:

Ho creato un database sqlite  chiamato 'GestCC', una tabella chiamata 'movimenti' con i seguenti campi : data - operazione - dare - avere - saldo, dove inserisco regolarmente i dati , creo query sql per la ricerca e visualizzazione dati senza difficoltà, fin qui ci siamo.
 Nello stesso progetto
voglio creare un 'nuovo' database sqlite ad es. per l'anno 2013 che chiamerò 'GestCC2013' con la stessa tabella (movimenti) e quindi, rispettando sempre le caratteristiche del database  principale (GestCC : data - operazione - dare - avere - saldo), dove andrò a inserire regolarmente i dati, questo riesco a farlo mettendo in una textbox il nome del database.
Quello che non riesco a realizzare  è
l'import del database 'Sqlite nello stesso progetto, ad esempio mi trovo in 'GestCC' e voglio aprire il database GestCC2013 con relativa visualizzazione tabella di dati, ricerche etc. come faccio ?
Spero di avere un aiuto, prendendo come esempio anche il vostro progetto 'bibliosqlite'
Spero anche di essermi spiegato bene. Grazie
Cordiali Saluti

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #3 il: 04 Giugno 2012, 20:43:21 »
Quindi usi più database, divisi per anno... è una scelta, come anche usare lo stesso db, eseguendo query mirate per anno sulla data, come ad esempio:
Codice: [Seleziona]
SELECT * FROM <tabella> WHERE YEAR(<campo data>) = <anno>

Quello che non mi è però chiaro è il perchè hai problemi con la visualizzazione. Credo che per prima cosa tu debba selezionare il db tramite una selezione (es. una combobox), e poi gestirlo come al solito tramite le tue form...

Partendo da questo, il mio dubbio è che tu ti trovi con:

1) il problema di switchare tra un db e l'altro, perchè magari le form puntano al nome del db principale
2) il problema che forse non hai conoscenza delle possibilità della sintassi SQL, in particolare con SQLite
3) altro non saprei, perchè dal tuo msg non riesco a capire altro...

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #4 il: 04 Giugno 2012, 22:21:41 »
4) forse non riesci a creare una copia del db originale, ma vuoto?

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #5 il: 05 Giugno 2012, 07:57:40 »

Riesco benissimo a creare una copia vuota dell'originale, quello che non riesco a fare, è importare (aprire) ad es. questo database vuoto.

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #6 il: 05 Giugno 2012, 12:11:07 »
Bene... capisco...

Allora prova l'esempio (modificato) della rubrica che ti aveva postato Golia tempo fa...



Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #7 il: 06 Giugno 2012, 12:01:44 »

Salve
Intanto grazie, per l'esempio proposto, sto facendo delle prove per capire il codice che c'è sotto il comando button 'Cambio db', ma credo che finalmente
ci siamo. Sto facendo anche delle prove per creare nuovi db con codice, nella stessa cartella del progetto.
Grazie
Cordiali saluti.

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #8 il: 10 Giugno 2012, 13:24:15 »

Salve
Ho 'studiato' l'esempio in allegato, e credo di avere (quasi) risolto il problema... l'unica cosa che non riesco a capire come mai  chiudendo il progetto (programma), nel riaprirlo non mi da l'ultimo database caricato , ma  sempre il primo (prova), mi spiego:
se ad es. chiudo il programma con 'prova2012', nel riaprirlo mi da per sempre 'prova'.
Ultima cosa , con il codice riportato sotto creo un nuovo db , inserendo il nome in una textbox, e lo va a creare nella 'home', ma per averlo nella cartella del progetto, come l'esempio nell'esempio che  ho scaricato, cosa devo cambiare ?

Public Sub Button5_Click()
 Dim sName As String  ' sName è una variabile che indica il nome che diamo al nostro database
Dim sPercorso As String ' indica il percoso in cui andremo a creare il db
Dim $hConn As New Connection
Dim sql As String
Dim htable As Result
   sName = TextBox1.text
   sPercorso = User.Home  'definiamo come percorso la nostra home
 With $hConn
    .Type = "sqlite3"  ' indicazione del tipo di tatabase da utilizzare
    .Host = sPercorso
End With
$hConn.Open
If textbox1.text = "" Then
  Message.Info("inserire il nome per il nuovo database ")
  textbox1.setfocus
  Else
  If Not $hConn.Databases.Exist(Sname) Then 
        $hConn.Databases.Add(sName)             
        $hConn.Close         
        $hConn.Name = sName
        $hConn.Open()       
         sql = "CREATE TABLE 'rubrica' ( 'id' INTEGER PRIMARY KEY, 'nome' VARCHAR(255) DEFAULT NULL, 'cognome' VARCHAR(255) DEFAULT NULL, 'indirizzo' VARCHAR(255) DEFAULT NULL);"
        hTable = $hConn.EXEC(sql)
           $hConn.Commit
        Label9.Text = "Database creato"
    Else
        Message.Error("database già esistente", "OK")
         Endif
    $hConn.Close
End If
End
Cordiali saluti e Buona Domenica a tutto il forum.

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #9 il: 10 Giugno 2012, 14:03:31 »
Ciao
questa è la riga interessata per selezionare la cartella che ospita il database
Citazione
  sPercorso = User.Home  'definiamo come percorso la nostra home
come vedi è impostata nella home e quindi va a creare il db nella home, devi cambiare il percorso, se per esempio lo vuoi nella caretella del progetto il codice è questo
Citazione
sPercorso = Application.Path

Invece quando apri il programma, andrà sempre ad aprire il database "prova", perchè è scritto nel codice che apra quel database, devi sostituire il nome del database con quello che vuoi che apra, se vuoi che il programma si ricordi l'ultimo database che hai usato devi dare il nome al db con una variabile: la procedura è questa

1: quando chiudi il programma devi andare a scrivere in un file di testo o in un setting il nome database
2: quando apri il programma devi andare a leggere in un file di testo o in un setting il nome database
3: imposta la variabile nomedatabase con il nome che hai letto dal file o setting
Ciao

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: [Risolto]:aprire un database sqlite
« Risposta #10 il: 11 Giugno 2012, 09:25:21 »
Salve
Non saprei proprio come far scrivere il nome del database su un file di testo, per poi lo stesso file farlo leggere.
La spiegazione è stata come al solito chiara, ma non avendolo mai fatto, lascio questo argomento per non essere troppo 'invadente' e ripetivo con i miei quesiti.
So che chi si 'arrende' è perduto.... :-) , e questo non va bene, cmq ho risolto uno dei due quesiti.... grazie a questo forum ho imparato tante cose riguardo la programmazione in gambas. Metto 'risolto' o quasi, così chiudo questo post.
Alla prossima.... Cordiali Saluti.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #11 il: 11 Giugno 2012, 10:14:35 »
DIM t AS String = File.Load("filename") 'carica il contenuto del file "filename" nella variabile

File.Save("filename", t) 'salva il contenuto della variabile "t" nel file "filename". Se non esiste lo crea

Questi sono i due metodi più semplice per leggere e scrivere testo su file.
E' ovvio che l'analisi del contenuto deve essere fatta da te con codice apposito.
Per espandere le potenzialità di un file, facendolo diventare un vero file di configurazione, puoi usare la classe Setting, di cui è stato discusso molto nel forum...

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #12 il: 11 Giugno 2012, 20:01:19 »

Buonasera
Non riesco a creare il codice pe leggere e scrivere testo su file, -nel mio caso far ricordare al programma, l'ultimo database caricato, ho provato in tutti i modi,guardando esempi, e seguendo le discussioni sul forum. Pazienza...  infine volevo sapere come chiudere la discussione, mettendo [Risolto] anche se in realtà non lo è.
Cordiali saluti, con na buona serata a questo formidabile forum.

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #13 il: 11 Giugno 2012, 20:55:15 »
Ciao fernando
Il sistema di MD è facile e semplice dovresti provare a scrivere e leggere dei file senza pensare al database in modo da capire bene la procedura, poi la applichi.
Un'altro sistema per scrivere e leggere in un file le procedure sono queste
Codice: gambas [Seleziona]

Public Sub Button2_Click()
  Dim riga1, riga2, riga3 As String
  Dim filelettura As String
  Dim hfile As File  
  filelettura = User.Home & "/gino.txt"
    
  If filelettura Then
    hFile = Open filelettura For Input
    While Not Eof(hFile)
    Line Input #hFile, riga1 ' vado a leggere e poi dare il valore della prima riga su riga1
    Line Input #hFile, riga2 ' vado a leggere e poi dare il valore della seconda riga su riga2
    Line Input #hFile, riga3  '..........
    Wend
    Close #hfile
  Message("il valore della riga1 è : " & riga1)
  Endif
End

Public Sub Button3_Click()
  Dim filescrittura As String
  Dim hfile As File  
  
  filescrittura = User.Home & "/gino.txt"
  If filescrittura Then
  hfile = Open filescrittura For Create
                Print #hfile, "Milano" ' scrivo Milano nella prima riga
                Print #hfile, "Roma" '....
                Print #hfile, "Palermo"
  Close #hfile
  Endif

End


per quello che devi fare tu mi pare più comodo usare setting:
Per prima cosa devi abilitare il componente "Settings"
e poi è facile..
Codice: gambas [Seleziona]
Public Sub Button4_Click()

  settings["nomechvuoi"] = "pippobaudo"
  settings.Save

End



Public Sub Button5_Click()
Dim risu As String
risu = settings["nomechvuoi"]
  Message(risu)

End


Per mettere risolto in questo post basta che vai al primo e modifichi il titolo, gli metti [RISOLTO] davanti alla scritta "aprire un database sqlite"
Certo non sarebbe male una volta che hai fatto il codice per cambiare il database lo scrivessi quà, in modo da essere d'aiuto ad altri utenti
Ciao
« Ultima modifica: 11 Giugno 2012, 22:26:38 da Golia »

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: aprire un database sqlite
« Risposta #14 il: 12 Giugno 2012, 14:10:21 »

Salve
Ho creato un file 'gino.txt' posizionandolo nella 'home' , poi ho creato dei button2-3-4-5 con il codice allegato, funziona.... Nel 'file scrittura' (button3) va a scrivere tre righe(milano,roma,palermo),fin qui ci sono, poi nel 'file lettura' richiama sempre la prima (milano),non so il perchè..., ma scusa nel mio caso deve scrivere solo una riga , cioè ricordare l'ultimo database che ho usato es. 'prova2012', o sbaglio ?
Nel tuo codice il nome del mio dataabse del database dove va collocato ? Bisogna mettere il nome del primo database (vuoto) creato ?

settings["nomechvuoi"] = "pippobaudo" 
 settings.Save
.....
'nomechevuoi' ho messo un nome a caso, =pippobaudo devo mettere il nome del database ?
Cordiali saluti
fernando