Autore Topic: [RISOLTO]Gestione database .odb  (Letto 3183 volte)

Offline gustav_ygman

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
[RISOLTO]Gestione database .odb
« il: 19 Dicembre 2010, 22:29:41 »
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:

Codice: [Seleziona]
' 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?
« Ultima modifica: 25 Dicembre 2010, 10:09:16 da gustav_ygman »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Gestione database .odb
« Risposta #1 il: 20 Dicembre 2010, 00:41:57 »
In area download trovi una guida per l'uso di sqlite che è un tipo di database...ti coniglio di leggerla poichè così potrai sicuramente mettere in atto la tua idea.

La scarichi QUI.

Offline gustav_ygman

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
Re: Gestione database .odb
« Risposta #2 il: 20 Dicembre 2010, 22:32:33 »
Codice: [Seleziona]
  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?
« Ultima modifica: 20 Dicembre 2010, 22:49:05 da gustav_ygman »

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Gestione database .odb
« Risposta #3 il: 20 Dicembre 2010, 23:39:26 »
Ciao, prova a vedere questo esempio
http://www.gambas-it.org/wp/?wpfb_dl=102

Offline gustav_ygman

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
Re: Gestione database .odb
« Risposta #4 il: 24 Dicembre 2010, 10:32:37 »
Trovati gli errori  ;D

era la sintassi dei comandi sql ad essere sbagliata.

adesso si procede a gonfie vele  :)


Edit: come si fa a far andare a capo le righe in una textarea senza che tagli le parole? ho cercato sul forum ma non ho trovato ???

Edit2: se espando il form a tutto schermo i componenti restano grandi uguali, come faccio a farli espandere mantenendo le proporzioni uguali?
« Ultima modifica: 24 Dicembre 2010, 11:21:19 da gustav_ygman »

Offline gustav_ygman

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
Re: Gestione database .odb
« Risposta #5 il: 24 Dicembre 2010, 12:30:07 »
terzo problema (si procede a gonfie vele un corno  >:()  come si setta la larghezza di default di una colonna della gridview?

Io uso:

Codice: [Seleziona]
GridView1.Columns[0].Width = 150

Non mi da errori ma le colonne restano tutte piccole  ???




Grazie a tutti per l'aiuto  :)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Gestione database .odb
« Risposta #6 il: 24 Dicembre 2010, 13:42:42 »
Per ogni richiesta di aiuto sarebbe buona norma aprire discussioni diverse così da agevolare la catalogazione delle discussione e favorire le ricerche future di altri utenti.

Offline gustav_ygman

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
Re: Gestione database .odb
« Risposta #7 il: 24 Dicembre 2010, 14:10:09 »
Ah ok  ;D

Sono abituato all'aprimenodiscussionipossibili degli altri forum adesso provvedo a rimediare!

Grazie mille  ;)

Offline gustav_ygman

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
Re: Gestione database .odb
« Risposta #8 il: 24 Dicembre 2010, 17:35:12 »
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  :-[)

Codice: [Seleziona]
' 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:

Codice: [Seleziona]
PUBLIC SUB Button1_Click()

  
  Funzioni.inserisci

  Funzioni.Aggiorna
  

END

Hola!
« Ultima modifica: 24 Dicembre 2010, 17:36:51 da gustav_ygman »