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.

TWebDataSource

Foro de Xailer profesional en español
Responder
Avatar de Usuario
ramonzea
Mensajes: 130
Registrado: Mar Sep 15, 2015 6:42 am
Ubicación: México
Contactar:

TWebDataSource

Mensaje por ramonzea »

Me presenta un error al usar el TWebDataSource, y no logro identificar por qué, el mismo proceso lo usaba en la versión que antes tenía y funcionaba.

Versión Xailer: Xailer 8.2.2
Compilador: Harbour 3.2.0dev (r1912031042)
Compilador C/C++: MinGW GNU C 7.3 (32-bit)
Plataforma: Windows 10 10.0

----------------------- Información detallada del error -----------------------

Subsistema: BASE
Código de error: 1132
Estado: .F.
Descripción: Bound error
Operación: array access
Argumentos: [ 1] = Tipo: A Valor: [ 2] = Tipo: N Valor: 1
Fichero:
Código error SO: 0

Pila de llamadas:
TWEBRECORDS:REFRESHCURRENT (513)
TWEBRECORDS:UPDATE (417)
TSQLQUERY:UPDATE (564)
TSQLQUERY:FASTUPDATE (688)
IMPORTALMACENES (65)
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: TWebDataSource

Mensaje por ignacio »

Hola,

En anteriores versiones ese método no estaba desarrollado y era simplemente lo que en <<Harbour>> se llama un método virtual, que básicamente no hace nada, pero impide que se produzca un error de ejecución. Eso es todo. Sin embargo en la última versión se desarrollo para que hiciera el trabajo correctamente.

En su archivo de error se indica que el error se produce en esta línea:

nPos := ATail( ::aWork[ nRecno ] )

Y nRecno en unas líneas más arribas está asignado como ::Recno(). Si se fija el error indica que está accediendo al elemento de la matriz (el elemento <1>) pero no existe. Es muy extraño. Si nos pudiese mandar un pequeño ejemplo se lo agradezco.

Un saludo

Nota: Adjunto nuevo código con control para evitar el error

Código: Seleccionar todo

METHOD RefreshCurrent() CLASS XWebRecords

   LOCAL oField
   LOCAL aRecord
   LOCAL cSql, cFields
   LOCAL nField, nRecno, nPos

   cFields := ""
   nField  := 1
   nRecno  := ::Recno()

   IF Empty( nRecno ) .OR. nRecno > Len( ::aWork )
      RETURN .F.
   ENDIF

   nPos := ATail( ::aWork[ nRecno ] )

   FOR EACH oField IN ::oDataSet:aFields
      WITH OBJECT oField
         IF !Empty( cFields )
            cFields += ", "
         ENDIF
         cFields += :cName
      END WITH
   NEXT

   cSql := "SELECT " + cFields + " FROM " + ::cTable + ::GetPkWhere()

   WITH OBJECT ::oDataSource
      aRecord := :QueryRow( cSql )
      IF Len( aRecord ) == 0
         RETURN .f.
      ENDIF
      AAdd( aRecord, nPos )
   END WITH

   IF nRecno <= Len( ::aWork )
      ::aWork[ nRecno ] := aRecord
   ENDIF

RETURN .t.
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
ramonzea
Mensajes: 130
Registrado: Mar Sep 15, 2015 6:42 am
Ubicación: México
Contactar:

Re: TWebDataSource

Mensaje por ramonzea »

Si, eso logré ver que a pesar de hacer el FastAddNew(), RecNo() devuelve 0, y es dónde da el error.
Muchas gracias, aplico el parche.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: TWebDataSource

Mensaje por ignacio »

Argumentos: [ 1] = Tipo: A Valor: [ 2] = Tipo: N Valor: 1
Devuelve 1

Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder