Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



jueves, 6 de octubre de 2011

Gridviews: El evento DATA Mostrar consultas de Bases de Datos Rápidamente


Gridviews: El evento Data
Mostrar consultas de Bases de Datos
Rápidamente

Cuando rellenamos un gridviews con los resultados de una consulta de una base de datos, el proceso de escritura y muestra en pantalla de dichos datos es muy lento.
Para acelerar enormemente este proceso, se utiliza el evento DATA, el cual se encarga de "cargar" en el gridviews solo que se va a mostrar en pantalla.

Aqui teneis un código de ejemplo, para usarlo, simplemente
1) creas un proyecto en gambas2,
2) añade al formulario un gridviews
3) en Proyecto/Propiedades/Componentes activa el componente "gb.db"
4) y añades el código siguiente al formulario:


' Gambas class file
PRIVATE $hConn AS NEW Connection
PRIVATE $res AS Result
'-------------------------------------------------
PUBLIC SUB Form_Open()
DIM iCount AS Integer
DIM hTable AS Table
DIM rTest AS result
DIM sql AS String
'define the gridview layout
GridView1.header = GridView.Horizontal
GridView1.grid = TRUE
GridView1.Rows.count = 0
GridView1.Columns.count = 2
GridView1.Columns[0].text = "ID"
GridView1.Columns[1].text = "Value"
GridView1.Columns[0].width = 55
GridView1.Columns[1].width = 55
WITH $hConn
.Type = "sqlite"
.host = User.home
.name = ""
END WITH
'delete an existing test.sqlite
IF Exist(User.home & "/test.sqlite") THEN
KILL User.home & "/test.sqlite"
ENDIF
'create test.sqlite
$hConn.Open
$hConn.Databases.Add("test.sqlite")
$hconn.Close
'define the table sampleTable
$hconn.name = "test.sqlite"
$hConn.Open
hTable = $hConn.Tables.Add("sampleTable")
hTable.Fields.Add("s_seq", db.Integer)
hTable.Fields.Add("s_rndm", db.Integer)
hTable.PrimaryKey = ["s_seq"]
hTable.Update
'fill the table with generated data
$hconn.Begin
rTest = $hConn.Create("sampleTable")
FOR iCount = 1 TO 10000
rTest!s_seq = iCount
rTest!s_rndm = Int(Rnd(0, 100))
rTest.Update
NEXT
$hConn.Commit
'read the database
sql = "select s_seq as ID, s_rndm as Value from sampleTable"
$res = $hconn.Exec(sql)
CATCH
$hConn.Rollback
Message.Error(DConv(Error.Text))
END
'-------------------------------------------------
PUBLIC SUB Form_Activate()
'change the rowcount of the gridview from 0 to the number of records.
'This triggers the data handling event
GridView1.Rows.Count = $res.Count
END
'-------------------------------------------------
PUBLIC SUB GridView1_Data(Row AS Integer, Column AS Integer)
$res.moveTo(row)
GridView1.Data.text = Str($res[GridView1.Columns[column].text])
END
'-------------------------------------------------
PUBLIC SUB Form_Close()
$hconn.Close
END
'-------------------------------------------------


Este programa, mediante código, crea una base de datos tipo sqlite, le añade una tabla de 2 columnas. Y con un for next le va añadiendo 10.000 registros a la base de datos.

Con el evento DATA, cada vez que se mueve el gridview, se van redibujando los datos de la consulta

Fuentes:
http://kalaharix.wordpress.com/gambas/gridview-and-the-data-handling-event/


http://www.gambas-es.org/viewtopic.php?f=4&t=280&highlight=gridview1data