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)
TWebDataSource
- ignacio
- Site Admin
- Mensajes: 9256
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TWebDataSource
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
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.
Re: TWebDataSource
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.
Muchas gracias, aplico el parche.
- ignacio
- Site Admin
- Mensajes: 9256
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: TWebDataSource
Devuelve 1Argumentos: [ 1] = Tipo: A Valor: [ 2] = Tipo: N Valor: 1
Saludos