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.

MariaDb dataset:Update error

Foro de Xailer profesional en español
Responder
CapelSoft
Mensajes: 135
Registrado: Vie Jul 29, 2005 8:49 am
Ubicación: Valencia - España
Contactar:

MariaDb dataset:Update error

Mensaje por CapelSoft »

Hola,

En el cambio introducido en la versión 9.01 ' Evitar deshacer edición cuando se produce un error de salvado' aparece el siguiente error:

***************************** Registro de errores *****************************

Exe: ********************************************
Version: 1.0.0.0
User name: *************************************
Computer name: ***********************************
Fecha: 05-05-2024
Hora: 20:22:08
Memoria libre: 2097151
Area actual: 1

------------------------- Información del compilador --------------------------

Versión Xailer: Xailer 9.0.1
Compilador: Harbour 3.2.0dev (r1803161710)
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:
TMARIADBRECORDS:REPLACE (695)
TMARIADBRECORDS:UPDATE (536)
TSQLQUERY:UPDATE (580)
TFRM_ADMCONFIGCOLS:GRABADATOS (92)
TFRM_ADMCONFIGCOLS:BTNGRABARCLICK (115)
TBUTTONMOD:ONCLICK (0)
TBUTTONMOD:CLICK (197)
TBUTTONMOD:WMLBUTTONUP (303)
RUNFORM (0)
TAPPLICATION:RUN (292)
MAIN (23)


Este error aparece al hacer un segundo update() dando el primero un .F. por problemas de FK. Es decir, la secuencia es:

a. hacemos el primer :odataset:Update() -> el :update() devuelve un .F. por problemas de FK.
b. acto seguido hacemos otro :odataset:Update() -> da el error que muestro más arriba.

Entre a. y b. no hay cambio alguno en los datacontrols.

Espero haberme explicado.

Saludos,
--
José Luis Capel
http://www.CapelBlog.es
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9302
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: MariaDb dataset:Update error

Mensaje por ignacio »

Buenas tardes,

Por la línea del error, se deduce que el buffer de datos interno de TMariaDB está corrompido, sin poder tener idea del motivo. Sin un ejemplo exprofeso que muestre el error es complicado solucionarlo, lo siento. Espero que pueda proporcionarlo. Gracias.

Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
CapelSoft
Mensajes: 135
Registrado: Vie Jul 29, 2005 8:49 am
Ubicación: Valencia - España
Contactar:

Re: MariaDb dataset:Update error

Mensaje por CapelSoft »

Hola Ignacio,

Aquí tienes un ejemplo. No he conseguido reproducir el error en runtime. Pero veo que hay un comportamiento extraño: el primer update da un error de 'unique key' y en el segundo update da Ok. La secuencia es esta:
AltD()
LogDebug(::oDataset:lOnAppend)

l := ::oDataset:Update()

AltD()
LogDebug(::oDataset:lOnAppend)
Al hacer clic la primera vez en el boton 'Añadir' (hay que poner datos que dan error de clave única) el update muestra mensaje de error y el lOnAppend da .T. Si volvemos a hacer clic (sin cambiar ningún dato) el lOnAppend antes del update es .T. pero al hacer el update no da mensaje de error y devuelve .T. y el lOnAppend ha cambiado a .F.

Espero haberme explicado.
Adjuntos
TestSql.zip
(623 Bytes) Descargado 228 veces
Test.zip
(4.53 KiB) Descargado 185 veces
--
José Luis Capel
http://www.CapelBlog.es
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9302
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: MariaDb dataset:Update error

Mensaje por ignacio »

Buenos días,

Aquí funciona perfectamente sin ningún error.
Imagen 493.png
Imagen 493.png (4.73 KiB) Visto 4747 veces
Me he tomado la molestia de provocar un caso de error de actualización con su código, que consisten en quitar el autoincremental del campo ID y provocar una alta con un duplicado en dicho campo:
Imagen 494.png
Imagen 494.png (6.94 KiB) Visto 4747 veces
Y funciona perfectamente con este simple código:

Código: Seleccionar todo

   l := ::oDataset:Update()

   IF !l
      ::oDataset:Id := HB_RandomInt(99999999)
      l := ::oDataset:Update()
   ENDIF
Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
CapelSoft
Mensajes: 135
Registrado: Vie Jul 29, 2005 8:49 am
Ubicación: Valencia - España
Contactar:

Re: MariaDb dataset:Update error

Mensaje por CapelSoft »

Hola Ignacio,

Espero que este video se explique mejor que yo. El video está en el fichero rar. El problema es que al hacer el segundo clic en 'Aceptar' el oDataset:update() no devuelve .F. ni tampoco muestra el error de MariaDb. Simplemente devuelve .T. y no hace nada.

Saludos,
Adjuntos
ScreenRecorderProject10.rar
(450.95 KiB) Descargado 230 veces
--
José Luis Capel
http://www.CapelBlog.es
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9302
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: MariaDb dataset:Update error

Mensaje por ignacio »

Buenos días,

Si quiere subir un vídeo utilice YouTube. No abro binarios de terceros. Lo siento.

Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
CapelSoft
Mensajes: 135
Registrado: Vie Jul 29, 2005 8:49 am
Ubicación: Valencia - España
Contactar:

Re: MariaDb dataset:Update error

Mensaje por CapelSoft »

Buenas tardes,

Aquí está el enlace del video.

https://youtu.be/_gBKt1v-Rrs

Espero que sea de ayuda para aclarar el problema.
--
José Luis Capel
http://www.CapelBlog.es
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9302
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: MariaDb dataset:Update error

Mensaje por ignacio »

Buenos días,

Modifique este código:

Código: Seleccionar todo

METHOD Update() CLASS XMariaDBRecords

   LOCAL lSuccess

   IF ::lOnAppend
      lSuccess := ::Append()
      IF lSuccess
         ::lOnAppend := .F.
      ENDIF
   ELSE
      lSuccess := ::Replace()
   ENDIF

RETURN lSuccess
Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
CapelSoft
Mensajes: 135
Registrado: Vie Jul 29, 2005 8:49 am
Ubicación: Valencia - España
Contactar:

Re: MariaDb dataset:Update error

Mensaje por CapelSoft »

Hola,

Así funciona.

Saludos,
--
José Luis Capel
http://www.CapelBlog.es
Responder