Visual Basic - ERROR GRAVE: Se actualizaron todos los registros de una tabla en SQL--URGENTE!!

Life is soft - evento anual de software empresarial
 
Vista:

ERROR GRAVE: Se actualizaron todos los registros de una tabla en SQL--URGENTE!!

Publicado por Manuel (1 intervención) el 24/10/2018 15:08:47
Buenos días,

Nunca había visto este tremendo problema en un programa hecho en VB6:

Todos los registros de una tabla de una base de datos MSSQL fueron actualizados como si VB6 le hubiese "pasado" toda la sentencia SQL al servidor, menos el WHERE.

Ejemplo:

Almaceno una sentencia básica en la variable string SQL_actualiza:

SQL_actualiza = "UPDATE TABLA SET campo1 = valor1 & _
campo2 = valor2 &_
campo3 = valor3 &_
...... & _
..... & _
...... &_
WHERE campoclave = valorclave"


Luego utilizo un connection object para ejecutar la sentencia (connection.execute SQL_actualiza)

Pero sorpresivamente, luego de 15 años funcionando correctamente, un día al parecer la sentencia se ejecutó e hizo caso omiso al WHERE provocando que todos los registros de la tabla se actualizaran

Notas: *Toda la sentencia está compuesta por 19 líneas separadas por & _.
*En total la cadena completa tiene aprox. 700 caracteres de longitud
*Estoy actualizando 36 campos en la tabla


Tiene 15 años funcionando bien y hace un par de días falló y se actualizaron todos los registros en vez de 1 solo.

¿Virus?
¿Problemas de red?
¿Bug de SQL?
¿Incompatibilidad de vb6 con alguna versión de windows server, sql server,etc?

Por favor, si alguien tiene alguna idea de lo que sucede, favor orientarme lo más pronto posible.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ERROR GRAVE: Se actualizaron todos los registros de una tabla en SQL--URGENTE!!

Publicado por xavi (6 intervenciones) el 24/10/2018 17:38:05
Hola
A mi no me ha ocurrido nunca un caso asi que sea por culpa de sqlserver o Windows, pero
si una vez por noseque o nosesabecomo ni donde, pero la variable, en tu caso valorclave,
tomó un valor que no era el esperado....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 250
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ERROR GRAVE: Se actualizaron todos los registros de una tabla en SQL--URGENTE!!

Publicado por Cesar (123 intervenciones) el 24/10/2018 21:39:35
Hola.

Para empezar, eso de meter las sentencias en hardcode dentro de VB, es una mala practica. Te recomiendo meterlas a un stored procedure.

Por otro lado, ¿VB 6.0?. Recomiendo migrar tu aplicacion a VB .Net o C#.

Contestando a tu pregunta. no creo que sea ninguna de las 4 opciones que dices.

Eso fue alguien (un usuario fisico) que ejecute un Update directo a la base de datos.

Audita los Logs de SQL Server:

https://docs.microsoft.com/en-us/sql/relational-databases/security/auditing/view-a-sql-server-audit-log?view=sql-server-2017
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ERROR GRAVE: Se actualizaron todos los registros de una tabla en SQL--URGENTE!!

Publicado por Antoni Masana (558 intervenciones) el 25/10/2018 09:08:22
Mi conocimiento de SQL es muy limitado y la información sobre el comando que has ejecutado también pero si es como lo has descrito
el error esta en un simple caracter.

1
2
3
4
5
6
7
SQL_actualiza = "UPDATE TABLA SET campo1 = valor1 & _
                                  campo2 = valor2 &_
                                  campo3 = valor3 &_
                                  ...... & _
                                  ...... & _
                                  ...... & _      <--- Mira que caracter más tonto hay aquí.
                 WHERE campoclave = valorclave"

Este último caracter '&' puede ser la causa de que no evalúe bien el WHERE y lo tomo como parte del SET.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 594
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

ERROR GRAVE: Se actualizaron todos los registros de una tabla en SQL--URGENTE!!

Publicado por gilman (359 intervenciones) el 25/10/2018 15:57:18
Pon la SQL completa, porque la sentencia
1
2
3
4
5
6
7
SQL_actualiza = "UPDATE TABLA SET campo1 = valor1 & _
campo2 = valor2 &_
campo3 = valor3 &_
...... & _
..... & _
...... &_
WHERE campoclave = valorclave"
Ni siququiera compilaría, y no me refiero a las lineas omitidas, con la información que tenemos poco podemos, decir, pero, si como dices ha funcionado correctamente durante 15 años, no debería ser un problema de VB, aunque cualquiera sabe, sino un algo que ha hecho un usuario descuidado, sigue el consejo de Cesar y mira los logs de SQL Server
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar