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.
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.
Funciones y/o clases que acceden a SQLLite y MySQL
-
- Mensajes: 420
- Registrado: Sab Ago 16, 2008 9:06 pm
Funciones y/o clases que acceden a SQLLite y MySQL
Estimados Joses e Ignacio
Como quizás sabréis estoy trabajando en implementar la forma de trabajo
de Java con [x]Harbour usando modelado de datos basados en clases en vez
de datasets. En Java las listas de datos se almacenan en forma de arrays
que contienen referencias a las clases correspondientes.
Cuando se carga una lista de clientes en vez de tener un dataset, cada
fila de la tabla se almacena como un objeto y estos se agrupan dentro de
lo que en Java se denomina un arrayList.
Actualmente para cargar los datos de cada fila de la consulta efectuada
al objeto correspondiente y de ahí al arrayList lo hago creando un
dataSet y recorriéndolo fila al fila. (Ejemplos en
http://jalfonsosuarez.wordpress.com/ ).
Me gustaría saber si es posible obtener de información de las funciones
(o clases) que usa internamente Xailer para leer los datos del motor de
datos MySQL y SQLLite para comparar velocidades de carga de datos.
Muchas gracias y un fuerte abrazo
José Alfonso Suárez Moreno
Como quizás sabréis estoy trabajando en implementar la forma de trabajo
de Java con [x]Harbour usando modelado de datos basados en clases en vez
de datasets. En Java las listas de datos se almacenan en forma de arrays
que contienen referencias a las clases correspondientes.
Cuando se carga una lista de clientes en vez de tener un dataset, cada
fila de la tabla se almacena como un objeto y estos se agrupan dentro de
lo que en Java se denomina un arrayList.
Actualmente para cargar los datos de cada fila de la consulta efectuada
al objeto correspondiente y de ahí al arrayList lo hago creando un
dataSet y recorriéndolo fila al fila. (Ejemplos en
http://jalfonsosuarez.wordpress.com/ ).
Me gustaría saber si es posible obtener de información de las funciones
(o clases) que usa internamente Xailer para leer los datos del motor de
datos MySQL y SQLLite para comparar velocidades de carga de datos.
Muchas gracias y un fuerte abrazo
José Alfonso Suárez Moreno
-
- Mensajes: 420
- Registrado: Sab Ago 16, 2008 9:06 pm
Funciones y/o clases que acceden a SQLLite y MySQL
Por si aparecen dudas sobre este tema, solo quiero saber el nombre de
las funciones, que hacen, que parámetros reciben y que devuelven. Para
nada quiero el código fuente.
Y, por supuesto, con la intención de enriquecer Xailer dotándole de la
posibilidad de usar objetos para poder implementar MVC real.
Gracias y un afectuoso abrazo.
José Alfonso Suárez Moreno
El 01/03/2012 1:19, José Alfonso Suárez Moreno escribió:
> Estimados Joses e Ignacio
>
> Como quizás sabréis estoy trabajando en implementar la forma de trabajo
> de Java con [x]Harbour usando modelado de datos basados en clases en vez
> de datasets. En Java las listas de datos se almacenan en forma de arrays
> que contienen referencias a las clases correspondientes.
>
> Cuando se carga una lista de clientes en vez de tener un dataset, cada
> fila de la tabla se almacena como un objeto y estos se agrupan dentro de
> lo que en Java se denomina un arrayList.
>
> Actualmente para cargar los datos de cada fila de la consulta efectuada
> al objeto correspondiente y de ahí al arrayList lo hago creando un
> dataSet y recorriéndolo fila al fila. (Ejemplos en
> http://jalfonsosuarez.wordpress.com/ ).
>
> Me gustaría saber si es posible obtener de información de las funciones
> (o clases) que usa internamente Xailer para leer los datos del motor de
> datos MySQL y SQLLite para comparar velocidades de carga de datos.
>
> Muchas gracias y un fuerte abrazo
>
> José Alfonso Suárez Moreno
>
las funciones, que hacen, que parámetros reciben y que devuelven. Para
nada quiero el código fuente.
Y, por supuesto, con la intención de enriquecer Xailer dotándole de la
posibilidad de usar objetos para poder implementar MVC real.
Gracias y un afectuoso abrazo.
José Alfonso Suárez Moreno
El 01/03/2012 1:19, José Alfonso Suárez Moreno escribió:
> Estimados Joses e Ignacio
>
> Como quizás sabréis estoy trabajando en implementar la forma de trabajo
> de Java con [x]Harbour usando modelado de datos basados en clases en vez
> de datasets. En Java las listas de datos se almacenan en forma de arrays
> que contienen referencias a las clases correspondientes.
>
> Cuando se carga una lista de clientes en vez de tener un dataset, cada
> fila de la tabla se almacena como un objeto y estos se agrupan dentro de
> lo que en Java se denomina un arrayList.
>
> Actualmente para cargar los datos de cada fila de la consulta efectuada
> al objeto correspondiente y de ahí al arrayList lo hago creando un
> dataSet y recorriéndolo fila al fila. (Ejemplos en
> http://jalfonsosuarez.wordpress.com/ ).
>
> Me gustaría saber si es posible obtener de información de las funciones
> (o clases) que usa internamente Xailer para leer los datos del motor de
> datos MySQL y SQLLite para comparar velocidades de carga de datos.
>
> Muchas gracias y un fuerte abrazo
>
> José Alfonso Suárez Moreno
>
Funciones y/o clases que acceden a SQLLite y MySQL
José Alfonso,
tanto en sqlite como mysql, los datos se leen y se cargan en un array
que gestiona el dataset. Puedes obtener una copia del array usando el
método GetRows() del mismo dataset.
Por otro lado, si quieres ir a un nivel más bajo, puedes utilizar
directamente el método Execute() del datasource, que es exactamente lo
que hace el dataset para obtener los datos. Es decir, los dataset no
utilizan ningún procedimiento especial, sino que llaman al método
Execute() de su datasource, y obtienen de ahí los datos. Este método
Execute() sí que está escrito en C para acelerar en todo lo posible la
carga de datos de la BD. Si notas que no va todo lo rápido que esperas
es porque tiene que leer todos los datos, convertirlos desde el tipo
nativo de la BD a un tipo compatible con xbase, y después meterlos en un
array de alto nivel. Eso es todo.
Respecto a utilizar una clase por cada fila, supongo que Java lo hace
así porque todo en Java son objetos. No hay nada que no lo sea, pero en
xbase es distinto, y siempre es más rápido utilizar directamente un
array que una clase que maneje ese array.
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
tanto en sqlite como mysql, los datos se leen y se cargan en un array
que gestiona el dataset. Puedes obtener una copia del array usando el
método GetRows() del mismo dataset.
Por otro lado, si quieres ir a un nivel más bajo, puedes utilizar
directamente el método Execute() del datasource, que es exactamente lo
que hace el dataset para obtener los datos. Es decir, los dataset no
utilizan ningún procedimiento especial, sino que llaman al método
Execute() de su datasource, y obtienen de ahí los datos. Este método
Execute() sí que está escrito en C para acelerar en todo lo posible la
carga de datos de la BD. Si notas que no va todo lo rápido que esperas
es porque tiene que leer todos los datos, convertirlos desde el tipo
nativo de la BD a un tipo compatible con xbase, y después meterlos en un
array de alto nivel. Eso es todo.
Respecto a utilizar una clase por cada fila, supongo que Java lo hace
así porque todo en Java son objetos. No hay nada que no lo sea, pero en
xbase es distinto, y siempre es más rápido utilizar directamente un
array que una clase que maneje ese array.
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
-
- Mensajes: 420
- Registrado: Sab Ago 16, 2008 9:06 pm
Funciones y/o clases que acceden a SQLLite y MySQL
Jose,
Muchas gracias.
Esperaba que hubiese una forma nativa de utilizar las funciones de C,
pero por lo que veo no habéis "wrapeado" las funciones de bajo nivel de
C para hacer una única que hace todo el trabajo y retorna el resultado
ya convertido a xBase. Me apañaré para usar lo que existe a fin de hacer
compatible mi trabajo.
Por otro lado, manejar datos desde un array de objetos no penaliza el
rendimiento de la aplicación, mejorando la comprensión del código y
acercándolo más al modelo real.
Te invito, de nuevo, a estudiar los artículos que he dejado en
http://jalfonsosuarez.wordpress.com/. Espero que veas lo que yo vi
cuando me decidí a desarrollar este paradigma de programación. Y lo
mejor es que el motor de xBase lo soporta. Tengo una aplicación completa
usando esto con SQLite (accediendo a través de datasets convertidos a
objetos) y funciona de maravilla.
Un fuerte abrazo,
José Alfonso Suárez Moreno
El 03/03/2012 19:46, Jose F. Gimenez escribió:
> José Alfonso,
>
> tanto en sqlite como mysql, los datos se leen y se cargan en un array
> que gestiona el dataset. Puedes obtener una copia del array usando el
> método GetRows() del mismo dataset.
>
> Por otro lado, si quieres ir a un nivel más bajo, puedes utilizar
> directamente el método Execute() del datasource, que es exactamente lo
> que hace el dataset para obtener los datos. Es decir, los dataset no
> utilizan ningún procedimiento especial, sino que llaman al método
> Execute() de su datasource, y obtienen de ahí los datos. Este método
> Execute() sí que está escrito en C para acelerar en todo lo posible la
> carga de datos de la BD. Si notas que no va todo lo rápido que esperas
> es porque tiene que leer todos los datos, convertirlos desde el tipo
> nativo de la BD a un tipo compatible con xbase, y después meterlos en un
> array de alto nivel. Eso es todo.
>
> Respecto a utilizar una clase por cada fila, supongo que Java lo hace
> así porque todo en Java son objetos. No hay nada que no lo sea, pero en
> xbase es distinto, y siempre es más rápido utilizar directamente un
> array que una clase que maneje ese array.
>
>
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
Muchas gracias.
Esperaba que hubiese una forma nativa de utilizar las funciones de C,
pero por lo que veo no habéis "wrapeado" las funciones de bajo nivel de
C para hacer una única que hace todo el trabajo y retorna el resultado
ya convertido a xBase. Me apañaré para usar lo que existe a fin de hacer
compatible mi trabajo.
Por otro lado, manejar datos desde un array de objetos no penaliza el
rendimiento de la aplicación, mejorando la comprensión del código y
acercándolo más al modelo real.
Te invito, de nuevo, a estudiar los artículos que he dejado en
http://jalfonsosuarez.wordpress.com/. Espero que veas lo que yo vi
cuando me decidí a desarrollar este paradigma de programación. Y lo
mejor es que el motor de xBase lo soporta. Tengo una aplicación completa
usando esto con SQLite (accediendo a través de datasets convertidos a
objetos) y funciona de maravilla.
Un fuerte abrazo,
José Alfonso Suárez Moreno
El 03/03/2012 19:46, Jose F. Gimenez escribió:
> José Alfonso,
>
> tanto en sqlite como mysql, los datos se leen y se cargan en un array
> que gestiona el dataset. Puedes obtener una copia del array usando el
> método GetRows() del mismo dataset.
>
> Por otro lado, si quieres ir a un nivel más bajo, puedes utilizar
> directamente el método Execute() del datasource, que es exactamente lo
> que hace el dataset para obtener los datos. Es decir, los dataset no
> utilizan ningún procedimiento especial, sino que llaman al método
> Execute() de su datasource, y obtienen de ahí los datos. Este método
> Execute() sí que está escrito en C para acelerar en todo lo posible la
> carga de datos de la BD. Si notas que no va todo lo rápido que esperas
> es porque tiene que leer todos los datos, convertirlos desde el tipo
> nativo de la BD a un tipo compatible con xbase, y después meterlos en un
> array de alto nivel. Eso es todo.
>
> Respecto a utilizar una clase por cada fila, supongo que Java lo hace
> así porque todo en Java son objetos. No hay nada que no lo sea, pero en
> xbase es distinto, y siempre es más rápido utilizar directamente un
> array que una clase que maneje ese array.
>
>
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
-
- Mensajes: 420
- Registrado: Sab Ago 16, 2008 9:06 pm
Funciones y/o clases que acceden a SQLLite y MySQL
Hola Jose,
Al final me he arreglado con el método queryArray del datasource y he
creado una clase para cargar los objetos de esta forma:
METHOD lista() CLASS PersistenciaAlumno
local lista := arrayList():New()
local dS
local a
local source := PersistenciaConexion():Conectar()
dS := dataQuery():new( source, "SELECT * FROM alumno WHERE baja = 0
AND tipo = 'A'" )
WHILE ds:hasNext()
WITH OBJECT a := Alumno():New()
:setId( dS:getColumn( "Id" ) )
:setNombre( dS:getColumn( "Nombre" ) )
:setDomicilio( dS:getColumn( "Domicilio" ) )
:setCPostal( dS:getColumn( "CPostal" ) )
:setLocalidad( dS:getColumn( "Localidad" ) )
:setProvincia( dS:getColumn( "Provincia" ) )
:setCif( dS:getColumn( "Cif" ) )
:setTelefono( dS:getColumn( "Telefono" ) )
:setBaja( dS:getColumn( "Baja" ) )
END WITH
lista:add( a )
END DO
dS:end()
source:desconectar()
RETURN lista
Un fuerte abrazo
José Alfonso Suárez Moreno
El 03/03/2012 19:46, Jose F. Gimenez escribió:
> José Alfonso,
>
> tanto en sqlite como mysql, los datos se leen y se cargan en un array
> que gestiona el dataset. Puedes obtener una copia del array usando el
> método GetRows() del mismo dataset.
>
> Por otro lado, si quieres ir a un nivel más bajo, puedes utilizar
> directamente el método Execute() del datasource, que es exactamente lo
> que hace el dataset para obtener los datos. Es decir, los dataset no
> utilizan ningún procedimiento especial, sino que llaman al método
> Execute() de su datasource, y obtienen de ahí los datos. Este método
> Execute() sí que está escrito en C para acelerar en todo lo posible la
> carga de datos de la BD. Si notas que no va todo lo rápido que esperas
> es porque tiene que leer todos los datos, convertirlos desde el tipo
> nativo de la BD a un tipo compatible con xbase, y después meterlos en un
> array de alto nivel. Eso es todo.
>
> Respecto a utilizar una clase por cada fila, supongo que Java lo hace
> así porque todo en Java son objetos. No hay nada que no lo sea, pero en
> xbase es distinto, y siempre es más rápido utilizar directamente un
> array que una clase que maneje ese array.
>
>
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
Al final me he arreglado con el método queryArray del datasource y he
creado una clase para cargar los objetos de esta forma:
METHOD lista() CLASS PersistenciaAlumno
local lista := arrayList():New()
local dS
local a
local source := PersistenciaConexion():Conectar()
dS := dataQuery():new( source, "SELECT * FROM alumno WHERE baja = 0
AND tipo = 'A'" )
WHILE ds:hasNext()
WITH OBJECT a := Alumno():New()
:setId( dS:getColumn( "Id" ) )
:setNombre( dS:getColumn( "Nombre" ) )
:setDomicilio( dS:getColumn( "Domicilio" ) )
:setCPostal( dS:getColumn( "CPostal" ) )
:setLocalidad( dS:getColumn( "Localidad" ) )
:setProvincia( dS:getColumn( "Provincia" ) )
:setCif( dS:getColumn( "Cif" ) )
:setTelefono( dS:getColumn( "Telefono" ) )
:setBaja( dS:getColumn( "Baja" ) )
END WITH
lista:add( a )
END DO
dS:end()
source:desconectar()
RETURN lista
Un fuerte abrazo
José Alfonso Suárez Moreno
El 03/03/2012 19:46, Jose F. Gimenez escribió:
> José Alfonso,
>
> tanto en sqlite como mysql, los datos se leen y se cargan en un array
> que gestiona el dataset. Puedes obtener una copia del array usando el
> método GetRows() del mismo dataset.
>
> Por otro lado, si quieres ir a un nivel más bajo, puedes utilizar
> directamente el método Execute() del datasource, que es exactamente lo
> que hace el dataset para obtener los datos. Es decir, los dataset no
> utilizan ningún procedimiento especial, sino que llaman al método
> Execute() de su datasource, y obtienen de ahí los datos. Este método
> Execute() sí que está escrito en C para acelerar en todo lo posible la
> carga de datos de la BD. Si notas que no va todo lo rápido que esperas
> es porque tiene que leer todos los datos, convertirlos desde el tipo
> nativo de la BD a un tipo compatible con xbase, y después meterlos en un
> array de alto nivel. Eso es todo.
>
> Respecto a utilizar una clase por cada fila, supongo que Java lo hace
> así porque todo en Java son objetos. No hay nada que no lo sea, pero en
> xbase es distinto, y siempre es más rápido utilizar directamente un
> array que una clase que maneje ese array.
>
>
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
Funciones y/o clases que acceden a SQLLite y MySQL
JA no sé exactamente si además de asignar hacen algo más lo métodos
set*() de la clase Alumno pero para imprimir velocidad podrías hacer esto:
Lista := arrayList():New( ds:queryArray )
Así evitas:
1) Recorrer y cargar el mismo array dos veces
2) Llenar la memoria dos veces con los mismos datos que cuando son pocos
puede que no pase nada pero cuando son muchos dejan el ordenador frito
Por cierto a ver si me mandas lo ultimo que tengas para darle un repaso
El 04/03/2012 1:57, José Alfonso Suárez Moreno escribió:
> Hola Jose,
>
> Al final me he arreglado con el método queryArray del datasource y he
> creado una clase para cargar los objetos de esta forma:
>
> METHOD lista() CLASS PersistenciaAlumno
>
> local lista := arrayList():New()
> local dS
> local a
> local source := PersistenciaConexion():Conectar()
>
> dS := dataQuery():new( source, "SELECT * FROM alumno WHERE baja = 0 AND
> tipo = 'A'" )
>
> WHILE ds:hasNext()
> WITH OBJECT a := Alumno():New()
> :setId( dS:getColumn( "Id" ) )
> :setNombre( dS:getColumn( "Nombre" ) )
> :setDomicilio( dS:getColumn( "Domicilio" ) )
> :setCPostal( dS:getColumn( "CPostal" ) )
> :setLocalidad( dS:getColumn( "Localidad" ) )
> :setProvincia( dS:getColumn( "Provincia" ) )
> :setCif( dS:getColumn( "Cif" ) )
> :setTelefono( dS:getColumn( "Telefono" ) )
> :setBaja( dS:getColumn( "Baja" ) )
> END WITH
> lista:add( a )
> END DO
>
> dS:end()
>
> source:desconectar()
>
> RETURN lista
>
>
> Un fuerte abrazo
>
>
> José Alfonso Suárez Moreno
>
>
> El 03/03/2012 19:46, Jose F. Gimenez escribió:
>> José Alfonso,
>>
>> tanto en sqlite como mysql, los datos se leen y se cargan en un array
>> que gestiona el dataset. Puedes obtener una copia del array usando el
>> método GetRows() del mismo dataset.
>>
>> Por otro lado, si quieres ir a un nivel más bajo, puedes utilizar
>> directamente el método Execute() del datasource, que es exactamente lo
>> que hace el dataset para obtener los datos. Es decir, los dataset no
>> utilizan ningún procedimiento especial, sino que llaman al método
>> Execute() de su datasource, y obtienen de ahí los datos. Este método
>> Execute() sí que está escrito en C para acelerar en todo lo posible la
>> carga de datos de la BD. Si notas que no va todo lo rápido que esperas
>> es porque tiene que leer todos los datos, convertirlos desde el tipo
>> nativo de la BD a un tipo compatible con xbase, y después meterlos en un
>> array de alto nivel. Eso es todo.
>>
>> Respecto a utilizar una clase por cada fila, supongo que Java lo hace
>> así porque todo en Java son objetos. No hay nada que no lo sea, pero en
>> xbase es distinto, y siempre es más rápido utilizar directamente un
>> array que una clase que maneje ese array.
>>
>>
>> Un saludo,
>>
>> José F. Giménez
>> http://www.xailer.com
>> http://www.xailer.info
>
set*() de la clase Alumno pero para imprimir velocidad podrías hacer esto:
Lista := arrayList():New( ds:queryArray )
Así evitas:
1) Recorrer y cargar el mismo array dos veces
2) Llenar la memoria dos veces con los mismos datos que cuando son pocos
puede que no pase nada pero cuando son muchos dejan el ordenador frito

Por cierto a ver si me mandas lo ultimo que tengas para darle un repaso
El 04/03/2012 1:57, José Alfonso Suárez Moreno escribió:
> Hola Jose,
>
> Al final me he arreglado con el método queryArray del datasource y he
> creado una clase para cargar los objetos de esta forma:
>
> METHOD lista() CLASS PersistenciaAlumno
>
> local lista := arrayList():New()
> local dS
> local a
> local source := PersistenciaConexion():Conectar()
>
> dS := dataQuery():new( source, "SELECT * FROM alumno WHERE baja = 0 AND
> tipo = 'A'" )
>
> WHILE ds:hasNext()
> WITH OBJECT a := Alumno():New()
> :setId( dS:getColumn( "Id" ) )
> :setNombre( dS:getColumn( "Nombre" ) )
> :setDomicilio( dS:getColumn( "Domicilio" ) )
> :setCPostal( dS:getColumn( "CPostal" ) )
> :setLocalidad( dS:getColumn( "Localidad" ) )
> :setProvincia( dS:getColumn( "Provincia" ) )
> :setCif( dS:getColumn( "Cif" ) )
> :setTelefono( dS:getColumn( "Telefono" ) )
> :setBaja( dS:getColumn( "Baja" ) )
> END WITH
> lista:add( a )
> END DO
>
> dS:end()
>
> source:desconectar()
>
> RETURN lista
>
>
> Un fuerte abrazo
>
>
> José Alfonso Suárez Moreno
>
>
> El 03/03/2012 19:46, Jose F. Gimenez escribió:
>> José Alfonso,
>>
>> tanto en sqlite como mysql, los datos se leen y se cargan en un array
>> que gestiona el dataset. Puedes obtener una copia del array usando el
>> método GetRows() del mismo dataset.
>>
>> Por otro lado, si quieres ir a un nivel más bajo, puedes utilizar
>> directamente el método Execute() del datasource, que es exactamente lo
>> que hace el dataset para obtener los datos. Es decir, los dataset no
>> utilizan ningún procedimiento especial, sino que llaman al método
>> Execute() de su datasource, y obtienen de ahí los datos. Este método
>> Execute() sí que está escrito en C para acelerar en todo lo posible la
>> carga de datos de la BD. Si notas que no va todo lo rápido que esperas
>> es porque tiene que leer todos los datos, convertirlos desde el tipo
>> nativo de la BD a un tipo compatible con xbase, y después meterlos en un
>> array de alto nivel. Eso es todo.
>>
>> Respecto a utilizar una clase por cada fila, supongo que Java lo hace
>> así porque todo en Java son objetos. No hay nada que no lo sea, pero en
>> xbase es distinto, y siempre es más rápido utilizar directamente un
>> array que una clase que maneje ese array.
>>
>>
>> Un saludo,
>>
>> José F. Giménez
>> http://www.xailer.com
>> http://www.xailer.info
>
-
- Mensajes: 420
- Registrado: Sab Ago 16, 2008 9:06 pm
Funciones y/o clases que acceden a SQLLite y MySQL
Manu,
Eso está entre las ultimas cosas que te quiero mandar en unos días
"Mentes sincronizadas"
Por otro lado, Manu, recuerda que en muchos casos el objeto no tiene por
que ser idéntico a la tabla.
Un abrazo.
José Alfonso Suárez Moreno
El 04/03/2012 15:55, Manu escribió:
> JA no sé exactamente si además de asignar hacen algo más lo métodos
> set*() de la clase Alumno pero para imprimir velocidad podrías hacer esto:
>
> Lista := arrayList():New( ds:queryArray )
>
> Así evitas:
> 1) Recorrer y cargar el mismo array dos veces
> 2) Llenar la memoria dos veces con los mismos datos que cuando son pocos
> puede que no pase nada pero cuando son muchos dejan el ordenador frito
>
> Por cierto a ver si me mandas lo ultimo que tengas para darle un repaso
>
> El 04/03/2012 1:57, José Alfonso Suárez Moreno escribió:
>> Hola Jose,
>>
>> Al final me he arreglado con el método queryArray del datasource y he
>> creado una clase para cargar los objetos de esta forma:
>>
>> METHOD lista() CLASS PersistenciaAlumno
>>
>> local lista := arrayList():New()
>> local dS
>> local a
>> local source := PersistenciaConexion():Conectar()
>>
>> dS := dataQuery():new( source, "SELECT * FROM alumno WHERE baja = 0 AND
>> tipo = 'A'" )
>>
>> WHILE ds:hasNext()
>> WITH OBJECT a := Alumno():New()
>> :setId( dS:getColumn( "Id" ) )
>> :setNombre( dS:getColumn( "Nombre" ) )
>> :setDomicilio( dS:getColumn( "Domicilio" ) )
>> :setCPostal( dS:getColumn( "CPostal" ) )
>> :setLocalidad( dS:getColumn( "Localidad" ) )
>> :setProvincia( dS:getColumn( "Provincia" ) )
>> :setCif( dS:getColumn( "Cif" ) )
>> :setTelefono( dS:getColumn( "Telefono" ) )
>> :setBaja( dS:getColumn( "Baja" ) )
>> END WITH
>> lista:add( a )
>> END DO
>>
>> dS:end()
>>
>> source:desconectar()
>>
>> RETURN lista
>>
>>
>> Un fuerte abrazo
>>
>>
>> José Alfonso Suárez Moreno
>>
>>
>> El 03/03/2012 19:46, Jose F. Gimenez escribió:
>>> José Alfonso,
>>>
>>> tanto en sqlite como mysql, los datos se leen y se cargan en un array
>>> que gestiona el dataset. Puedes obtener una copia del array usando el
>>> método GetRows() del mismo dataset.
>>>
>>> Por otro lado, si quieres ir a un nivel más bajo, puedes utilizar
>>> directamente el método Execute() del datasource, que es exactamente lo
>>> que hace el dataset para obtener los datos. Es decir, los dataset no
>>> utilizan ningún procedimiento especial, sino que llaman al método
>>> Execute() de su datasource, y obtienen de ahí los datos. Este método
>>> Execute() sí que está escrito en C para acelerar en todo lo posible la
>>> carga de datos de la BD. Si notas que no va todo lo rápido que esperas
>>> es porque tiene que leer todos los datos, convertirlos desde el tipo
>>> nativo de la BD a un tipo compatible con xbase, y después meterlos en un
>>> array de alto nivel. Eso es todo.
>>>
>>> Respecto a utilizar una clase por cada fila, supongo que Java lo hace
>>> así porque todo en Java son objetos. No hay nada que no lo sea, pero en
>>> xbase es distinto, y siempre es más rápido utilizar directamente un
>>> array que una clase que maneje ese array.
>>>
>>>
>>> Un saludo,
>>>
>>> José F. Giménez
>>> http://www.xailer.com
>>> http://www.xailer.info
>>
>
Eso está entre las ultimas cosas que te quiero mandar en unos días

"Mentes sincronizadas"

Por otro lado, Manu, recuerda que en muchos casos el objeto no tiene por
que ser idéntico a la tabla.
Un abrazo.
José Alfonso Suárez Moreno
El 04/03/2012 15:55, Manu escribió:
> JA no sé exactamente si además de asignar hacen algo más lo métodos
> set*() de la clase Alumno pero para imprimir velocidad podrías hacer esto:
>
> Lista := arrayList():New( ds:queryArray )
>
> Así evitas:
> 1) Recorrer y cargar el mismo array dos veces
> 2) Llenar la memoria dos veces con los mismos datos que cuando son pocos
> puede que no pase nada pero cuando son muchos dejan el ordenador frito

>
> Por cierto a ver si me mandas lo ultimo que tengas para darle un repaso
>
> El 04/03/2012 1:57, José Alfonso Suárez Moreno escribió:
>> Hola Jose,
>>
>> Al final me he arreglado con el método queryArray del datasource y he
>> creado una clase para cargar los objetos de esta forma:
>>
>> METHOD lista() CLASS PersistenciaAlumno
>>
>> local lista := arrayList():New()
>> local dS
>> local a
>> local source := PersistenciaConexion():Conectar()
>>
>> dS := dataQuery():new( source, "SELECT * FROM alumno WHERE baja = 0 AND
>> tipo = 'A'" )
>>
>> WHILE ds:hasNext()
>> WITH OBJECT a := Alumno():New()
>> :setId( dS:getColumn( "Id" ) )
>> :setNombre( dS:getColumn( "Nombre" ) )
>> :setDomicilio( dS:getColumn( "Domicilio" ) )
>> :setCPostal( dS:getColumn( "CPostal" ) )
>> :setLocalidad( dS:getColumn( "Localidad" ) )
>> :setProvincia( dS:getColumn( "Provincia" ) )
>> :setCif( dS:getColumn( "Cif" ) )
>> :setTelefono( dS:getColumn( "Telefono" ) )
>> :setBaja( dS:getColumn( "Baja" ) )
>> END WITH
>> lista:add( a )
>> END DO
>>
>> dS:end()
>>
>> source:desconectar()
>>
>> RETURN lista
>>
>>
>> Un fuerte abrazo
>>
>>
>> José Alfonso Suárez Moreno
>>
>>
>> El 03/03/2012 19:46, Jose F. Gimenez escribió:
>>> José Alfonso,
>>>
>>> tanto en sqlite como mysql, los datos se leen y se cargan en un array
>>> que gestiona el dataset. Puedes obtener una copia del array usando el
>>> método GetRows() del mismo dataset.
>>>
>>> Por otro lado, si quieres ir a un nivel más bajo, puedes utilizar
>>> directamente el método Execute() del datasource, que es exactamente lo
>>> que hace el dataset para obtener los datos. Es decir, los dataset no
>>> utilizan ningún procedimiento especial, sino que llaman al método
>>> Execute() de su datasource, y obtienen de ahí los datos. Este método
>>> Execute() sí que está escrito en C para acelerar en todo lo posible la
>>> carga de datos de la BD. Si notas que no va todo lo rápido que esperas
>>> es porque tiene que leer todos los datos, convertirlos desde el tipo
>>> nativo de la BD a un tipo compatible con xbase, y después meterlos en un
>>> array de alto nivel. Eso es todo.
>>>
>>> Respecto a utilizar una clase por cada fila, supongo que Java lo hace
>>> así porque todo en Java son objetos. No hay nada que no lo sea, pero en
>>> xbase es distinto, y siempre es más rápido utilizar directamente un
>>> array que una clase que maneje ese array.
>>>
>>>
>>> Un saludo,
>>>
>>> José F. Giménez
>>> http://www.xailer.com
>>> http://www.xailer.info
>>
>
Funciones y/o clases que acceden a SQLLite y MySQL
Cuando termine este curso, que me ha impregnado de conocimientos y
quiero poner en marcha en harbour, voy a implemente algo parecido a JDBC
pero para Harbour!!! y entre otras cosas podría ir perfectamente un
Hibernate para Harbour, más simple pero que funcione!!!!
Salu2
El 04/03/2012 21:53, José Alfonso Suárez Moreno escribió:
> Manu,
>
> Eso está entre las ultimas cosas que te quiero mandar en unos días
>
> "Mentes sincronizadas"
>
> Por otro lado, Manu, recuerda que en muchos casos el objeto no tiene por
> que ser idéntico a la tabla.
>
> Un abrazo.
>
> José Alfonso Suárez Moreno
>
> El 04/03/2012 15:55, Manu escribió:
>> JA no sé exactamente si además de asignar hacen algo más lo métodos
>> set*() de la clase Alumno pero para imprimir velocidad podrías hacer
>> esto:
>>
>> Lista := arrayList():New( ds:queryArray )
>>
>> Así evitas:
>> 1) Recorrer y cargar el mismo array dos veces
>> 2) Llenar la memoria dos veces con los mismos datos que cuando son pocos
>> puede que no pase nada pero cuando son muchos dejan el ordenador frito
>>
>>
>> Por cierto a ver si me mandas lo ultimo que tengas para darle un repaso
>>
>> El 04/03/2012 1:57, José Alfonso Suárez Moreno escribió:
>>> Hola Jose,
>>>
>>> Al final me he arreglado con el método queryArray del datasource y he
>>> creado una clase para cargar los objetos de esta forma:
>>>
>>> METHOD lista() CLASS PersistenciaAlumno
>>>
>>> local lista := arrayList():New()
>>> local dS
>>> local a
>>> local source := PersistenciaConexion():Conectar()
>>>
>>> dS := dataQuery():new( source, "SELECT * FROM alumno WHERE baja = 0 AND
>>> tipo = 'A'" )
>>>
>>> WHILE ds:hasNext()
>>> WITH OBJECT a := Alumno():New()
>>> :setId( dS:getColumn( "Id" ) )
>>> :setNombre( dS:getColumn( "Nombre" ) )
>>> :setDomicilio( dS:getColumn( "Domicilio" ) )
>>> :setCPostal( dS:getColumn( "CPostal" ) )
>>> :setLocalidad( dS:getColumn( "Localidad" ) )
>>> :setProvincia( dS:getColumn( "Provincia" ) )
>>> :setCif( dS:getColumn( "Cif" ) )
>>> :setTelefono( dS:getColumn( "Telefono" ) )
>>> :setBaja( dS:getColumn( "Baja" ) )
>>> END WITH
>>> lista:add( a )
>>> END DO
>>>
>>> dS:end()
>>>
>>> source:desconectar()
>>>
>>> RETURN lista
>>>
>>>
>>> Un fuerte abrazo
>>>
>>>
>>> José Alfonso Suárez Moreno
>>>
>>>
>>> El 03/03/2012 19:46, Jose F. Gimenez escribió:
>>>> José Alfonso,
>>>>
>>>> tanto en sqlite como mysql, los datos se leen y se cargan en un array
>>>> que gestiona el dataset. Puedes obtener una copia del array usando el
>>>> método GetRows() del mismo dataset.
>>>>
>>>> Por otro lado, si quieres ir a un nivel más bajo, puedes utilizar
>>>> directamente el método Execute() del datasource, que es exactamente lo
>>>> que hace el dataset para obtener los datos. Es decir, los dataset no
>>>> utilizan ningún procedimiento especial, sino que llaman al método
>>>> Execute() de su datasource, y obtienen de ahí los datos. Este método
>>>> Execute() sí que está escrito en C para acelerar en todo lo posible la
>>>> carga de datos de la BD. Si notas que no va todo lo rápido que esperas
>>>> es porque tiene que leer todos los datos, convertirlos desde el tipo
>>>> nativo de la BD a un tipo compatible con xbase, y después meterlos
>>>> en un
>>>> array de alto nivel. Eso es todo.
>>>>
>>>> Respecto a utilizar una clase por cada fila, supongo que Java lo hace
>>>> así porque todo en Java son objetos. No hay nada que no lo sea, pero en
>>>> xbase es distinto, y siempre es más rápido utilizar directamente un
>>>> array que una clase que maneje ese array.
>>>>
>>>>
>>>> Un saludo,
>>>>
>>>> José F. Giménez
>>>> http://www.xailer.com
>>>> http://www.xailer.info
>>>
>>
>
quiero poner en marcha en harbour, voy a implemente algo parecido a JDBC
pero para Harbour!!! y entre otras cosas podría ir perfectamente un
Hibernate para Harbour, más simple pero que funcione!!!!
Salu2
El 04/03/2012 21:53, José Alfonso Suárez Moreno escribió:
> Manu,
>
> Eso está entre las ultimas cosas que te quiero mandar en unos días

>
> "Mentes sincronizadas"

>
> Por otro lado, Manu, recuerda que en muchos casos el objeto no tiene por
> que ser idéntico a la tabla.
>
> Un abrazo.
>
> José Alfonso Suárez Moreno
>
> El 04/03/2012 15:55, Manu escribió:
>> JA no sé exactamente si además de asignar hacen algo más lo métodos
>> set*() de la clase Alumno pero para imprimir velocidad podrías hacer
>> esto:
>>
>> Lista := arrayList():New( ds:queryArray )
>>
>> Así evitas:
>> 1) Recorrer y cargar el mismo array dos veces
>> 2) Llenar la memoria dos veces con los mismos datos que cuando son pocos
>> puede que no pase nada pero cuando son muchos dejan el ordenador frito
>>

>>
>> Por cierto a ver si me mandas lo ultimo que tengas para darle un repaso
>>
>> El 04/03/2012 1:57, José Alfonso Suárez Moreno escribió:
>>> Hola Jose,
>>>
>>> Al final me he arreglado con el método queryArray del datasource y he
>>> creado una clase para cargar los objetos de esta forma:
>>>
>>> METHOD lista() CLASS PersistenciaAlumno
>>>
>>> local lista := arrayList():New()
>>> local dS
>>> local a
>>> local source := PersistenciaConexion():Conectar()
>>>
>>> dS := dataQuery():new( source, "SELECT * FROM alumno WHERE baja = 0 AND
>>> tipo = 'A'" )
>>>
>>> WHILE ds:hasNext()
>>> WITH OBJECT a := Alumno():New()
>>> :setId( dS:getColumn( "Id" ) )
>>> :setNombre( dS:getColumn( "Nombre" ) )
>>> :setDomicilio( dS:getColumn( "Domicilio" ) )
>>> :setCPostal( dS:getColumn( "CPostal" ) )
>>> :setLocalidad( dS:getColumn( "Localidad" ) )
>>> :setProvincia( dS:getColumn( "Provincia" ) )
>>> :setCif( dS:getColumn( "Cif" ) )
>>> :setTelefono( dS:getColumn( "Telefono" ) )
>>> :setBaja( dS:getColumn( "Baja" ) )
>>> END WITH
>>> lista:add( a )
>>> END DO
>>>
>>> dS:end()
>>>
>>> source:desconectar()
>>>
>>> RETURN lista
>>>
>>>
>>> Un fuerte abrazo
>>>
>>>
>>> José Alfonso Suárez Moreno
>>>
>>>
>>> El 03/03/2012 19:46, Jose F. Gimenez escribió:
>>>> José Alfonso,
>>>>
>>>> tanto en sqlite como mysql, los datos se leen y se cargan en un array
>>>> que gestiona el dataset. Puedes obtener una copia del array usando el
>>>> método GetRows() del mismo dataset.
>>>>
>>>> Por otro lado, si quieres ir a un nivel más bajo, puedes utilizar
>>>> directamente el método Execute() del datasource, que es exactamente lo
>>>> que hace el dataset para obtener los datos. Es decir, los dataset no
>>>> utilizan ningún procedimiento especial, sino que llaman al método
>>>> Execute() de su datasource, y obtienen de ahí los datos. Este método
>>>> Execute() sí que está escrito en C para acelerar en todo lo posible la
>>>> carga de datos de la BD. Si notas que no va todo lo rápido que esperas
>>>> es porque tiene que leer todos los datos, convertirlos desde el tipo
>>>> nativo de la BD a un tipo compatible con xbase, y después meterlos
>>>> en un
>>>> array de alto nivel. Eso es todo.
>>>>
>>>> Respecto a utilizar una clase por cada fila, supongo que Java lo hace
>>>> así porque todo en Java son objetos. No hay nada que no lo sea, pero en
>>>> xbase es distinto, y siempre es más rápido utilizar directamente un
>>>> array que una clase que maneje ese array.
>>>>
>>>>
>>>> Un saludo,
>>>>
>>>> José F. Giménez
>>>> http://www.xailer.com
>>>> http://www.xailer.info
>>>
>>
>