Ciao a tutti!
Volevo creare un semplice programma che mi permettesse di catalogare man mano i libri che leggo :)
Usando Ubuntu ed avendo a disposizione OpenOffice database ho pensato di creare un database .odb (all'interno del quale c'è una tabella con i vari campi: Titolo autore eccetera...)
Il problema è che non so come poter poi gestire questo database con gambas.
Con visual basic la cosa è semplicissima, ma con gambas non so da dove partire, qualcuno potrebbe darmi una mano per cortesia? :)
Il programma volevo strutturarlo come in immagine, e quando si clicca su aggiungi o modifica si apre una nuova form per l'inserimento/modifica/elimina dati.
Edit: nella schermata del programma ci vorrebbe anche un cerca, mi sono dimenticato di metterlo :2birre:
allego il codice che sto provando ad usare per connettere un database a caso:
' Gambas class file
PRIVATE $hConn AS Connection
PUBLIC SUB Form_Open()
DIM sName AS String
sName = "Lista"
TRY $hConn.Close
WITH $hConn
.Name = "Lista"
.Type = "sqlite"
END WITH
$hConn.Open
IF NOT $hConn.Databases.Exist(sName) THEN
$hConn.Databases.Add(sName)
ENDIF
$hConn.Close
$hConn.Name = sName
$hConn.Open
END
ma continua a darmi errore: Null object
Che vuol dire?
DIM sName AS String
DIM sPercorso AS String
DIM $hConn AS NEW Connection
DIM sql AS String
DIM hTable AS Result
DIM hres AS Result
DIM i AS Integer
sName = "prova"
sPercorso = user.home
WITH $hConn
.Type = "sqlite3"
.Host = sPercorso
.Login = ""
.Password = ""
END WITH
$hConn.Open
IF NOT $hConn.Databases.Exist(sName) THEN
$hConn.Databases.Add(sName)
$hConn.Close
$hConn.Name = sName
$hConn.Open()
sql = "CREATE TABLE 'biblio' ( 'id' INTEGER PRIMARY KEY AUTOINCREMENTAL, 'titolo' VARCHAR(255) DEFAULT NULL, 'autore' VARCHAR(255) DEFAULT NULL, 'annolettura'VARCHAR(255) DEFAULT NULL, 'commento'VARCHAR(255) DEFAULT NULL); "
hTable = $hConn.EXEC(sql)
ELSE
Message.Error("database già esistente", "OK")
ENDIF
$hConn.Close
$hconn.Open
sql = "SELECT * FROM biblio WHERE autore LIKE '%" & TextBox1.Text &" %'"
hres = $hConn.EXEC(sql)
FOR EACH hres
GridView1[i, 0].Text = hres!id
GridView1[i, 1].Text = hres!titolo
GridView1[i, 2].Text = hres!autore
GridView1[i, 3].Text = hres!annolettura
GridView1[i, 4].Text = hres!commento
i = i + 1
NEXT
mi da questo errore alla riga hres = $hConn.EXEC (sql)
Query failed: SQL error or missing database
ma il database sono sicuro che esiste :rolleyes:
p.s. se volessi mostrare in una grid wiev tutto il contenuto del database, e poi filtrarlo col contenuto di textbox1 come dovrei fare?
terzo problema (si procede a gonfie vele un corno >:() come si setta la larghezza di default di una colonna della gridview?
Io uso:
GridView1.Columns[0].Width = 150
Non mi da errori ma le colonne restano tutte piccole ???
Grazie a tutti per l'aiuto :)
Per i posteri, ecco come ho risolto!
-ho usato un database sqlite3 non .odb
-ho racchiuso tutte le funzioni in un modulo chiamato Funzioni (che fantasia eh :-[)
' Gambas module file
PUBLIC sName AS String = "libri" ' sName è una stringa che indica il nome che diamo al nostro database in questo caso: libri
PUBLIC sPercorso AS String = User.home ' indica il percorso in cui si trova il database
PUBLIC $hConn AS NEW Connection
PUBLIC sql AS String
PUBLIC hTable AS Result
PUBLIC hres AS Result
PUBLIC i AS Integer
PUBLIC PROCEDURE Checkdatab()
WITH $hConn
.Type = "sqlite3" 'tipo di database da utilizzare
.Host = sPercorso
.Login = ""
.Password = ""
.Name = sName
END WITH
$hConn.Open
IF NOT $hConn.Databases.Exist(sName) THEN
$hConn.Databases.Add(sName)
$hConn.Close
$hConn.Name = sName
$hConn.Open()
sql = "CREATE TABLE biblio ( id INTEGER PRIMARY KEY, titolo VARCHAR(255) DEFAULT NULL, autore VARCHAR(255) DEFAULT NULL, annolettura VARCHAR(255) DEFAULT NULL, commento VARCHAR(255) DEFAULT NULL); " 'crea una tabella nel database
hTable = $hConn.EXEC(sql)
$hConn.Close
ELSE
$hConn.Close
ENDIF
END
PUBLIC PROCEDURE Aggiorna()
sql = "SELECT * FROM biblio"
hres = $hConn.EXEC(sql)
IF NOT hres.Available THEN
Message.Error("database vuoto", "OK")
ELSE
FMain.GridView1.Mode = Select.Multiple
FMain.GridView1.Header = FMain.GridView1.Horizontal
FMain.GridView1.Columns.Count = 4
FMain.GridView1.Columns[0].Text = "Titolo"
FMain.GridView1.Columns[1].Text = "Autore"
FMain.GridView1.Columns[2].Text = "Letto nel"
FMain.GridView1.Columns[3].Text = "Commento"
FMain.GridView1.Columns[0].Width = 150
FMain.GridView1.Columns[1].Width = 150
FMain.GridView1.Columns[2].Width = 150
FMain.GridView1.Columns[3].Width = 150
FMain.GridView1.Rows.Count = hres.Count
i = 0
FOR EACH hres
FMain.GridView1[i, 0].Text = hres!titolo
FMain.GridView1[i, 1].Text = hres!autore
FMain.GridView1[i, 2].Text = hres!annolettura
FMain.GridView1[i, 3].Text = hres!commento
i = i + 1
NEXT
ENDIF
END
PUBLIC PROCEDURE inserisci()
$hconn.Begin
hres = $hconn.Create("biblio")
hres!titolo = Aggiungi.TextBox2.Text 'scrittura dei vari campi del record
hres!autore = Aggiungi.TextBox3.Text
hres!annolettura = Aggiungi.TextBox4.Text
hres!commento = Aggiungi.TextArea1.Text
hres.Update
$hConn.Commit
$hConn.Close
Aggiungi.TextBox2.text = ""
Aggiungi.TextBox3.text = ""
Aggiungi.TextBox4.text = ""
Aggiungi.TextArea1.Text = ""
Message.Info("Libro aggiunto al database", "OK")
END
e poi ho scritto per esempio:
PUBLIC SUB Button1_Click()
Funzioni.inserisci
Funzioni.Aggiorna
END
Hola!