Hola!
He visto en mensajes anteriores que están saliendo problemas con los memdataset
en la versión 1.5 y me guastaría el recapitular un poco y saber cómo ha quedado
el tema, ya que también estoy teniendo problemas.
En la versión 1.4, tenía más o memos lo siguiente funcionando a la perfección.
Creaba un Memdataset y en el evento OnCreate ponía lo siguiente:
-----------------
METHOD MemDataSet1Create( oSender ) CLASS TForm4
WITH OBJECT oSender
WITH OBJECT :AddField( "fra" )
:cType := "C"
:nLen := 10
END WITH
WITH OBJECT :AddField( "fecha" )
:cType := "D"
:nLen := 8
END WITH
WITH OBJECT :AddField( "cliente" )
:cType := "C"
:nLen := 50
END WITH
WITH OBJECT :AddField( "importe" )
:cType := "n"
:nLen := 10
:ndec := 2
END WITH
END
RETURN Nil
----------------------------
Con esto, el memdataset sabía perfectamente la estructura del array y sólo
tenía que abrirlo y empezar a meter datos como en una dbf normal.
Ahora, con la versión 1.5 , al hacer un open() sobre el memdataset el debugger
me da un mensaje que dice:
-------------
#1: XAILER: TMemDataSet:'aData' parameter empty with no structure defined.
:lReadOnly set to TRUE.
---------------
Al parecer, no toma la estructura del onCreate y lo pone como solo lectura
¿¿??, y claro, al intentar insertar un dato me salta un error
---------------
TMEMDATASET:FIELDPUT(960)
Error BASE/1132 Bound error: array access
Argumentos: ( [ 1] = Tipo: A Valor: [ 2] = Tipo: N Valor: 0)
--------------------------
Lo cusioso es que si no hago el open() y simplemente inserto nuevos datos,
no da ningún error, aunque al no estar habierto no veo los datos introducidos
en el browse asociado al memdataset.
Si una vez introducidos los datos, hago un open(), entonces sí que los veo,
pero todos los addnew() que hago a partir de entonces no añaden nuevos datos,
sino que "pisan los ya existentes".
Para solucionarlo he tenido que poner e el memdataset:open() los parámetros
con la estructura. Algo así:
--------------
::omemdataset1:open({{" ",date(),space(50),0}}, {"fra","fecha","cliente","importe"})
------------------
Pero entonces, como decía Bingen en uno de sus mensajes, el memdataset se
crea con un registro en blanco que no tiene que estar.
¿Hay alguna forma de crear la estructura pero vacía?
De momento, para solucionarlo hago esto, pero no deja de ser una ñapa temporarl
--------------
::omemdataset1:open({{" ",date(),space(50),0}}, {"fra","fecha","cliente","importe"})
::omemdataset1:delete()
------------------
A mi entender la clave está en que vuelva a funcionar lo puesto en el OnCreate,
ya que así se puede crear toda la estructura del array asociado al memdataset
sin necesidad de introducir datos que no se necesitan.
Tal y como está ahora está bien si partimos de un memdataset que ya tiene
datos en el momento de crearlo, pero no es corresto para memdataset que tienen
que abrirse sin ningún dato inicial.
Un saludico,
Fredy
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.
A vueltas con el Memdataset
- ignacio
- Site Admin
- Mensajes: 9459
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
A vueltas con el Memdataset
Fredy,
Intenta cambiar la línea 190 de memdataset.prg por esto:
ELSEIF Empty( ::aFields )
Espero que lo arregle y te agradezco cualquier comentario al respecto.
Un saludo,
--
Ignacio Ortiz de Zúñiga
Email: iozuniga@ozs.com
"Fredy" <fredy@aglsl.com> escribió en el mensaje
news:[email=a20b86f37c188c9a8b3760fce28@news.xailer.com...]a20b86f37c188c9a8b3760fce28@news.xailer.com...[/email]
> Hola!
>
> He visto en mensajes anteriores que están saliendo problemas con los
> memdataset en la versión 1.5 y me guastaría el recapitular un poco y saber
> cómo ha quedado el tema, ya que también estoy teniendo problemas.
>
> En la versión 1.4, tenía más o memos lo siguiente funcionando a la
> perfección.
>
> Creaba un Memdataset y en el evento OnCreate ponía lo siguiente:
> -----------------
> METHOD MemDataSet1Create( oSender ) CLASS TForm4
> WITH OBJECT oSender
> WITH OBJECT :AddField( "fra" )
> :cType := "C"
> :nLen := 10
> END WITH
> WITH OBJECT :AddField( "fecha" )
> :cType := "D"
> :nLen := 8
> END WITH
> WITH OBJECT :AddField( "cliente" )
> :cType := "C"
> :nLen := 50
> END WITH
> WITH OBJECT :AddField( "importe" )
> :cType := "n"
> :nLen := 10
> :ndec := 2
> END WITH
> END
> RETURN Nil
> ----------------------------
>
> Con esto, el memdataset sabía perfectamente la estructura del array y sólo
> tenía que abrirlo y empezar a meter datos como en una dbf normal.
>
>
> Ahora, con la versión 1.5 , al hacer un open() sobre el memdataset el
> debugger me da un mensaje que dice:
>
> -------------
> #1: XAILER: TMemDataSet:'aData' parameter empty with no structure defined.
> :lReadOnly set to TRUE.
> ---------------
>
> Al parecer, no toma la estructura del onCreate y lo pone como solo lectura
> ¿¿??, y claro, al intentar insertar un dato me salta un error
>
> ---------------
> TMEMDATASET:FIELDPUT(960) Error BASE/1132 Bound error: array access
> Argumentos: ( [ 1] = Tipo: A Valor: [ 2] = Tipo: N Valor: 0)
>
> --------------------------
>
>
> Lo cusioso es que si no hago el open() y simplemente inserto nuevos datos,
> no da ningún error, aunque al no estar habierto no veo los datos
> introducidos en el browse asociado al memdataset.
>
> Si una vez introducidos los datos, hago un open(), entonces sí que los
> veo, pero todos los addnew() que hago a partir de entonces no añaden
> nuevos datos, sino que "pisan los ya existentes".
>
>
>
>
> Para solucionarlo he tenido que poner e el memdataset:open() los
> parámetros con la estructura. Algo así:
> --------------
> ::omemdataset1:open({{" ",date(),space(50),0}},
> {"fra","fecha","cliente","importe"})
> ------------------
>
> Pero entonces, como decía Bingen en uno de sus mensajes, el memdataset se
> crea con un registro en blanco que no tiene que estar.
>
> ¿Hay alguna forma de crear la estructura pero vacía?
>
>
> De momento, para solucionarlo hago esto, pero no deja de ser una ñapa
> temporarl
> --------------
> ::omemdataset1:open({{" ",date(),space(50),0}},
> {"fra","fecha","cliente","importe"})
> ::omemdataset1:delete()
> ------------------
>
>
> A mi entender la clave está en que vuelva a funcionar lo puesto en el
> OnCreate, ya que así se puede crear toda la estructura del array asociado
> al memdataset sin necesidad de introducir datos que no se necesitan.
>
> Tal y como está ahora está bien si partimos de un memdataset que ya tiene
> datos en el momento de crearlo, pero no es corresto para memdataset que
> tienen que abrirse sin ningún dato inicial.
>
>
>
> Un saludico,
> Fredy
>
>
>
Intenta cambiar la línea 190 de memdataset.prg por esto:
ELSEIF Empty( ::aFields )
Espero que lo arregle y te agradezco cualquier comentario al respecto.
Un saludo,
--
Ignacio Ortiz de Zúñiga
Email: iozuniga@ozs.com
"Fredy" <fredy@aglsl.com> escribió en el mensaje
news:[email=a20b86f37c188c9a8b3760fce28@news.xailer.com...]a20b86f37c188c9a8b3760fce28@news.xailer.com...[/email]
> Hola!
>
> He visto en mensajes anteriores que están saliendo problemas con los
> memdataset en la versión 1.5 y me guastaría el recapitular un poco y saber
> cómo ha quedado el tema, ya que también estoy teniendo problemas.
>
> En la versión 1.4, tenía más o memos lo siguiente funcionando a la
> perfección.
>
> Creaba un Memdataset y en el evento OnCreate ponía lo siguiente:
> -----------------
> METHOD MemDataSet1Create( oSender ) CLASS TForm4
> WITH OBJECT oSender
> WITH OBJECT :AddField( "fra" )
> :cType := "C"
> :nLen := 10
> END WITH
> WITH OBJECT :AddField( "fecha" )
> :cType := "D"
> :nLen := 8
> END WITH
> WITH OBJECT :AddField( "cliente" )
> :cType := "C"
> :nLen := 50
> END WITH
> WITH OBJECT :AddField( "importe" )
> :cType := "n"
> :nLen := 10
> :ndec := 2
> END WITH
> END
> RETURN Nil
> ----------------------------
>
> Con esto, el memdataset sabía perfectamente la estructura del array y sólo
> tenía que abrirlo y empezar a meter datos como en una dbf normal.
>
>
> Ahora, con la versión 1.5 , al hacer un open() sobre el memdataset el
> debugger me da un mensaje que dice:
>
> -------------
> #1: XAILER: TMemDataSet:'aData' parameter empty with no structure defined.
> :lReadOnly set to TRUE.
> ---------------
>
> Al parecer, no toma la estructura del onCreate y lo pone como solo lectura
> ¿¿??, y claro, al intentar insertar un dato me salta un error
>
> ---------------
> TMEMDATASET:FIELDPUT(960) Error BASE/1132 Bound error: array access
> Argumentos: ( [ 1] = Tipo: A Valor: [ 2] = Tipo: N Valor: 0)
>
> --------------------------
>
>
> Lo cusioso es que si no hago el open() y simplemente inserto nuevos datos,
> no da ningún error, aunque al no estar habierto no veo los datos
> introducidos en el browse asociado al memdataset.
>
> Si una vez introducidos los datos, hago un open(), entonces sí que los
> veo, pero todos los addnew() que hago a partir de entonces no añaden
> nuevos datos, sino que "pisan los ya existentes".
>
>
>
>
> Para solucionarlo he tenido que poner e el memdataset:open() los
> parámetros con la estructura. Algo así:
> --------------
> ::omemdataset1:open({{" ",date(),space(50),0}},
> {"fra","fecha","cliente","importe"})
> ------------------
>
> Pero entonces, como decía Bingen en uno de sus mensajes, el memdataset se
> crea con un registro en blanco que no tiene que estar.
>
> ¿Hay alguna forma de crear la estructura pero vacía?
>
>
> De momento, para solucionarlo hago esto, pero no deja de ser una ñapa
> temporarl
> --------------
> ::omemdataset1:open({{" ",date(),space(50),0}},
> {"fra","fecha","cliente","importe"})
> ::omemdataset1:delete()
> ------------------
>
>
> A mi entender la clave está en que vuelva a funcionar lo puesto en el
> OnCreate, ya que así se puede crear toda la estructura del array asociado
> al memdataset sin necesidad de introducir datos que no se necesitan.
>
> Tal y como está ahora está bien si partimos de un memdataset que ya tiene
> datos en el momento de crearlo, pero no es corresto para memdataset que
> tienen que abrirse sin ningún dato inicial.
>
>
>
> Un saludico,
> Fredy
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com