Niente di più facile.
Hai bisogno di dichiarare 2 oggetti, di tipo Connection e Result.
Ecco un esempio di connessione:
DIM Connessione AS NEW Connection
DIM Risultato AS Result
'-- connetti al database
Connessione.Name = Application.Path & "/nome_db"
Connessione.Type = "sqlite3"
Connessione.OPEN
Risultato = Connessione.Find("nome_tabella", "tuocampo = &1", NomeVariabile)
IF Risultato.Available = FALSE THEN
Msgbox("Nessun campo presente in base alla query impostata")
END IF
Risultato["nomecampo"] = Variabile
Risultato.Update '-- aggiorni i campi
Connessione.Commit '-- scrivi fisicamente nel DB
Connessione.Close
Alternativamente, al posto di Connessione.Find puoi usare Connessione.Exec("...") per eseguire una query in SQL puro.
faccio un test con sqlite :
PUBLIC Conexion As Connection
PUBLIC Resultado As Connection
PUBLIC SUB ConectarDB_Click()
Conexion = NEW Connection
Conexion.Name = Application.Path & "/TestGambas.sqlite"
Conexion.Type = "sqlite3"
Conexion.OPEN()
Resultado = Conexion.Exec("SELECT * FROM TTestGambas")
IF Resultado.Available = FALSE THEN
Message.Error("No es disponible")
RETURN
END IF
Conexion.Close()
END
me responde con Message = "No es disponible"
se conecta o no????
con mysql server non ho nessun problemma di gestione database.
Prova con:
Resultado = Conexion.Find("TTestGambas")
per questione di lavoro sto migrando da vb6 + vs2005 + c++ verso il opensource da + di 9 mesi.ok con monodevelop e python.
sono in apprendistato con gambas.
la situazione e cosi:
creo un database .sqlite con sqlitestudio.
mi connetto al DB.niente,non accessibile.
allora creo una row nel DB.ok,mi connetto.
questa è la situazione.cmq,mi sta bene.facile da gestire e trasportare.
- verifica se la connessione è veramente aperta (usa try catch, per esempio...);
- verifica se hai messo tutti i parametri necessari alla connessione;
- verifica se la tabella e il file esistono veramente;
- verifica se "Application.Path" + ritornano la corretta posizione.
avevo già controllato ( esperienza dal vstudio2005 )
Usa il debug o in alternativa metti qualche PRINT tra un comando e l'altro.
anche questo ( esperienza dal vb6 ),debug con la funzione passo a passo con variabili locali per tenere sott'occhio.
in Edit (dimenticavo):
Resultado = Conexion.Find("TTestGambas")
errore sql.........
errore di trascrizione,come da codice reale:
PUBLIC Conexion AS Connection
PUBLIC Resultado AS Result
PUBLIC SUB _new()
'''''''''''''''''
END
PUBLIC SUB Form_Open()
ME.Center
clvGestionColumna.Columns.Count = 8
clvGestionColumna.Columns[0].Text = "Index"
clvGestionColumna.Columns[0].Width = 100
clvGestionColumna.Columns[1].Text = "Apellido"
clvGestionColumna.Columns[1].Width = 200
clvGestionColumna.Columns[2].Text = "Nombre"
clvGestionColumna.Columns[2].Width = 200
clvGestionColumna.Columns[3].Text = "Fecha (nac)"
clvGestionColumna.Columns[3].Width = 100
clvGestionColumna.Columns[4].Text = "Ciudad(nac)"
clvGestionColumna.Columns[4].Width = 180
clvGestionColumna.Columns[5].Text = "Provincia(nac)"
clvGestionColumna.Columns[5].Width = 180
clvGestionColumna.Columns[6].Text = "Region(nac)"
clvGestionColumna.Columns[6].Width = 180
clvGestionColumna.Columns[7].Text = "Pais(nac)"
clvGestionColumna.Columns[7].Width = 180
ConectarDB
END
PRIVATE SUB ConectarDB()
DIM strDatabase AS String
Conexion = NEW Connection
IF Dialog.OpenFile() THEN
txaConexion.Text = " Database : Ningun database elejido del utente"
txaConexion.BackColor = &HFF0000&
txaConexion2.Text = " No conectado al database"
txaConexion2.BackColor = &HFF0000&
RETURN
ENDIF
Conexion.Name = Dialog.Path
Conexion.Type = "sqlite3"
Conexion.OPEN()
Resultado = Conexion.Exec("SELECT * FROM TDBDCaserma")
IF Resultado.Available = FALSE THEN
txaConexion.Text = " Database :" & Dialog.Path
txaConexion.BackColor = &HFF0000&
txaConexion2.Text = " No conectado al database"
txaConexion2.BackColor = &HFF0000&
RETURN
ELSE
txaConexion.Text = " Database :" & Dialog.Path
txaConexion.BackColor = &H0080FF&
txaConexion2.Text = " Conectado al database"
txaConexion2.BackColor = &H00FF00&
CargarColumnas()
END IF
Conexion.Close()
CATCH
Message.Info(Error.Text)
Conexion.Close()
END
in effetti,se l'errore fosse stato la dichiarazione della variabile Resultado AS Connection anzichè Result,cmq dovrebbe buggare indipendentemente che ci sia un record o nessuno nel database,o sbaglio..
Prova a dichiarare la connessione all'interno della procedura che accederà al DB e non a livello di oggetti globali. E poi aggiungi la parola NEW perché la connessione va creata oltre che dichiarata per poterla usare.
PUBLIC SUB Accesso_DB()
DIM Conexion AS NEW Connection
DIM Resultado AS Result
(....)
x leo72 e md9327
DIM Conexion AS NEW Connection
DIM Resultado AS Result
(....)
va come variabile locale invece di variabile globale. :good:
Ribadisco: secondo me il motivo per cui non andava al nostro amico era perché si scordava di utilizzare la parola chiave NEW: una connessione va inizializzata oltreché creata.
Penso che potrebbe funzionare anche come:
PUBLIC Connessione AS NEW Connection
(però non l'ho provato)
provare x imparare :hammer:
PRIVATE $Conexion AS Connection
PRIVATE $Resultado AS Result
cmq il programma funge.solo per imparare un'altra cosa.