Velocidad De Carga De SQlite


Ir a la página 1, 2, 3  Siguiente

Objetivo: Velocidad De Carga De SQlite
Hola, soy nuevo en gambas y por ende en este foro, de hecho soy bastante nuevito en Linux
Estoy tratando de migrar de a poco un simple programa de Stock que tengo hecho en Windows a linux y estoy usando el maravilloso "Gambas2" sobre Ubuntu. He bajado el libro de gambas de este foro y estoy utilizándolo para ir conociendo las prestaciones.
Tengo la siguiente consulta: estoy usando el ejemplo del programa de la sección "Bases de datos" del libro, todo aparenta normal, conecto a la base sqlite3, cargo los datos en un "columnview" y puedo hacer altas, bajas y modificaciones.
El problema comienza cuando importo a la base de datos mi base real, que para ser precisos tiene 8300 registros.
El columnview se va actualizando gradualmente y tarda cerca de un minuto en terminar de cargar la base de datos y mostrarla.
Esto es normal? Hay alguna manera de acelerar esto o es propia limitación de SQlite?

Desde ya muchas gracias...

Marcelo

Perfil MP  
Objetivo: Re: Velocidad De Carga De SQlite
Apuesto a que el problema no es SQLite. A mí me ocurría igual y el coste del proceso reside en mostrar la información más que en leerla. En mi caso, iba agregando filas 1 a 1. Error. Era muy lento

Lo solucioné agregando todas las filas del tirón (lista.rows.count = MiRecorset.Count) y luego, en vez de rellenarlo, uso el evento DATA. Yo cargo unos 2000 registros (con imágenes, mucho más costoso) y va tremendamente fluido.

Escoger SQLite u otra tecnología no lo haría yo (salvo casos extremos) por la velocidad, sino por lo que necesitas. Y SQLite tiene la enorme ventaja de ser un sistema de base de datos portable.

Un saludo

Objetivo: Re: Velocidad De Carga De SQlite
netking86:
Puedes poner un ejemplo de como usas el evento DATA, yo nunca supe manejarlo..

Gracias

Objetivo: Re: Velocidad De Carga De SQlite
Muchísimas gracias por la pronta respuesta, me sumo al pedido, podría ser un pequeño ejemplo de como mostrar una base de esa manera?

Perfil MP  
Objetivo: Re: Velocidad De Carga De SQlite
Aquí va un pequeño ejemplo:

http://foro.gambas-es.org/viewtopic.php?p=3273#p3273


De esta forma da igual lo grande que sea la base de datos en número de registros, porque el gridview (o tableview) sólo cargará desde la bd lo que tenga que ser mostrado en el grid, es decir, las celdas visibles, con un incremento en el rendimiento increíble.

Saludos

Perfil MP  
Objetivo: Re: Velocidad De Carga De SQlite
Uh!!! Mil gracias!!!!!
Ya mismo lo pruebo y aviso como va!!!

Perfil MP  
Objetivo: Re: Velocidad De Carga De SQlite
A ver, pego el código que tengo para hacer la prueba y el error que recibo...
Más que seguro que el error es mio por simple principiante pero bueno... cualquier ayuda es agradecida!!


' gambas class file

' Conexión con la base de datos
PRIVATE hConn AS Connection
PRIVATE FUNCTION ConectarBase() AS Boolean
IF hConn <> NULL THEN RETURN FALSE
hConn = NEW Connection
hConn.Host = "/home/libre/Gambas/Linux"
hConn.Name = "LinuxFA"
hConn.Type = "sqlite3"
TRY hConn.OPEN()
IF ERROR THEN
hConn = NULL
Message.Error("Error al conectar con la base de datos")
RETURN TRUE
ENDIF
RETURN FALSE
END
' Cerrar la base de datos
PRIVATE SUB CerrarConexion()

IF hConn = NULL THEN RETURN
hConn.Close()
hConn = NULL
END


PUBLIC SUB _new()

END

PRIVATE $hres AS Result

PUBLIC SUB Form_Open()


gridview.Columns.Count = 4
gridview.Columns[0].Text = ("Campo1")
gridview.Columns[1].Text = ("Campo2")
gridview.Columns[2].Text = ("Campo3")
gridview.Columns[3].Text = ("Campo4")

$hres = hConn.Exec("select * from Datos")
gridview.Rows.Count = $hres.Count

END

'este es el manejador del evento Data
PUBLIC SUB gridview_Data(Row AS Integer, Column AS Integer)
$hres.MoveTo(Row)

' Esta línea sólo es para alternar los colores de las filas
IF row MOD 2 = 0 THEN gridview.Data.Background = Color.LightBackground
END


Tengo ese código en un FORM que solamente tiene el GRIDVIEW y al ejecutarlo recibo el error:

NULL OBJECT

y se detiene en la línea:
$hres = hConn.Exec("select * from Datos")


Dónde me estoy equivocando?

Muchas gracias!!!!

Perfil MP  
Objetivo: Re: Velocidad De Carga De SQlite
El objeto hConn no está establecido. Tienes que llamar a la función de conectar con la BBDD antes de ejecutar la consulta.

Objetivo: Re: Velocidad De Carga De SQlite
Muchas Gracias!!!
Perdonen mi insistencia, pero no logro entender donde se cargan los datos de la base....
Mi código quedó así:

' gambas class file

' Conexión con la base de datos
PRIVATE hConn AS Connection
PRIVATE FUNCTION ConectarBase() AS Boolean
IF hConn <> NULL THEN RETURN FALSE
hConn = NEW Connection
hConn.Host = "/home/libre/Gambas/Gridview"
hConn.Name = "LinuxFA"
hConn.Type = "sqlite3"
TRY hConn.OPEN()
IF ERROR THEN
hConn = NULL
Message.Error("Error al conectar con la base de datos")
RETURN TRUE
ENDIF
RETURN FALSE
END
' Cerrar la base de datos
PRIVATE SUB CerrarConexion()

IF hConn = NULL THEN RETURN
hConn.Close()
hConn = NULL
END


PUBLIC SUB _new()

END

PRIVATE $hres AS Result

PUBLIC SUB Form_Open()

IF ConectarBase() THEN RETURN

gridview.Columns.Count = 4
gridview.Columns[0].Text = ("Campo1")
gridview.Columns[1].Text = ("Campo2")
gridview.Columns[2].Text = ("Campo3")
gridview.Columns[3].Text = ("Campo4")

$hres = hConn.Exec("select * from Datos")
gridview.Rows.Count = $hres.Count

END

'este es el manejador del evento Data
PUBLIC SUB gridview_Data(Row AS Integer, Column AS Integer)
$hres.MoveTo(Row)

' Esta línea sólo es para alternar los colores de las filas
IF row MOD 2 = 0 THEN gridview.Data.Background = Color.LightBackground
END


De esta manera obtengo una gridview en el formulario con filas grises y blancas alternadamente pero no se donde debo cargar los datos ya que aparece vacia y ni siquiera tiene los encabezados "Campo1", "Campo2", etc.

Gracias otra vez y perdon por la insistencia... ya aprenderemos...

Marcelo

Perfil MP  
Objetivo: Re: Velocidad De Carga De SQlite
Si ni siquiera aparecen los encabezados entonces es que la llamada a ConectarBase devuelve True, es decir, falla, por lo tanto se sale del procedimiento Form_Load inmediatamente.

Date cuenta de que ese procedimiento tiene que devolver False en caso de éxito al conectar con la BD.

Lo que me extraña es que no se dispare el error y por lo tanto el mensaje con dicho error dentro de ConectarBase. ¿Seguro que la base de datos contiene registros y está en la ruta correcta? Porque en sqlite, si se intenta conectar a una base de datos que no existe, se crea una nueva, pero vacía, sin tablas ni nada...

Saludos

Perfil MP  
Ir a la página 1, 2, 3  Siguiente

Página 1 de 3


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1492s (PHP: 3% SQL: 97%)
Consultas SQL: 23 - Debug off - GZIP Activado