Differenze tra le versioni di "Utilizzo base di Gambas e Sqlite3"

Da Gambas-it.org - Wikipedia.
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 5: Riga 5:
  
 
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'''.
 
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==
 
==Creazione di un database==
Riga 91: Riga 90:
 
    
 
    
 
  End
 
  End
 
  
 
==Aggiunta di un record==
 
==Aggiunta di un record==
Riga 145: Riga 143:
 
    
 
    
 
  End
 
  End
 
  
 
==Ricerca dati==
 
==Ricerca dati==
Riga 192: Riga 189:
 
   Dim i As Integer
 
   Dim i As Integer
 
    
 
    
 +
  GridView1.Clear
 +
  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
 +
    &#39;''.Login = ""
 +
    ' .Password = ""
 +
  End With
 +
 
 +
  $hConn.Name = sName
 +
  $hConn.Open
 
    
 
    
 +
  sql = "SELECT * FROM biblio WHERE nome LIKE '%" & textbox4.Text & "%'"
 +
<FONT Color=gray>' ''sql di ricerca segue questa sintassi:''
 +
' ''SELECT * FROM nome_tavola WHERE nome_colonna LIKE '%valore_da_cercare%' ''</font>
 +
  hres = $hconn.Exec(sql)
 
    
 
    
 +
<FONT Color=gray>' ''esegue la query''</font>
 +
  If hres.Available = True Then
 +
<FONT Color=gray>' ''controlla se la query ha dato dei risultati in caso affermativo procede alla visualizzazione, altrimenti visualizza messaggio di errore''</font>
 +
    GridView1.Mode = Select.Multiple
 +
    GridView1.Columns.Count = 4
 +
<FONT Color=gray>' ''imposta il numero di colonne della GridView1''</font>
 +
    GridView1.Rows.Count = hres.Count  <FONT Color=gray>' ''imposta il numero di record in base al numero di risultati presenti''</font>
 +
    i = 0
 +
    For Each hres
 +
<FONT Color=gray>' ''inizio del ciclo''</font>
 +
      GridView1[i, 0].Text = hres!id
 +
      GridView1[i, 1].Text = hres!nome
 +
      GridView1[i, 2].Text = hres!cognome
 +
      GridView1[i, 3].Text = hres!indirizzo  <FONT Color=gray>' ''scrive il 1° valore nella griglia''</font>
 +
      Inc i  <FONT Color=gray>' ''aumenta di uno la variabile "i"; in tal modo al prossimo ciclo si scriverà il record successivo''</font>
 +
    Next
 +
  Else  <FONT Color=gray>' ''nel caso hres non contenga risultati''</font>
 +
    GridView1.Columns.Count = 1
 +
    GridView1.Rows.Count = 1
 +
    GridView1[0, 0].Text = "Nessun dato"  <FONT Color=gray>' ''viene visualizzata la scritta "nessun dato"''</font>
 +
  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()
 
+
<FONT Color=red size=4><B>Pagina in costruzione !</b></font>
+
  Dim iRow As String
 +
  Dim id As String
 +
  Dim sName As String  <FONT Color=gray>' ''sName è una variabile che indica il nome che diamo al nostro database''</font>
 +
  Dim sPercorso As String  <FONT Color=gray>' ''indica il percorso in cui andremo a creare il db''</font>
 +
  Dim $hConn As New Connection
 +
  Dim hres As Result
 +
  Dim sql As String
 +
  Dim i As Integer
 +
 
 +
  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
 +
    &#39;".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)  <FONT Color=gray>' ''esegue la query''</font>
 +
 
 +
  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
 +
    &#39;".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  <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
 +
    &#39;".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

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