¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo depurar disparadores de tablas en SQL Server y DLLs en PowerBuilder

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 6 Vistas
0
Cargando...

Hola señor/señora

Tengo el error "Fila cambiada entre recuperar y actualizar", aunque he buscado en Google, la solución no funcionó. (hay una solución en las propiedades de actualización, en la cláusula where para actualizar/eliminar, elige las columnas clave, lo he intentado, no funciona) luego mi compañero simplemente alteró el disparador de la tabla que iba a ser actualizada por el datawindow, el error desapareció. Este caso es extraño, porque uso directamente la sintaxis SQL que genera el Datawindow (he capturado ese error en el evento dberror del datawindow) y la sintaxis es actualizar mitabla establecer col='algún valor' donde condición, sin embargo, la sintaxis funciona bien, la tabla se actualizó. Así que me pregunto si podría depurar el disparador de la tabla de SQL Server en PowerBuilder?

Además, he escrito algunas DLLs para que PowerBuilder las llame, que están escritas en Visual C++. Me preocupa que PowerBuilder ejecute la función en las DLLs y tenga problemas como en el caso anterior. Entonces me pregunto si es posible depurar la DLL cuando PowerBuilder puede iniciar las DLLs?

Saludos

Ken

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola Ken;

Lo más probable es que la causa de tus problemas haya comenzado con la forma en que el DataWindow configuró sus criterios de actualización. El DW Painter por defecto utiliza la opción "Clave y Columnas Actualizables" en lugar de lo que siempre sobrescribo, que es " Clave y Columnas Modificadas ".

La actualización predeterminada de DW construirá una declaración DML con una cláusula Where como C1='Valor1", C2='Valor2", C3='Valor3", ... C99='Valor99" por ejemplo. El problema comienza a surgir del hecho de que el usuario puede haber modificado solo una, dos o tres columnas, pero la cláusula Where verifica en la base de datos todos los valores antiguos posibles de las columnas. Nota: Esto también es una limitación de rendimiento al verificar todos los valores de datos anteriores también.

Ahora, en el caso en el que tengas un Desencadenador de Actualización de BD, el Desencadenador podría estar modificando, por ejemplo, una columna "Fecha_Última_Actualización". Si el Objeto DW también tiene esta columna en su lista de actualización y la opción "Clave y Columnas Actualizables" está de moda, la cláusula Where verifica el valor de la columna "Fecha_Última_Actualización" como 2015-01-01 13:45:10 pero el Desencadenador ya ha cambiado el valor a 2015-11-30 09:18:46. La verificación WHERE falla y el DW informa el error "Fila cambiada entre recuperación y actualización". Aunque el desarrollador haya eliminado la columna "Fecha_Última_Actualización" del detalle.

Otro escenario podría ser donde permites que cambie el valor de la columna de clave primaria (o una columna indexada única). El DBMS puede manejar esto a través de una declaración de actualización DML o el procesamiento puede desencadenar una secuencia de acciones DML de ELIMINAR y luego INSERTAR. Este último escenario desencadenando inadvertidamente una ACCIÓN DE TRIGGER DE INSERCIÓN aunque una actualización de DW () esté en progreso. En este caso, los valores anteriores a ser verificados en la cláusula WHERE son NULL. Nuevamente, el DW informa el error "Fila cambiada entre recuperación y actualización".

La moraleja, por supuesto, de tu historia es que el desarrollador de PB y el DBA deben analizar cuidadosamente las acciones en torno al procesamiento de la transacción de actualización para determinar las acciones de procesamiento general que se realizan en cualquier momento dado. Los registros del DBMS pueden ser clave aquí en el futuro. Especialmente cuando se realiza un rastreo SQL desde PB y la DBMS para acotar la causa real del error "Fila cambiada entre recuperación y actualización".

Espero que esto ayude

Saludos .. Chris

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Aunque he llegado tarde, tengo que decir gracias. Debido a que he estado muy ocupado hasta ahora, lo aprecio mucho.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?