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.
Error en tDataSet
-
- Mensajes: 155
- Registrado: Mié Nov 03, 2004 12:42 pm
- Ubicación: Cancún, México
- Contactar:
Error en tDataSet
Hola:
Al abrir una ventana de mi sistema (catalogo) me marca este error NO ES SIEMPRE
Me funcionaba perfecto, los cambios recientes fue la implementación de Diccionario de datos.
La tabla que marca error tiene 79 campos, de los cauales 4 campos son MEMO y un campo tipo IMAGE
#1: GPF (Code = c0000005):
Access violation
TDATAFIELD:VALUE (94)
TDATAFIELD:LOAD (143)
TDATASET:LOAD (421)
TDBFDATASET:LOAD (1172)
TDBFDATASET:OPEN (323)
(b)XDBFDATASET:XDATASET (36)
TDBFDATASET:_LOPEN (0)
TFRMFACTURAS:NEW (121)
FACTURAS (111)
(b)TFRMMAIN:FORMINITIALIZE (61)
TMENUITEM:ONCLICK (0)
TMENU:DOACTION (253)
TMENU:DOACTION (258)
TFRMMAIN:WMCOMMAND (927)
TDATAFIELD:VALUE (94)
TDATAFIELD:LOAD (143)
TDATASET:LOAD (421)
TDBFDATASET:LOAD (1172)
TDBFDATASET:OPEN (323)
(b)XDBFDATASET:XDATASET (36)
Utilizo:
Xailer 2.3.2
Tablas ADS con Diccionario de datos
GRACIAS!!
ISRAEL
Al abrir una ventana de mi sistema (catalogo) me marca este error NO ES SIEMPRE
Me funcionaba perfecto, los cambios recientes fue la implementación de Diccionario de datos.
La tabla que marca error tiene 79 campos, de los cauales 4 campos son MEMO y un campo tipo IMAGE
#1: GPF (Code = c0000005):
Access violation
TDATAFIELD:VALUE (94)
TDATAFIELD:LOAD (143)
TDATASET:LOAD (421)
TDBFDATASET:LOAD (1172)
TDBFDATASET:OPEN (323)
(b)XDBFDATASET:XDATASET (36)
TDBFDATASET:_LOPEN (0)
TFRMFACTURAS:NEW (121)
FACTURAS (111)
(b)TFRMMAIN:FORMINITIALIZE (61)
TMENUITEM:ONCLICK (0)
TMENU:DOACTION (253)
TMENU:DOACTION (258)
TFRMMAIN:WMCOMMAND (927)
TDATAFIELD:VALUE (94)
TDATAFIELD:LOAD (143)
TDATASET:LOAD (421)
TDBFDATASET:LOAD (1172)
TDBFDATASET:OPEN (323)
(b)XDBFDATASET:XDATASET (36)
Utilizo:
Xailer 2.3.2
Tablas ADS con Diccionario de datos
GRACIAS!!
ISRAEL
Saludos
Israel
Israel
- ignacio
- Site Admin
- Mensajes: 9259
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Error en tDataSet
Israel Solis escribió el mar, 17 mayo 2011 21:36Hola:
Al abrir una ventana de mi sistema (catalogo) me marca este error NO ES SIEMPRE
Me funcionaba perfecto, los cambios recientes fue la implementación de Diccionario de datos.
La tabla que marca error tiene 79 campos, de los cauales 4 campos son MEMO y un campo tipo IMAGE
#1: GPF (Code = c0000005):
Access violation
TDATAFIELD:VALUE (94)
TDATAFIELD:LOAD (143)
TDATASET:LOAD (421)
TDBFDATASET:LOAD (1172)
TDBFDATASET:OPEN (323)
(b)XDBFDATASET:XDATASET (36)
TDBFDATASET:_LOPEN (0)
TFRMFACTURAS:NEW (121)
FACTURAS (111)
(b)TFRMMAIN:FORMINITIALIZE (61)
TMENUITEM:ONCLICK (0)
TMENU:DOACTION (253)
TMENU:DOACTION (258)
TFRMMAIN:WMCOMMAND (927)
TDATAFIELD:VALUE (94)
TDATAFIELD:LOAD (143)
TDATASET:LOAD (421)
TDBFDATASET:LOAD (1172)
TDBFDATASET:OPEN (323)
(b)XDBFDATASET:XDATASET (36)
Utilizo:
Xailer 2.3.2
Tablas ADS con Diccionario de datos
GRACIAS!!
ISRAEL
Israel,
Me temo que viendo donde se produce el error no ofrece demasiada información. Sería necesario poder tener un pequeño programa que reprodujese el error. No obstante el hecho de usar o no diccionario a Xailer no debería afectarle en absoluto.
Te recomiendo que hagas tres pruebas:
1) Haz un ZAP de la tabla y comprueba si sigue fallando
2) Intenta abrir la tabla directamente sin clases
3) Intenta abrir la tabla con xaDbu o el propio editor de Xailer
Saludos
Al abrir una ventana de mi sistema (catalogo) me marca este error NO ES SIEMPRE
Me funcionaba perfecto, los cambios recientes fue la implementación de Diccionario de datos.
La tabla que marca error tiene 79 campos, de los cauales 4 campos son MEMO y un campo tipo IMAGE
#1: GPF (Code = c0000005):
Access violation
TDATAFIELD:VALUE (94)
TDATAFIELD:LOAD (143)
TDATASET:LOAD (421)
TDBFDATASET:LOAD (1172)
TDBFDATASET:OPEN (323)
(b)XDBFDATASET:XDATASET (36)
TDBFDATASET:_LOPEN (0)
TFRMFACTURAS:NEW (121)
FACTURAS (111)
(b)TFRMMAIN:FORMINITIALIZE (61)
TMENUITEM:ONCLICK (0)
TMENU:DOACTION (253)
TMENU:DOACTION (258)
TFRMMAIN:WMCOMMAND (927)
TDATAFIELD:VALUE (94)
TDATAFIELD:LOAD (143)
TDATASET:LOAD (421)
TDBFDATASET:LOAD (1172)
TDBFDATASET:OPEN (323)
(b)XDBFDATASET:XDATASET (36)
Utilizo:
Xailer 2.3.2
Tablas ADS con Diccionario de datos
GRACIAS!!
ISRAEL
Israel,
Me temo que viendo donde se produce el error no ofrece demasiada información. Sería necesario poder tener un pequeño programa que reprodujese el error. No obstante el hecho de usar o no diccionario a Xailer no debería afectarle en absoluto.
Te recomiendo que hagas tres pruebas:
1) Haz un ZAP de la tabla y comprueba si sigue fallando
2) Intenta abrir la tabla directamente sin clases
3) Intenta abrir la tabla con xaDbu o el propio editor de Xailer
Saludos
-
- Mensajes: 155
- Registrado: Mié Nov 03, 2004 12:42 pm
- Ubicación: Cancún, México
- Contactar:
Error en tDataSet
Ignacio:
GRACIAS por responder, he hecho lo que me comentaste:
"3) Intenta abrir la tabla con xaDbu o el propio editor de Xailer"
No lo logré, no supe encontrar en donde indicar el Diccionario de datos asociado para abrir la tabla.
Pero la he abierto sin problema alguno directamente con el Advantage Data Architect.
"2) Intenta abrir la tabla directamente sin clases"
Abro la tabla desde la aplicación directamente con DbUseArea() sin problema alguno.
"1) Haz un ZAP de la tabla y comprueba si sigue fallando"
Ha funcionado, pero, ¿porque motivo sucedió el error? (para tomar las medidas necesarias)
MIL GRACIAS
Saludos!!
GRACIAS por responder, he hecho lo que me comentaste:
"3) Intenta abrir la tabla con xaDbu o el propio editor de Xailer"
No lo logré, no supe encontrar en donde indicar el Diccionario de datos asociado para abrir la tabla.
Pero la he abierto sin problema alguno directamente con el Advantage Data Architect.
"2) Intenta abrir la tabla directamente sin clases"
Abro la tabla desde la aplicación directamente con DbUseArea() sin problema alguno.
"1) Haz un ZAP de la tabla y comprueba si sigue fallando"
Ha funcionado, pero, ¿porque motivo sucedió el error? (para tomar las medidas necesarias)
MIL GRACIAS
Saludos!!
Saludos
Israel
Israel
- ignacio
- Site Admin
- Mensajes: 9259
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Error en tDataSet
Israel Solis escribió el mié, 18 mayo 2011 17:57Ignacio:
GRACIAS por responder, he hecho lo que me comentaste:
"3) Intenta abrir la tabla con xaDbu o el propio editor de Xailer"
No lo logré, no supe encontrar en donde indicar el Diccionario de datos asociado para abrir la tabla.
Pero la he abierto sin problema alguno directamente con el Advantage Data Architect.
"2) Intenta abrir la tabla directamente sin clases"
Abro la tabla desde la aplicación directamente con DbUseArea() sin problema alguno.
"1) Haz un ZAP de la tabla y comprueba si sigue fallando"
Ha funcionado, pero, ¿porque motivo sucedió el error? (para tomar las medidas necesarias)
MIL GRACIAS
Saludos!!
Es posible que los datos de la tabla estuvieran corruptos o que algún valor del primer registro (según el indice activo) provoque el error en Xailer. Si te vuelve a ocurrir intenta borrar campo a campo el primer registro (según el índice activo) hasta que el problema se solucione para saber exactamente el tipo de campo que provoca el error. No obstante, creo que el error se produciría igualmente si se accediese sin diccionario, por lo que creo que eso ha debido ser simple casualidad.
Un saludo
GRACIAS por responder, he hecho lo que me comentaste:
"3) Intenta abrir la tabla con xaDbu o el propio editor de Xailer"
No lo logré, no supe encontrar en donde indicar el Diccionario de datos asociado para abrir la tabla.
Pero la he abierto sin problema alguno directamente con el Advantage Data Architect.
"2) Intenta abrir la tabla directamente sin clases"
Abro la tabla desde la aplicación directamente con DbUseArea() sin problema alguno.
"1) Haz un ZAP de la tabla y comprueba si sigue fallando"
Ha funcionado, pero, ¿porque motivo sucedió el error? (para tomar las medidas necesarias)
MIL GRACIAS
Saludos!!
Es posible que los datos de la tabla estuvieran corruptos o que algún valor del primer registro (según el indice activo) provoque el error en Xailer. Si te vuelve a ocurrir intenta borrar campo a campo el primer registro (según el índice activo) hasta que el problema se solucione para saber exactamente el tipo de campo que provoca el error. No obstante, creo que el error se produciría igualmente si se accediese sin diccionario, por lo que creo que eso ha debido ser simple casualidad.
Un saludo
-
- Mensajes: 155
- Registrado: Mié Nov 03, 2004 12:42 pm
- Ubicación: Cancún, México
- Contactar:
Error en tDataSet
Ignacio:
Eh rastreado el problema y he detectado que lo ocasionaba el campo tipo IMAGE, por lo que, para solucionar el problema de forma definitiva, he sobre-escrito el método "Load()" de la clase DataSet:
METHOD Load() CLASS tDataSet
LOCAL oField
IF Len( ::aRecord ) != Len( ::aFields )
::aRecord := Array( Len( ::aFields ) )
ENDIF
FOR EACH oField IN ::aFields
IF oField:cType = "IMAGE" // <<< == ISR
::aRecord[ HB_EnumIndex() ] := "" // <<< == ISR
ELSE
::aRecord[ HB_EnumIndex() ] := oField:Load()
ENDIF
NEXT
RETURN Nil
Ha funcionado bien, pero ES VALIDO LO QUE HE HECHO?
Saludos!!
Gracias
Eh rastreado el problema y he detectado que lo ocasionaba el campo tipo IMAGE, por lo que, para solucionar el problema de forma definitiva, he sobre-escrito el método "Load()" de la clase DataSet:
METHOD Load() CLASS tDataSet
LOCAL oField
IF Len( ::aRecord ) != Len( ::aFields )
::aRecord := Array( Len( ::aFields ) )
ENDIF
FOR EACH oField IN ::aFields
IF oField:cType = "IMAGE" // <<< == ISR
::aRecord[ HB_EnumIndex() ] := "" // <<< == ISR
ELSE
::aRecord[ HB_EnumIndex() ] := oField:Load()
ENDIF
NEXT
RETURN Nil
Ha funcionado bien, pero ES VALIDO LO QUE HE HECHO?
Saludos!!
Gracias
Saludos
Israel
Israel
- ignacio
- Site Admin
- Mensajes: 9259
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Error en tDataSet
Israel Solis escribió el jue, 26 mayo 2011 01:13Ignacio:
Eh rastreado el problema y he detectado que lo ocasionaba el campo tipo IMAGE, por lo que, para solucionar el problema de forma definitiva, he sobre-escrito el método "Load()" de la clase DataSet:
METHOD Load() CLASS tDataSet
LOCAL oField
IF Len( ::aRecord ) != Len( ::aFields )
::aRecord := Array( Len( ::aFields ) )
ENDIF
FOR EACH oField IN ::aFields
IF oField:cType = "IMAGE" // <<< == ISR
::aRecord[ HB_EnumIndex() ] := "" // <<< == ISR
ELSE
::aRecord[ HB_EnumIndex() ] := oField:Load()
ENDIF
NEXT
RETURN Nil
Ha funcionado bien, pero ES VALIDO LO QUE HE HECHO?
Saludos!!
Gracias
Israel,
La matriz aRecord se utiliza para guardar los valores originales del registro por lo tanto tu 'work around' no debería tener mayores problemas. No obstante habría que ver porque se produce ese error.
Si te fijas oField:Load() llama a oDataset:FieldGet(), en este caso TDbfDataset:FieldGet(). Si pudieses poner unas trazas en dicho método para confirmar que el error se produce exactamente en esta línea:
RETURN ( ::cAlias )->( FieldGet( n ) )
Te lo agradezco.
Si el error se produce en esa línea es muy probable que el problema fuese de xHarbour y tendría que fallarte igualmente si al abrir la tabla realizas la siguiente instrucción:
cImage := Dbf->(FieldGet( nCampo ) )
Gracias de antemano por tu colaboración.
Un saludo
Eh rastreado el problema y he detectado que lo ocasionaba el campo tipo IMAGE, por lo que, para solucionar el problema de forma definitiva, he sobre-escrito el método "Load()" de la clase DataSet:
METHOD Load() CLASS tDataSet
LOCAL oField
IF Len( ::aRecord ) != Len( ::aFields )
::aRecord := Array( Len( ::aFields ) )
ENDIF
FOR EACH oField IN ::aFields
IF oField:cType = "IMAGE" // <<< == ISR
::aRecord[ HB_EnumIndex() ] := "" // <<< == ISR
ELSE
::aRecord[ HB_EnumIndex() ] := oField:Load()
ENDIF
NEXT
RETURN Nil
Ha funcionado bien, pero ES VALIDO LO QUE HE HECHO?
Saludos!!
Gracias
Israel,
La matriz aRecord se utiliza para guardar los valores originales del registro por lo tanto tu 'work around' no debería tener mayores problemas. No obstante habría que ver porque se produce ese error.
Si te fijas oField:Load() llama a oDataset:FieldGet(), en este caso TDbfDataset:FieldGet(). Si pudieses poner unas trazas en dicho método para confirmar que el error se produce exactamente en esta línea:
RETURN ( ::cAlias )->( FieldGet( n ) )
Te lo agradezco.
Si el error se produce en esa línea es muy probable que el problema fuese de xHarbour y tendría que fallarte igualmente si al abrir la tabla realizas la siguiente instrucción:
cImage := Dbf->(FieldGet( nCampo ) )
Gracias de antemano por tu colaboración.
Un saludo
-
- Mensajes: 155
- Registrado: Mié Nov 03, 2004 12:42 pm
- Ubicación: Cancún, México
- Contactar:
Error en tDataSet
Ignacio:
He trazado con el Debugger y al parecer efectivamente el error se produce en la línea:
RETURN ( ::cAlias )->( FieldGet( n ) )
Del METHOD FieldGet( n, lForceRecno ) CLASS XDbfDataSet
También he probado lo que me comentas con el código:
ROFacturas->( DbGoTop() )
nCampo := ROFacturas->(FieldPos( "CBB") )
OutDebug("nCampo: " + Str(nCampo,,, .T.))
cImage := ROFacturas->(FieldGet( nCampo ) ) <<===
y NO provoca error alguno.
¿Quires que realice alguna otra prueba?
Saludos!!
He trazado con el Debugger y al parecer efectivamente el error se produce en la línea:
RETURN ( ::cAlias )->( FieldGet( n ) )
Del METHOD FieldGet( n, lForceRecno ) CLASS XDbfDataSet
También he probado lo que me comentas con el código:
ROFacturas->( DbGoTop() )
nCampo := ROFacturas->(FieldPos( "CBB") )
OutDebug("nCampo: " + Str(nCampo,,, .T.))
cImage := ROFacturas->(FieldGet( nCampo ) ) <<===
y NO provoca error alguno.
¿Quires que realice alguna otra prueba?
Saludos!!
Saludos
Israel
Israel
- ignacio
- Site Admin
- Mensajes: 9259
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Error en tDataSet
Israel Solis escribió el jue, 26 mayo 2011 21:52Ignacio:
He trazado con el Debugger y al parecer efectivamente el error se produce en la línea:
RETURN ( ::cAlias )->( FieldGet( n ) )
Del METHOD FieldGet( n, lForceRecno ) CLASS XDbfDataSet
También he probado lo que me comentas con el código:
ROFacturas->( DbGoTop() )
nCampo := ROFacturas->(FieldPos( "CBB") )
OutDebug("nCampo: " + Str(nCampo,,, .T.))
cImage := ROFacturas->(FieldGet( nCampo ) ) <<===
y NO provoca error alguno.
¿Quires que realice alguna otra prueba?
Saludos!!
Israel,
Como puedes observar el error se produce entonces a nivel de ADS ya que no hay diferencia alguna entre las dos llamadas a FieldGet(). Tan sólo se me ocurre comprobar que verdaderamente la variable 'n' tiene un valor correcto.
Si quieres mandame una pequeña DBF para que haga pruebas a ver si a mi me falla, pero te adelanto que las tendré que hacer con ADS local.
Un saludo
He trazado con el Debugger y al parecer efectivamente el error se produce en la línea:
RETURN ( ::cAlias )->( FieldGet( n ) )
Del METHOD FieldGet( n, lForceRecno ) CLASS XDbfDataSet
También he probado lo que me comentas con el código:
ROFacturas->( DbGoTop() )
nCampo := ROFacturas->(FieldPos( "CBB") )
OutDebug("nCampo: " + Str(nCampo,,, .T.))
cImage := ROFacturas->(FieldGet( nCampo ) ) <<===
y NO provoca error alguno.
¿Quires que realice alguna otra prueba?
Saludos!!
Israel,
Como puedes observar el error se produce entonces a nivel de ADS ya que no hay diferencia alguna entre las dos llamadas a FieldGet(). Tan sólo se me ocurre comprobar que verdaderamente la variable 'n' tiene un valor correcto.
Si quieres mandame una pequeña DBF para que haga pruebas a ver si a mi me falla, pero te adelanto que las tendré que hacer con ADS local.
Un saludo
- ignacio
- Site Admin
- Mensajes: 9259
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Error en tDataSet
Visto el error. Es realmente un error de xHarbour y se produce porque el RDD de Advantage cuando se trata de campos BLOB no retorna una copia del buffer del registro activo, sino directamente el puntero a dicho buffer, por lo tanto cuando cambia de registro o se cierra la tabla, dicho puntero deja de ser válido.
Lo habrán hecho para ahorrar el máximo de memoria pero obviamente se han equivocado. Para solucionarlo hemos hecho un pequeño 'work around' sin tocar los fuentes de xHarbour que consiste en hacer una copia del puntero devuelto por FieldGet().
Incluyo con este Email la clase modificada (sólo utilizable con Xailer 2.3.2) por si quieres probarla.
Un saludo
Attached files DbfDataSet.rar (10.7 KB)Â
Lo habrán hecho para ahorrar el máximo de memoria pero obviamente se han equivocado. Para solucionarlo hemos hecho un pequeño 'work around' sin tocar los fuentes de xHarbour que consiste en hacer una copia del puntero devuelto por FieldGet().
Incluyo con este Email la clase modificada (sólo utilizable con Xailer 2.3.2) por si quieres probarla.
Un saludo
Attached files DbfDataSet.rar (10.7 KB)Â