Differenze tra le versioni di "Utilizzo base di Gambas e Sqlite3"
Riga 333: | Riga 333: | ||
==Cancellazione di un record== | ==Cancellazione di un record== | ||
+ | La cancellazione si effettua in modo simile alla modifica , si utilizza lo stesso metodo ''Connection.edit'': | ||
+ | Public Sub Button4_Click() | ||
+ | |||
+ | Dim id As String | ||
+ | Dim sName As String ' sName è una variabile che indica il nome che diamo al nostro database | ||
+ | Dim sPercorso As String ' indica il percorso in cui andremo a creare il db | ||
+ | Dim $hConn As New Connection | ||
+ | Dim hres As Result | ||
+ | Dim sql As String | ||
− | + | sName = "prova" | |
− | + | sPercorso = User.Home <FONT Color=gray>' ''definiamo come percorso la nostra home''</font> | |
− | + | ||
− | + | With $hConn | |
− | + | .Type = "sqlite3" <FONT Color=gray>' ''indicazione del tipo di database da utilizzare''</font> | |
− | + | .Host = sPercorso | |
− | + | '".Login = "" | |
− | + | ' .Password = "" | |
− | + | End With | |
− | + | ||
− | + | $hConn.Name = sName | |
− | + | $hConn.Open | |
− | + | ||
− | + | id = Label6.Text | |
+ | hres = $hConn.edit("biblio", "id=" & id) | ||
+ | hres.Delete | ||
+ | Button3.Enabled = False | ||
+ | Button4.Enabled = False | ||
+ | Button2.Enabled = True | ||
+ | $hconn.Commit | ||
+ | TextBox1.Text = "" | ||
+ | TextBox2.Text = "" | ||
+ | TextBox3.Text = "" | ||
+ | Textbox4.Text = "" | ||
+ | |||
+ | $hConn.Close | ||
+ | |||
+ | End |
Versione attuale delle 16:01, 5 gen 2017
Indice
Gambas e Sqlite
(pagina a cura di Fea Sergio - f.surfing@tiscali.it)
Questo piccolo articolo vuole essere una semplice guida all'utilizzo base di Gambas e Sqlite3, rivolto a chi effettua i primi passi con questo linguaggio di programmazione ed ha necessità di realizzare un applicazione stand-alone che debba immagazzinare una certa quantità di dati in db.
Creazione di un database
Il primo passo che dovremo realizzare sarà appunto creare un database adatto alle nostre esigenze, per far ciò utilizziamo la classe connection del componente gb.db.
Questa classe ha bisogno di alcuni parametri che andremo a fornirgli in questo modo:
Dim sName AS String ' sName è una variabile che indica il nome che diamo al nostro database Dim sPercorso as String ' indica il percorso in cui andremo a creare il db Dim$hConn as NEW Connection sName=”prova” sPercorso=user.home ' definiamo come percorso la nostra home With $hConn .Type = "sqlite3" ' indicazione del tipo di database da utilizzare .Host = sPercorso .Login = "" .Password = "" End With
a questo punto possiamo procedere alla creazione verificando però che il db non sia già presente altrimenti visualizzeremo una finestra di errore:
$hConn.Open If Not $hConn.Databases.Exist(sName) Then ' verifica che il db non esista $hConn.Databases.Add(sName) ' crea il nostro db Else Message.Error("database già esistente", "OK") Endif $hConn.Close
Così abbiamo creato il nostro db ma non ha ancora nessuna tabella all' interno e quindi è inutilizzabile, per realizzare la struttura possiamo utilizzare la funzione .tablefields.add oppure sfruttare un query SQL .
Considerando la seconda ipotesi e volendo creare una tabella di nome "biblio" con dei dati biografici quali:
nome cognome indirizzo
procederemo con una query di questo tipo:
sql = "CREATE TABLE 'biblio' ( 'id' INTEGER PRIMARY KEY AUTOINCREMENTAL, 'nome' VARCHAR(255) DEFAULT NULL, 'cognome' VARCHAR(255) DEFAULT NULL, 'indirizzo' VARCHAR(255) DEFAULT NULL);"
il tutto scritto in un unica riga.
Si noti il campo “id” che contiene l' indice del database ed è di tipo integer autoincrementante (ovvero ogni volta che inseriamo un record il rispettivo id verrà inserito automaticamente.
Tutti gli altri campi io per abitudine li creo di tipo testo con lunghezza 255 caratteri.
Quindi il nostro codice per la creazione del db sarà cosi modificato:
Public Sub Button1_Click() Dim sName As String ' sName è una variabile che indica il nome che diamo al nostro database Dim sPercorso As String ' indica il percorso in cui andremo a creare il db Dim $hConn As New Connection Dim sql As String Dim htable As Result sName = "prova" sPercorso = User.Home ' definiamo come percorso la nostra home With $hConn .Type = "sqlite3" ' indicazione del tipo di database da utilizzare .Host = sPercorso '".Login = "" ' .Password = "" End With $hConn.Open If Not $hConn.Databases.Exist(sName) Then ' verifica che il db non esista $hConn.Databases.Add(sName) ' crea il nostro db $hConn.Close ' chiude il db $hConn.Name = sName $hConn.Open() ' riapre il db per l' aggiunta della tabella ' scrivere la query su un unica riga oppure separarla con i separatori & sql = "CREATE TABLE 'biblio' ( '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 Label1.Text = "Database creato" Else Message.Error("database già esistente", "OK") Endif $hConn.Close End
Aggiunta di un record
Ora che abbiamo un bel db nuovo fiammante dobbiamo inserire i dati all' interno, supponiamo di inserire i dati richiesti in 3 textbox e di effettuare la memorizzazione con un pulsante, il nostro codice sarà:
Public Sub Button2_Click() Dim sName As String ' sName è una variabile che indica il nome che diamo al nostro database Dim sPercorso As String ' indica il percorso in cui andremo a creare il db Dim $hConn As New Connection Dim hres As Result Dim sql As String ' controllo dati inseriti 'sData = TextBox4.Text If TextBox1.Text = "" Or TextBox2.text = "" Or TextBox3.text = "" Or TextBox4.text = "" Then ' controllo che siano inseriti dei valori nei campi richiesti Message.Error("Completare tutti i campi", "OK") Else sName = "prova" sPercorso = User.Home ' definiamo come percorso la nostra home With $hConn .Type = "sqlite3" ' indicazione del tipo di database da utilizzare .Host = sPercorso '''.Login = "" ' .Password = "" End With $hConn.Name = sName $hConn.Open $hconn.Begin hres = $hconn.Create("biblio") ' collega il result hres alla tavola prova in modalità creazione record hres!nome = TextBox1.Text ' scrittura dei vari campi del record hres!cognome = TextBox2.Text hres!indirizzo = TextBox3.Text hres.Update $hConn.Commit $hConn.Close textbox1.text="" textbox2.text="" textbox3.text="" label1.text = "aggiunta record effettuata"
Endif End
Ricerca dati
la ricerca dati sarà probabilmente l' operazione che verrà compiuta maggiormente in un db in quanto necessaria in altre operazioni come la modifica di un record o la cancellazione , in questo esempio effettueremo una ricerca per nome e visualizzeremo i dati in una GridView.
Aggiungiamo quindi al nostro form un textbox4 dove scriveremo il testo da ricercare ed una gridview.
Nella funzione TextBox4_Change( ) inseriremo il codice per effettuare la ricerca, in questo modo scrivendo la parola da ricercare verranno visualizzate tutte le corrispondenze.
Logicamente prima di fare una ricerca dovremo aver inserito dei dati all' interno del db!
Come prima cosa dovremo collegarci al db tramite il solito metodo , una volta "connessi" per effettuare una ricerca utilizzeremo il metodo connection.Exec fornendogli una query SQL per la ricerca.
A seconda di ciò che vogliamo cercare useremo query diverse, nel nostro caso dobbiamo utilizzare una query che ricerchi nella colonna nome tutti i record che contengono il testo contenuto in textbox4:
sql = "SELECT * FROM biblio WHERE nome LIKE '%" & textbox4.Text & "%'"
I caratteri % indicano un qualsiasi valore (carattere jolly).
quindi daremo la query in pasto al db:
hres = $hconn.Exec(sql)
Nel result "hres" sono presenti tutti i record che soddisfano la nostra ricerca, ora dobbiamo visualizzarli nella gridview , possiamo farlo con un ciclo FOR EACH su hres:
For Each hres GridView1[i, 0].Text = hres!id GridView1[i, 1].Text = hres!nome GridView1[i, 2].Text = hres!cognome GridView1[i, 3].Text = hres!indirizzo i = i + 1 Next
Il primo valore nelle parentesi quadre indica il numero del record su cui scrivere ed il secondo il numero di colonna, i dati da estrapolare si indicano scrivendo il nome del result seguito da un punto esclamativo seguito dal nome del campo del db.
Oppure si puo utilizzare questo tipo di codice :
For Each hres GridView1[i, 0].Text = hres[0] GridView1[i, 1].Text = hres[1] GridView1[i, 2].Text = hres[2] GridView1[i, 3].Text = hres[3] i = i + 1 Next Et voilà , mentre digitiamo una parola nel campo ricerca la gridview ci visualizzerà tutte le rispondenze, il codice completo della funzione sarà il seguente: Public Sub TextBox4_Change() Dim sName As Strings ' Name è una variabile che indica il nome che diamo al nostro database Dim sPercorso As String ' indica il percorso in cui andremo a creare il db Dim $hConn As New Connection Dim hres As Result Dim sql As String Dim i As Integer GridView1.Clear sName = "prova" sPercorso = User.Home ' definiamo come percorso la nostra home With $hConn .Type = "sqlite3" ' indicazione del tipo di database da utilizzare .Host = sPercorso '.Login = "" ' .Password = "" End With $hConn.Name = sName $hConn.Open sql = "SELECT * FROM biblio WHERE nome LIKE '%" & textbox4.Text & "%'" ' sql di ricerca segue questa sintassi: ' SELECT * FROM nome_tavola WHERE nome_colonna LIKE '%valore_da_cercare%' hres = $hconn.Exec(sql) ' esegue la query If hres.Available = True Then ' controlla se la query ha dato dei risultati in caso affermativo procede alla visualizzazione, altrimenti visualizza messaggio di errore GridView1.Mode = Select.Multiple GridView1.Columns.Count = 4 ' imposta il numero di colonne della GridView1 GridView1.Rows.Count = hres.Count ' imposta il numero di record in base al numero di risultati presenti i = 0 For Each hres ' inizio del ciclo GridView1[i, 0].Text = hres!id GridView1[i, 1].Text = hres!nome GridView1[i, 2].Text = hres!cognome GridView1[i, 3].Text = hres!indirizzo ' scrive il 1° valore nella griglia Inc i ' aumenta di uno la variabile "i"; in tal modo al prossimo ciclo si scriverà il record successivo Next Else ' nel caso hres non contenga risultati GridView1.Columns.Count = 1 GridView1.Rows.Count = 1 GridView1[0, 0].Text = "Nessun dato" ' viene visualizzata la scritta "nessun dato" Endif End
Modifica di un record
Questa operazione si effettua tramite il metodo connection.edit che richiede come parametri il nome della tavola e il criterio di ricerca.
Solitamente come criterio si può utilizzare l' indice del db che essendo univoco ci permette di posizionarci esattamente nel record richiesto:
hres = $hConn.edit("biblio", "id=" & id)
A questo punto modifichiamo i valori che ci interessano con:
hres!nome = TextBox1.Text hres!cognome = TextBox2.Text hres!indirizzo = TextBox3.Text hres.Update
Il codice del nostro programmino sarà:
Public Sub GridView1_Click() Dim iRow As String Dim id As String Dim sName As String ' sName è una variabile che indica il nome che diamo al nostro database Dim sPercorso As String ' indica il percorso in cui andremo a creare il db Dim $hConn As New Connection Dim hres As Result Dim sql As String Dim i As Integer sName = "prova" sPercorso = User.Home ' definiamo come percorso la nostra home With $hConn .Type = "sqlite3" ' indicazione del tipo di database da utilizzare .Host = sPercorso '".Login = "" ' .Password = "" End With $hConn.Name = sName $hConn.Open iRow = GridView1.Row sql = "SELECT * FROM biblio WHERE nome LIKE '%" & textbox4.Text & "%'" hres = $hconn.Exec(sql) ' esegue la query If iRow <> -1 Then hres.MoveTo(iRow) id = hres!id hres = $hConn.edit("biblio", "id=" & id) TextBox1.Text = hres!nome TextBox2.Text = hres!cognome TextBox3.Text = hres!indirizzo Label6.Text = id Button2.Enabled = False Button3.Enabled = True Button4.Enabled = True Endif $hConn.Close End Public Sub Button3_Click() Dim id As String Dim sName As String ' sName è una variabile che indica il nome che diamo al nostro database Dim sPercorso As String ' indica il percorso in cui andremo a creare il db Dim $hConn As New Connection Dim hres As Result Dim sql As String sName = "prova" sPercorso = User.Home 'definiamo come percorso la nostra home With $hConn .Type = "sqlite3" ' indicazione del tipo di database da utilizzare .Host = sPercorso '".Login = "" ' .Password = "" End With $hConn.Name = sName $hConn.Open id = Label6.Text hres = $hConn.edit("biblio", "id=" & id) hres!nome = TextBox1.Text hres!cognome = TextBox2.Text hres!indirizzo = TextBox3.Text hres.Update Button3.Enabled = False Button4.Enabled = False Button2.Enabled = True $hconn.Commit TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" textbox4.Text = "" $hConn.Close End
Cancellazione di un record
La cancellazione si effettua in modo simile alla modifica , si utilizza lo stesso metodo Connection.edit:
Public Sub Button4_Click() Dim id As String Dim sName As String ' sName è una variabile che indica il nome che diamo al nostro database Dim sPercorso As String ' indica il percorso in cui andremo a creare il db Dim $hConn As New Connection Dim hres As Result Dim sql As String sName = "prova" sPercorso = User.Home ' definiamo come percorso la nostra home With $hConn .Type = "sqlite3" ' indicazione del tipo di database da utilizzare .Host = sPercorso '".Login = "" ' .Password = "" End With $hConn.Name = sName $hConn.Open id = Label6.Text hres = $hConn.edit("biblio", "id=" & id) hres.Delete Button3.Enabled = False Button4.Enabled = False Button2.Enabled = True $hconn.Commit TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" Textbox4.Text = "" $hConn.Close End