Página 1 de 1

SQLite-blob

Publicado: Dom Dic 21, 2008 4:55 pm
por miguel
Hola,
En un proyecto Xailer estoy manejando un Base de datos de SQLite a taves de
TSQLiteDataSource.
Tengo dos temas que no entiendo el comportamiento.
1º)
==================================
TEXT INTO cSQL
UPDATE TABLA1
SET COL1 = 'asdf';
UPDATE TABLA2
SET COL1 = 'qwerty';
UPDATE TABLA3
SET COLn = 'xxxxxxx'
ENDTEXT
oDataSource:execute( cSQL )
Solo ejecuta el sript hasta el primer ";" incluso en SQLite Editor, con
cualquier otro adminstrador de SQLite todo funciona perfectamente.
2º)
===============================================
Para guardar imagenes en una columna de tipo "blob" todo me funciona bien,
siempre que el tamaño de la imagen no supere 1 Mb. lo mismo que en el caso
anterior almaceno imagenes de cualquier tamaña en la misma base de datos con
cualquier otro programa de administracion.
Este comportamiento ¿es el previsto?, de ser así­ hay algo que yo pueda hacer
para modificarlo.
Saludos. Miguel A. Torrellas.

SQLite-blob

Publicado: Dom Dic 21, 2008 9:42 pm
por jfgimenez
Miguel,
1) Hasta donde yo sé, SQLite no ejecuta más de una sentencia en cada
ocasión. Es decir, aunque le pases varias sentencias separadas con punto y
coma, sólo ejecuta la primera, y no es que Xailer lo limite, sino que lo
hace así el parser de sentencias del propio SQLite, al menos hasta la
versión que estamos usando. Si algún otro administrador de SQLite es capaz
de ejecutar todas las sentencias será porque él las esté interpretando y
ejecutando.
2) Yo he utilizado campos blob en SQLite con imágenes de 2 y 3 MB sin ningún
problema. Por favor, envíanos un ejemplo que falle.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info

SQLite-blob

Publicado: Dom Dic 21, 2008 9:46 pm
por miguel
Gracias por responder
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje de
noticias news:[email=494eaa27@svctag-j7w3v3j....]494eaa27@svctag-j7w3v3j....[/email]
> Miguel,
>
> 1) Hasta donde yo sé, SQLite no ejecuta más de una sentencia en cada
> ocasión. Es decir, aunque le pases varias sentencias separadas con punto y
> coma, sólo ejecuta la primera, y no es que Xailer lo limite, sino que lo
> hace así­ el parser de sentencias del propio SQLite, al menos hasta la
> versión que estamos usando. Si algún otro administrador de SQLite es capaz
> de ejecutar todas las sentencias será porque él las esté interpretando y
> ejecutando.
Seguramente sea así­, solo que me extrañaba que otros programas lo hicieran.
> 2) Yo he utilizado campos blob en SQLite con imágenes de 2 y 3 MB sin
> ningún problema. Por favor, enví­anos un ejemplo que falle.
Lo preparo y lo pongo en este foro.
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
>

SQLite-blob

Publicado: Mar Dic 23, 2008 10:23 pm
por miguel
Adjunto pongo proyecto demostrativo incluida la base de datos
Saludos. Miguel A. Torrellas
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje de
noticias news:[email=494eaa27@svctag-j7w3v3j....]494eaa27@svctag-j7w3v3j....[/email]
> Miguel,
>
> 1) Hasta donde yo sé, SQLite no ejecuta más de una sentencia en cada
> ocasión. Es decir, aunque le pases varias sentencias separadas con punto y
> coma, sólo ejecuta la primera, y no es que Xailer lo limite, sino que lo
> hace así­ el parser de sentencias del propio SQLite, al menos hasta la
> versión que estamos usando. Si algún otro administrador de SQLite es capaz
> de ejecutar todas las sentencias será porque él las esté interpretando y
> ejecutando.
>
> 2) Yo he utilizado campos blob en SQLite con imágenes de 2 y 3 MB sin
> ningún problema. Por favor, enví­anos un ejemplo que falle.
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
>
--

Attached files BLOB.zip (3.1 KB)Â

SQLite-blob

Publicado: Sab Dic 27, 2008 1:56 pm
por jfgimenez
Miguel,
gracias por el ejemplo. Lo he estado investigando y efectívamente hay un
problema. Desde la versión 3.4.0 de SQLite establecieron una serie de
límites, que entre otros impide utilizar sentencias de más de 1MB de
longitud. Yo estaba seguro de que no me había tropezado con ese límite, y es
cierto; todavía tengo un programa que almacena imágenes y que no tenía
ningún problema. Pero claro, he comprobado que ese programa está hecho con
la versión 3.3.13 de SQLite, y por entonces no había límites de ningún tipo.
En resumen, puedo prepararte una nueva librería SQLite con dicho límite
aumentado a, digamos 10MB, pero siempre va a existir un límite. No obstante,
vamos a cambiar la forma de almacenar los blob en Xailer 2.0 para que no se
vea afectado por dicho límite.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info

SQLite-blob

Publicado: Dom Dic 28, 2008 11:13 am
por miguel
Hola Jose,
Gracias por responder.
He leido algo al respecto que ahora no consigo encontrar en la web de
SQLite, pero creo recordar que lei 1000000000 Bytes lo que superaria con
mucho el limite real; pero digo que no recuerdo bien.
Te agradeceria prepararas la lib ya que estoy seguro que somos un buen
número de usuarios de Xailer que usamos esta Base de Datos y por lo que se
ve creciendo.
Repecto a que solo puede ejecutar solo una sentencia, lo he solucionado
creando un método en la clase TSqlilteDataSource:ExecuteScript el cuual
interpreta cada una de las sentencias y las ejecuta una a una,
fundamentalmente lo empleo para crear las tablas, triggers, vistas, etc. en
runtime.
oDataSource:ExecuteScript( MemoRead( "miscript.sql" ) )
CLASS TSQLiteDataSource FROM XSQLiteDataSource
PUBLIC:
METHOD ExecuteScript( cScript )
ENDCLASS
METHOD ExecuteScript( cScript ) CLASS TSQLiteDataSource
LOCAL nPos, cCommand
while Len( cScript ) > 0
nPos := At( ";" , cScript )
cCommand := Left( cScript, nPos )
if "BEGIN" $ cCommand
nPos := At( "END;" , cScript) + 3
cCommand := Left( cScript, nPos )
endif
cScript := AllTrim( Right( cScript, Len(cScript) - nPos ) )
::Execute( cCommand, "Crear Tablas" )
end
RETURN Nil
Saludos. Miguel A. Torrellas
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje de
noticias news:[email=49562607@svctag-j7w3v3j....]49562607@svctag-j7w3v3j....[/email]
> Miguel,
>
> gracias por el ejemplo. Lo he estado investigando y efectí­vamente hay un
> problema. Desde la versión 3.4.0 de SQLite establecieron una serie de
> lí­mites, que entre otros impide utilizar sentencias de más de 1MB de
> longitud. Yo estaba seguro de que no me habí­a tropezado con ese lí­mite, y
> es cierto; todaví­a tengo un programa que almacena imágenes y que no tení­a
> ningún problema. Pero claro, he comprobado que ese programa está hecho con
> la versión 3.3.13 de SQLite, y por entonces no habí­a lí­mites de ningún
> tipo.
>
> En resumen, puedo prepararte una nueva librerí­a SQLite con dicho lí­mite
> aumentado a, digamos 10MB, pero siempre va a existir un lí­mite. No
> obstante, vamos a cambiar la forma de almacenar los blob en Xailer 2.0
> para que no se vea afectado por dicho lí­mite.
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
>

SQLite-blob

Publicado: Lun Dic 29, 2008 6:06 pm
por jfgimenez
Miguel,
> He leido algo al respecto que ahora no consigo encontrar en la web de
> SQLite, pero creo recordar que lei 1000000000 Bytes lo que superaria con
> mucho el limite real; pero digo que no recuerdo bien.
Aquí están los límites por defecto de SQLite:
http://www.sqlite.org/limits.html
Y aquí está la lista de cambios:
http://www.sqlite.org/changes.html
Fíjate en la versión 3.4.0, que dice exactamente:
"Added explicit upper bounds on the sizes and quantities of things SQLite
can process. This change might cause compatibility problems for applications
that use SQLite in the extreme, which is why the current release is 3.4.0
instead of 3.3.18."
> Te agradeceria prepararas la lib ya que estoy seguro que somos un buen
> número de usuarios de Xailer que usamos esta Base de Datos y por lo que se
> ve creciendo.
Aquí está: http://www.xailer.com/files/sqlite.zip. Hemos ampliado el límite
hasta unos 100MB (en realidad 100.000.000 bytes).
No obstante, tengo que aclararte una cosa: cuando utilizas el método
SaveToStrem() de TPicture para obtener una cadena binaria de la imagen, esa
imagen está en formato BMP, no en el formato original que usaste para
mostrarla en el TImage. Por lo tanto, en el caso de fotografías, que suelen
ser las imágenes más grandes, como el formato BMP no está comprimido, va a
ocupar muchísimo más que si la tuvieras en JPEG. A mí concretamente me ha
pasado; he utilizado una fotografía de prueba (de 8M pixels) que me ocupa
1,43 MB en disco, pero al grabarla en la BD ocupa unos 47MB.
En resumen, lo que quiero decir es que es mejor guardar directamente la
imagen original, no la que se obtiene con SaveToStream(), y dejar este
método solamente para imágenes más pequeñas.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info

SQLite-blob

Publicado: Lun Dic 29, 2008 10:00 pm
por miguel
Hola,
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje de
noticias news:495903b0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Miguel,
>
>> He leido algo al respecto que ahora no consigo encontrar en la web de
>> SQLite, pero creo recordar que lei 1000000000 Bytes lo que superaria con
>> mucho el limite real; pero digo que no recuerdo bien.
>
> Aquí­ están los lí­mites por defecto de SQLite:
> http://www.sqlite.org/limits.html
>
> Y aquí­ está la lista de cambios:
> http://www.sqlite.org/changes.html
>
> Fí­jate en la versión 3.4.0, que dice exactamente:
> "Added explicit upper bounds on the sizes and quantities of things SQLite
> can process. This change might cause compatibility problems for
> applications that use SQLite in the extreme, which is why the current
> release is 3.4.0 instead of 3.3.18."
>
Leido, no podí­a ser otra cosa.
>
>> Te agradeceria prepararas la lib ya que estoy seguro que somos un buen
>> número de usuarios de Xailer que usamos esta Base de Datos y por lo que
>> se ve creciendo.
>
> Aquí­ está: http://www.xailer.com/files/sqlite.zip. Hemos ampliado el
> lí­mite hasta unos 100MB (en realidad 100.000.000 bytes).
>
Gracias, lo probaré, anque estoy seguro de que funciona.
> No obstante, tengo que aclararte una cosa: cuando utilizas el método
> SaveToStrem() de TPicture para obtener una cadena binaria de la imagen,
> esa imagen está en formato BMP, no en el formato original que usaste para
> mostrarla en el TImage. Por lo tanto, en el caso de fotografí­as, que
> suelen ser las imágenes más grandes, como el formato BMP no está
> comprimido, va a ocupar muchí­simo más que si la tuvieras en JPEG. A mí­
> concretamente me ha pasado; he utilizado una fotografí­a de prueba (de 8M
> pixels) que me ocupa 1,43 MB en disco, pero al grabarla en la BD ocupa
> unos 47MB.
>
> En resumen, lo que quiero decir es que es mejor guardar directamente la
> imagen original, no la que se obtiene con SaveToStream(), y dejar este
> método solamente para imágenes más pequeñas.
>
Si, ya hize en sus momentos bastantes pruebas al respecto y te llevas
enormes sorpresas con las fotografí­as, pero te agradezco enormemente tus
observaciones.
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
En fin gracias por todo, en particular por la rapided.
Saludos. Miguel A. Torrellas

SQLite-blob

Publicado: Sab Jun 06, 2009 8:38 pm
por miguel
Hola Jose
He reinstalado Xailer y tení­a olvidado este tema. He visto que la versión
1.99 no lo tiene actualizado y el enlace
http://www.xailer.com/files/sqlite.zip para su descarga no funciona.
Por favor como puedo conseguir el fichero con SQLite.lib corregido.
Gracias por anticipado.
Miguel A. Torrellas
"Miguel Torrellas" <miguel@torrellas.net> escribió en el mensaje de
noticias:49593a58$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Hola,
>
> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
> de noticias news:495903b0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>> Miguel,
>>
>>> He leido algo al respecto que ahora no consigo encontrar en la web de
>>> SQLite, pero creo recordar que lei 1000000000 Bytes lo que superaria con
>>> mucho el limite real; pero digo que no recuerdo bien.
>>
>> Aquí­ están los lí­mites por defecto de SQLite:
>> http://www.sqlite.org/limits.html
>>
>> Y aquí­ está la lista de cambios:
>> http://www.sqlite.org/changes.html
>>
>> Fí­jate en la versión 3.4.0, que dice exactamente:
>> "Added explicit upper bounds on the sizes and quantities of things SQLite
>> can process. This change might cause compatibility problems for
>> applications that use SQLite in the extreme, which is why the current
>> release is 3.4.0 instead of 3.3.18."
>>
>
> Leido, no podí­a ser otra cosa.
>
>>
>>> Te agradeceria prepararas la lib ya que estoy seguro que somos un buen
>>> número de usuarios de Xailer que usamos esta Base de Datos y por lo que
>>> se ve creciendo.
>>
>> Aquí­ está: http://www.xailer.com/files/sqlite.zip. Hemos ampliado el
>> lí­mite hasta unos 100MB (en realidad 100.000.000 bytes).
>>
>
>
> Gracias, lo probaré, anque estoy seguro de que funciona.
>
>
>> No obstante, tengo que aclararte una cosa: cuando utilizas el método
>> SaveToStrem() de TPicture para obtener una cadena binaria de la imagen,
>> esa imagen está en formato BMP, no en el formato original que usaste para
>> mostrarla en el TImage. Por lo tanto, en el caso de fotografí­as, que
>> suelen ser las imágenes más grandes, como el formato BMP no está
>> comprimido, va a ocupar muchí­simo más que si la tuvieras en JPEG. A mí­
>> concretamente me ha pasado; he utilizado una fotografí­a de prueba (de 8M
>> pixels) que me ocupa 1,43 MB en disco, pero al grabarla en la BD ocupa
>> unos 47MB.
>>
>> En resumen, lo que quiero decir es que es mejor guardar directamente la
>> imagen original, no la que se obtiene con SaveToStream(), y dejar este
>> método solamente para imágenes más pequeñas.
>>
>
> Si, ya hize en sus momentos bastantes pruebas al respecto y te llevas
> enormes sorpresas con las fotografí­as, pero te agradezco enormemente tus
> observaciones.
>
>> --
>> Un saludo,
>>
>> José F. Giménez
>> http://www.xailer.com
>> http://www.xailer.info
>
> En fin gracias por todo, en particular por la rapided.
>
> Saludos. Miguel A. Torrellas

SQLite-blob

Publicado: Lun Jun 08, 2009 8:59 pm
por jfgimenez
Miguel,
> He reinstalado Xailer y tenía olvidado este tema. He visto que la versión
> 1.99 no lo tiene actualizado y el enlace
> http://www.xailer.com/files/sqlite.zip para su descarga no funciona.
>
> Por favor como puedo conseguir el fichero con SQLite.lib corregido.
Ya te lo he subido al mismo sitio.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info

SQLite-blob

Publicado: Lun Jun 08, 2009 9:43 pm
por miguel
Gracias por tu interés.
Creo que igual serí­a bueno preparar la versión 1.99 con esta cuatro
chorradas que le quedan.
Saludos. Miguel A. Torrellas
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje de
noticias:4a2d5f8d$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Miguel,
>
>> He reinstalado Xailer y tení­a olvidado este tema. He visto que la versión
>> 1.99 no lo tiene actualizado y el enlace
>> http://www.xailer.com/files/sqlite.zip para su descarga no funciona.
>>
>> Por favor como puedo conseguir el fichero con SQLite.lib corregido.
>
> Ya te lo he subido al mismo sitio.
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
>