In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Error al Agregar varios registros (SqLite)

Foro público de Xailer en español
Responder
PEDRO DE LEON RODAS[3]
Mensajes: 266
Registrado: Mar Oct 28, 2008 4:41 am

Error al Agregar varios registros (SqLite)

Mensaje por PEDRO DE LEON RODAS[3] »

Estoy haciendo pruebas en la agregacion de varios registros, y me encontre
con un error.
Al querer agregar Varios registros a la tabla Customer de la base de datos
que trae Xailer como ejemplo
Me manda el error que adjunto, no lo hace a la primera pero se tarda en
agregar los registros.
Y mi ordenador se alenta demasiado.
Estoy haciendolo con lo siguiente:
Local a
::Clientes:Gobottom()
For a=1 to 100
::Clientes:AddNew()
::Clientes:First="NOMBRE"+Alltrim(str(a))
::Clientes:Update()
Next
La tabla contiene aproximadamente 35,000 registros y mi intencion es
almacenar hasta 1 millón o más.
Para seguir haciendo la prueba de Velocidad.
¿ Por que hago esta prueba ?
Bueno, en la actualidad tengo trabajando un sistema de facturación que lo
hice en foxpro.
Este sistema genera numeros de series, los cuales son desde 1 hasta 5000 o
más, y logicamente se almacena en una tabla.
En este sistema la agregación es rapida.
Mi intención es migrarla a Xailer con SqLite, pues veo muy buena
alternativa.
Logicamente antes de comprar la licencia quiero estar 100% seguro de que no
voy a tener lentitud y problemas.
De antemano mil gracias
Dios les bendiga


Attached files
Martin Del Angel
Mensajes: 360
Registrado: Mié Dic 03, 2008 5:05 am

Error al Agregar varios registros (SqLite)

Mensaje por Martin Del Angel »

PEDRO DE LEON RODAS wrote:
> Estoy haciendo pruebas en la agregacion de varios registros, y me encontre
> con un error.
>
> Al querer agregar Varios registros a la tabla Customer de la base de datos
> que trae Xailer como ejemplo
> Me manda el error que adjunto, no lo hace a la primera pero se tarda en
> agregar los registros.
> Y mi ordenador se alenta demasiado.
>
>
> Estoy haciendolo con lo siguiente:
>
> Local a
> ::Clientes:Gobottom()
> For a=1 to 100
> ::Clientes:AddNew()
> ::Clientes:First="NOMBRE"+Alltrim(str(a))
> ::Clientes:Update()
> Next
>
>
> La tabla contiene aproximadamente 35,000 registros y mi intencion es
> almacenar hasta 1 millón o más.
> Para seguir haciendo la prueba de Velocidad.
>
> ¿ Por que hago esta prueba ?
> Bueno, en la actualidad tengo trabajando un sistema de facturación que lo
> hice en foxpro.
> Este sistema genera numeros de series, los cuales son desde 1 hasta 5000 o
> más, y logicamente se almacena en una tabla.
> En este sistema la agregación es rapida.
>
> Mi intención es migrarla a Xailer con SqLite, pues veo muy buena
> alternativa.
> Logicamente antes de comprar la licencia quiero estar 100% seguro de que no
> voy a tener lentitud y problemas.
>
>
> De antemano mil gracias
>
> Dios les bendiga
>
>
>
Hola que tal Pedro !
Intenta Usar FastAddNew() y FastUpdate()
Saludos...
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Error al Agregar varios registros (SqLite)

Mensaje por jfgimenez »

Pedro,
> Estoy haciendo pruebas en la agregacion de varios registros, y me encontre
> con un error.
He probado varias veces tu código y en ningún caso se ha producido ningún
error. Por favor, envíanos un ejemplo autocontenido para probar.
> Y mi ordenador se alenta demasiado.
Respecto a la velocidad... SQLite funciona de la siguiente forma: todas las
operaciones de escritura sobre la BD se realizan bajo una transacción. Si no
se indica expresamente, el propio SQLite abre una transacción, ejecuta el
comando y cierra la transacción. Esto quiere decir, que en el ejemplo que
has puesto se están creando y cerrando 100 transacciones, una por cada
operación de escritura. Lo que debes hacer es iniciar una transacción antes
de entrar en el bucle, y cerrarla al salir del bucle. P.ej.:
Local a
::Clientes:Gobottom()
::oDataSource:BeginTrans()
For a=1 to 100
::Clientes:AddNew()
::Clientes:First="NOMBRE"+Alltrim(str(a))
::Clientes:Update()
Next
::oDataSource:CommitTrans()
Pruébalo y verás que hay una diferencia enorme de velocidad.
Por otro lado, como ha comentado Martín del Ángel, si no hay datacontrols
para actualizar es preferible utilizar FastAddnew() / FastUpdate(). Pero
mejor aún, si vas a hacer actualizaciones masivas sobre la BD, siempre es
preferible utilizar comandos INSERT directamente sobre el datasource con el
método Execute(). Una vez que termines las inserciones, si tienes algún
dataset abierto que se puede ver afectado, deberás actualizarlo con
Refresh()
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
PEDRO DE LEON RODAS[3]
Mensajes: 266
Registrado: Mar Oct 28, 2008 4:41 am

Error al Agregar varios registros (SqLite)

Mensaje por PEDRO DE LEON RODAS[3] »

Apreciables Martin Del Angel y Jose F. Gimenez, gracias por su ayuda.
Apliqué los ejemplos que me dieron pero sigue haciendo lo mismo se alenta y
manda el error.
Lo probé con Insert y de esta forma se agregan los registros nuevos sin
ningún problema
Lo hice de la siguiente forma
MemVar Campo1,Campo2
Local a
Private Campo1,Campo2
For a=1 to 100
Campo1="PRUEBA""+Alltrim(str(a))
Campo2="DIRECCION""+Alltrim(str(a))
::Base:Execute("Insert into Customer (First,Last) Values
('&Campo1','&Campo2') " )
Next
Les doy gracias y a la vez les seguiré consultando, espero no molestarles.
Dios les bendiga
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Error al Agregar varios registros (SqLite)

Mensaje por jfgimenez »

Pedro,
> Apliqué los ejemplos que me dieron pero sigue haciendo lo mismo se alenta
> y manda el error.
Seguramente hay algo que no estás haciendo bien. Prueba el ejemplo que
adjunto, copiando la BD de prueba al mismo directorio donde pruebes el
ejemplo. Podrás ver la diferencia enorme de tiempos entre declarar la
transacción y no declararla. En mi ordenador tarda de media 9,13 segundos en
el primer caso, y 0,32 segundos en el segundo.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Error al Agregar varios registros (SqLite)

Mensaje por jfgimenez »

Pedro,
aquí está el ejemplo.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info


Attached files sqlite1.zip (2.1 KB)Â
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Martin Del Angel
Mensajes: 360
Registrado: Mié Dic 03, 2008 5:05 am

Error al Agregar varios registros (SqLite)

Mensaje por Martin Del Angel »

Jose F. Gimenez wrote:
> Pedro,
>
> aquí­ está el ejemplo.
>
Jose Buen Dia !
Al compilar el ejemplo que pusiste sale este error:
Enlazando sqlite1.exe...
Error: 'C:XAILERLIBXAILER.RES' contains invalid OMF record, type 0x00
0 Warnings, 1 Errors
Tengo la Versión 1.9.8
Saludos...
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Error al Agregar varios registros (SqLite)

Mensaje por jfgimenez »

Martín,
> Al compilar el ejemplo que pusiste sale este error:
>
> Enlazando sqlite1.exe...
> Error: 'C:XAILERLIBXAILER.RES' contains invalid OMF record, type 0x00
> 0 Warnings, 1 Errors
>
>
> Tengo la Versión 1.9.8
Perdón, el ejemplo estaba hecho con la 2.0. Adjunto el mismo ejemplo para
que funcione con la 1.9x
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info


Attached files sqlite1.zip (2.1 KB)Â
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Martin Del Angel
Mensajes: 360
Registrado: Mié Dic 03, 2008 5:05 am

Error al Agregar varios registros (SqLite)

Mensaje por Martin Del Angel »

Jose F. Gimenez wrote:
> Martí­n,
>
>> Al compilar el ejemplo que pusiste sale este error:
>>
>> Enlazando sqlite1.exe...
>> Error: 'C:XAILERLIBXAILER.RES' contains invalid OMF record, type 0x00
>> 0 Warnings, 1 Errors
>>
>>
>> Tengo la Versión 1.9.8
>
> Perdón, el ejemplo estaba hecho con la 2.0. Adjunto el mismo ejemplo para
> que funcione con la 1.9x
>
Otra vez yo:
Ahora marca este error:
Compilando Form1.prg...
Enlazando sqlite1.exe...
Fatal: Unable to open file 'GTGUI.LIB'
0 Warnings, 1 Errors
Revise en c:xailerxharbourlib y no existe esa lib.
volvi a instalar Xarbour y pasa lo mismo , no existe gtgui.lib
Saludos...
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Error al Agregar varios registros (SqLite)

Mensaje por jfgimenez »

Martín,
> Compilando Form1.prg...
> Enlazando sqlite1.exe...
> Fatal: Unable to open file 'GTGUI.LIB'
> 0 Warnings, 1 Errors
Perdona. Entra en las propiedades del proyecto, en el apartado "librerías" y
elimínala. Asegúrate también de que está marcada gtnul.lib
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Martin Del Angel
Mensajes: 360
Registrado: Mié Dic 03, 2008 5:05 am

Error al Agregar varios registros (SqLite)

Mensaje por Martin Del Angel »

Jose F. Gimenez wrote:
> Martí­n,
>
>> Compilando Form1.prg...
>> Enlazando sqlite1.exe...
>> Fatal: Unable to open file 'GTGUI.LIB'
>> 0 Warnings, 1 Errors
>
> Perdona. Entra en las propiedades del proyecto, en el apartado "librerí­as" y
> elimí­nala. Asegúrate también de que está marcada gtnul.lib
>
Ya funciono, tambien hay que desmarcar zlib.lib
Una Pregunta José:
Esto mecanismo tambien aplica para MySql?
Saludos...
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Error al Agregar varios registros (SqLite)

Mensaje por jfgimenez »

Martín,
> Esto mecanismo tambien aplica para MySql?
No estoy seguro al 100%, pero creo que MySQL no se ve afectado al actualizar
masivamente la BD sin usar transacciones. En cualquier caso, siempre es muy
aconsejable hacer transacciones, para evitar que los datos se vuelvan
incongruentes ante cualquier error que pueda dejar la actualización a
medias.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
PEDRO DE LEON RODAS[3]
Mensajes: 266
Registrado: Mar Oct 28, 2008 4:41 am

Error al Agregar varios registros (SqLite)

Mensaje por PEDRO DE LEON RODAS[3] »

Jose, si funciona perfectamente rapido con el ejemplo que me
proporcionastes.
Ahora tengo otro Detalle.
Ya tengo en la tabla customer 700,000 registros.
Estoy trabajando con un formulario y en el cual esta integrada la tabla
Customer Y tambien tengo un TbBrowse que muestra todos los gegistros de esta
tabla.
Cuando ejecuto el formulario se tarda como 15 minutos en abrir.
¿ Por que esa Lentitud ?
¿ Que me aconsejas hacer ahi ?
En otra prueba quite la tabla y hago la query de la siguiente forma desde
un boton.
Local Toma_datos
::Base:BeginTrans()
Toma_datos=::Base:Query("Select * from customer order by first")
Toma_datos:lOpen=.t.
::TbBrowse:oDataSet=Toma_datos
::Base:CommitTrans()
En esto se tarda un total de 8 minutos
Pero aun así es mucho tiempo.
Lo que más me extraña es que cuando hago lo sugiente lo hace rapido, como en
1 segundo.
::Base:BeginTrans()
Toma_datos=::Base:Query("Select * from customer where First='LOREN' order by
first")
Toma_datos:lOpen=.t.
::TbBrowse:oDataSet=Toma_datos
::Base:CommitTrans()
¿ Es normal que se tarde tantos minutos ?
De antemano mil gracias.
Martin Del Angel
Mensajes: 360
Registrado: Mié Dic 03, 2008 5:05 am

Error al Agregar varios registros (SqLite)

Mensaje por Martin Del Angel »

PEDRO DE LEON RODAS wrote:
> Jose, si funciona perfectamente rapido con el ejemplo que me
> proporcionastes.
>
> Ahora tengo otro Detalle.
>
> Ya tengo en la tabla customer 700,000 registros.
>
> Estoy trabajando con un formulario y en el cual esta integrada la tabla
> Customer Y tambien tengo un TbBrowse que muestra todos los gegistros de esta
> tabla.
> Cuando ejecuto el formulario se tarda como 15 minutos en abrir.
>
> ¿ Por que esa Lentitud ?
>
> ¿ Que me aconsejas hacer ahi ?
>
>
> En otra prueba quite la tabla y hago la query de la siguiente forma desde
> un boton.
>
> Local Toma_datos
>
> ::Base:BeginTrans()
> Toma_datos=::Base:Query("Select * from customer order by first")
> Toma_datos:lOpen=.t.
> ::TbBrowse:oDataSet=Toma_datos
> ::Base:CommitTrans()
>
> En esto se tarda un total de 8 minutos
>
> Pero aun así­ es mucho tiempo.
>
> Lo que más me extraña es que cuando hago lo sugiente lo hace rapido, como en
> 1 segundo.
> ::Base:BeginTrans()
> Toma_datos=::Base:Query("Select * from customer where First='LOREN' order by
> first")
> Toma_datos:lOpen=.t.
> ::TbBrowse:oDataSet=Toma_datos
> ::Base:CommitTrans()
>
>
> ¿ Es normal que se tarde tantos minutos ?
>
>
>
> De antemano mil gracias.
>
>
Pedro:
No es aconsejable abrir la tabla completa, es una practica heredada de
los DBF's , tienes que hacer LA Consulta SQL (SELECT) con criterios
donde solo obtengas la Inf. necesaria, como por ejemplo:
STRSQL:="SELECT CABFACT.*,CLIENTES.NOMBRE AS NOMBRECLI FROM CABFACT "+;
"LEFT JOIN CLIENTES ON CABFACT.ID_CLIENTE =
CLIENTES.ID_CLIENTE ORDER BY CABFACT.ID_FACTURA"
WITH OBJECT ::oCABFACT
:cSELECT:=strSQL
IF !:Open()
MSGSTOP('Error al Abrir Tabla de Facturas','Error')
Application:Terminate()
ENDIF
END
Tienes que ver que datos son los que realmente son necesarios mostrar.
para que tus consultas sean rapidas.
Voy a preparar un pequeño programa donde utilizo SQLITE para hacer
Facturas de lo mas simple aca en México, en cuanto lo tenga lo subo.
Saludos....
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

Error al Agregar varios registros (SqLite)

Mensaje por Manu Exposito »

Pedro cuando hace un select de toda la tabla estás cargando la memoria
RAM con el resultado de dicho SELECT. A medida que la memoria se agota
el programa irá más lento ya que tiene que hacer volcados de la RAM al
HD. Haz SELECT más restrictivos y verás como mejora el rendimiento...
PEDRO DE LEON RODAS escribió:
> Jose, si funciona perfectamente rapido con el ejemplo que me
> proporcionastes.
>
> Ahora tengo otro Detalle.
>
> Ya tengo en la tabla customer 700,000 registros.
>
> Estoy trabajando con un formulario y en el cual esta integrada la tabla
> Customer Y tambien tengo un TbBrowse que muestra todos los gegistros de esta
> tabla.
> Cuando ejecuto el formulario se tarda como 15 minutos en abrir.
>
> ¿ Por que esa Lentitud ?
>
> ¿ Que me aconsejas hacer ahi ?
>
>
> En otra prueba quite la tabla y hago la query de la siguiente forma desde
> un boton.
>
> Local Toma_datos
>
> ::Base:BeginTrans()
> Toma_datos=::Base:Query("Select * from customer order by first")
> Toma_datos:lOpen=.t.
> ::TbBrowse:oDataSet=Toma_datos
> ::Base:CommitTrans()
>
> En esto se tarda un total de 8 minutos
>
> Pero aun así­ es mucho tiempo.
>
> Lo que más me extraña es que cuando hago lo sugiente lo hace rapido, como en
> 1 segundo.
> ::Base:BeginTrans()
> Toma_datos=::Base:Query("Select * from customer where First='LOREN' order by
> first")
> Toma_datos:lOpen=.t.
> ::TbBrowse:oDataSet=Toma_datos
> ::Base:CommitTrans()
>
>
> ¿ Es normal que se tarde tantos minutos ?
>
>
>
> De antemano mil gracias.
>
>
Responder