Página 1 de 1

Registros devueltos en TSQLiteDataSource:Query()

Publicado: Mié Nov 14, 2007 3:16 pm
por Angel
Al utilizar este método, con una consulta clásica (SELECT * FROM tabla),
me retorna un TDataset que deberí­a contener todos los registros de los
que conste la consulta, pero en cambio, me retorna un dataset que
contiene únicamente, un registro.
Lo extraño, es que que el metodo RecCount() del Dataset devuelto, me
retorna el número de registros que contiene. ¿El metodo Query() retorna
únicamente un Dataset con un solo registro o deberí­a retornar un dataset
con todos los registros que devuelva la consulta?
En cambio, si en vez de llamar a TSQLiteDataSource:Query(), llamo a
TSQLiteDataSource:QueryArray(), este SI retorna un array con todos los
registros que devuelve la consulta.
¿ Es este el comportamiento de TSQLiteDataSource:Query() ?

Registros devueltos en TSQLiteDataSource:Query()

Publicado: Mié Nov 14, 2007 4:54 pm
por ignacio
Angel,
Realmente extraño. Nos podría indicar exactamente la sentencia SQL que está
usando.
Si la BD no fuese muy grande me la podría mandar por Email o indicarme un
FTP donde descargarla para hacer pruebas.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Ángel Fernández" <angel@agelso.com> escribió en el mensaje
news:473b0353$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Al utilizar este método, con una consulta clásica (SELECT * FROM tabla),
> me retorna un TDataset que debería contener todos los registros de los que
> conste la consulta, pero en cambio, me retorna un dataset que contiene
> únicamente, un registro.
>
> Lo extraño, es que que el metodo RecCount() del Dataset devuelto, me
> retorna el número de registros que contiene. ¿El metodo Query() retorna
> únicamente un Dataset con un solo registro o debería retornar un dataset
> con todos los registros que devuelva la consulta?
>
> En cambio, si en vez de llamar a TSQLiteDataSource:Query(), llamo a
> TSQLiteDataSource:QueryArray(), este SI retorna un array con todos los
> registros que devuelve la consulta.
>
> ¿ Es este el comportamiento de TSQLiteDataSource:Query() ?

Registros devueltos en TSQLiteDataSource:Query()

Publicado: Jue Nov 15, 2007 10:48 am
por Angel
Ignacio Ortiz de Zúñiga escribió:
> Angel,
>
> Realmente extraño. Nos podrí­a indicar exactamente la sentencia SQL que está
> usando.
>
> Si la BD no fuese muy grande me la podrí­a mandar por Email o indicarme un
> FTP donde descargarla para hacer pruebas.
>
> Un saludo,
>
Si que resulta extraño. Creo que alguna de las propiedades de TSQLQuery,
se está ocultando en el debugger. En aFields, solo me muestra las filas
del ¡registro activo! pero sin embargo, puedo recorrer el dataset
correctamente (ya sea con Skip, con GoTop, GoBottom) y viendolo así­, no
me parece un comportamiento extraño pues si tuviera 40.000 registros
serí­a ilógico crear un TDataset de ese tamaño.
He subido la base de datos a:
http://www.agelso.com/basedatos/VehiculosOcasion.s3db

Registros devueltos en TSQLiteDataSource:Query()

Publicado: Jue Nov 15, 2007 11:10 am
por jfgimenez
Ángel,
> Al utilizar este método, con una consulta clásica (SELECT * FROM tabla),
> me retorna un TDataset que debería contener todos los registros de los que
> conste la consulta, pero en cambio, me retorna un dataset que contiene
> únicamente, un registro.
>
> Lo extraño, es que que el metodo RecCount() del Dataset devuelto, me
> retorna el número de registros que contiene. ¿El metodo Query() retorna
> únicamente un Dataset con un solo registro o debería retornar un dataset
> con todos los registros que devuelva la consulta?
>
> En cambio, si en vez de llamar a TSQLiteDataSource:Query(), llamo a
> TSQLiteDataSource:QueryArray(), este SI retorna un array con todos los
> registros que devuelve la consulta.
>
> ¿ Es este el comportamiento de TSQLiteDataSource:Query() ?
Creo que el problema es que estás confundiendo los conceptos.
El método QueryArray() devuelve un array con los datos de la consulta, pero
el método Query() devuelve un dataset con los datos, no un array. Si llamas
al método GetRows() del dataset sí te devuelve un array con todos los datos.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info

Registros devueltos en TSQLiteDataSource:Query()

Publicado: Jue Nov 15, 2007 11:30 am
por Angel
> Creo que el problema es que estás confundiendo los conceptos.
>
> El método QueryArray() devuelve un array con los datos de la consulta, pero
> el método Query() devuelve un dataset con los datos, no un array. Si llamas
> al método GetRows() del dataset sí­ te devuelve un array con todos los datos.
>
Efectivamente, estaba confundiendo los conceptos. Entonces:
Query() Devuelve un dataset, con los datos de la consulta.
¿Si la consulta contiene por ejemplo, 25 registros? ¿Cual deberí­a ser la
longitud del campo aFields del TSQLQuery creado? Supuse en un primer
momento que deberí­a ser de 25, pero muestra únicamente los campos del
registro activo.. a esto me referí­a en anteriores posts con el 'extraño
comportamiento' aunque no es problema ninguno pues puedo navegar por el
dataset y utilizar todos sus metodos.

Registros devueltos en TSQLiteDataSource:Query()

Publicado: Jue Nov 15, 2007 11:47 am
por jfgimenez
Ángel,
> ¿Si la consulta contiene por ejemplo, 25 registros? ¿Cual debería ser la
> longitud del campo aFields del TSQLQuery creado?
Siempre será el número de campos (columnas) de la consulta. Ten en cuenta
que aFields es un array de objetos TDataField, uno de cuyas propiedades es
el valor del registro actual, pero no es un array de los datos de la
consulta. Para eso está el método GetRows().
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info