miércoles, 19 de enero de 2011

"Error en la actualización basada en consultas: no se encontró la fila para actualizar" con Postgresql y ADODB

Lo que me llevó varias horas resolver este problema, lo comparto:

Al intentar actualizar un registro en una tabla postgresql 8.x mediante ODBC utilizando ADODB en donde existe algún campo timestamp cargado con segundos fraccionados ( por ejemplo "2011-01-01 10:30:59.1") genera el error :

"Error en la actualización basada en consultas: no se encontró la fila para actualizar"

Esto no tiene nada que ver con Postgresql sino con ADODB. El método "update" de un recorset de ADODB hace un UPDATE tabla SET ... WHERE compara_todos_los_campos y no UPDATE tabla SET ... WHERE clave primaria = x con el fin de asegurarse que el registro no sufrio ninguna actualización previa en ninguno de los campo. (para manejar concurrencias). Al no manejar fracciones de segundos busca el registro con la fecha y hora pero sin fracciones de segundo. Postgres lógicamente no le devuelve resultado.

Para resolver el problema es necesario cambiar el campo de tipo timestamp por timestamp(0) de manera que la base de datos no permita ingresar de ninguna manera (triggers, aplicación PHP etc) fracciones de segundos. O bien, realizar la actualización con ADODB mediante una SQL manual con el método "execute" y listo.

No hay comentarios:

Clarin.com Informática 2.0

Tecnología - lanacion.com

Ciencia/Salud - lanacion.com

VivaLinux! (General)

VivaLinux! (Distros)