Sin problemas, a veces

02/11/2005 - 23:20 por Saga | Informe spam
Hola!

tenia esta secuencia de codigo:

'SQL para actualizar las tablas
strSQL = "Begin transaction" & vbCrLf

strSQL = "update VeControl set Contador=" & strArLine(2)
& "-1"
strSQL = strSQL & " where VeControl_Id='" & strArLine(0) &
"'" & vbCrLf

strSQL = strSQL & "update MovtosDia "
strSQL = strSQL & "set ContadorTotal=" & lngContTot & ","
strSQL = strSQL & "InicioCont=" & strArLine(1) & ","
strSQL = strSQL & "FinCont=" & strArLine(2) & "-1 "
strSQL = strSQL & "where Num_Ruta='" & strRutaNum & "' and
"
strSQL = strSQL & "FechaRuta={d '" & Format$(dteFecha,
"yyyy-mm-dd") & "'}"
strSQL = strSQL & vbCrLf

strSQL = strSQL & "commit transaction"

Entre otras cosas, este programa mantiene un control de un contador. Hay
varias rutas y
cada una de ellas tiene uno. Datos que son recbidos por el programa se
importan a la base
de datos y entre ellos esta el contador inicial y final. Yo guardo estos
dos datos mas la
diferenca entre ellos para saber cuanto subio.

Aparte de que no tengo codigo para probar si hubo errores dentro de la
transaccion, este
SQL estaba actualizando bien la mayoria de los registros. Solo algunas
veces fallaba, no actualizando
los datos del contador. Despues de cuidadosamente analizar el codigo
descubri el problema, que
radica en la segunda linea. (= "update VeControl...". Como solo contaba
con el strSQL = "...
esta linea estaba sobre escribiendo el contenido de strSQL, siendo este
"begin transaction".

Mi pregunta es que tipo de problema se puede esperar cuando se tiene un
commit tran sin
un begin tran? Se me hace muy raro que este SQL este funcionando bien
para la mayoria de los
registros.

Cualquier comentario es bienvenido :-)
Gracias

Saga
 

Leer las respuestas

#1 Miguel Egea
03/11/2005 - 00:05 | Informe spam
Bueno, lo que puede suceder es que se ejecute tu primer update y no el
segundo por bloqueos o por otras mil cosas si esa es tu sensación se
solucionará simplemente añadiendo el begin tran, de todas formas, dinos como
se estaba comportando mal, a ver si así podemos darte una teoría más solida.


Miguel Egea
Visita mi web http://www.portalsql.com
SQL Server MVP, Mentor
Solid Quality Learning
http://www.SolidQualityLearning.com
"Solid Quality Learning is the trusted global provider of advanced education
and solutions for the entire Microsoft database platform"

"Saga" wrote in message
news:%23zm%23vu$

Hola!

tenia esta secuencia de codigo:

'SQL para actualizar las tablas
strSQL = "Begin transaction" & vbCrLf

strSQL = "update VeControl set Contador=" & strArLine(2) &
"-1"
strSQL = strSQL & " where VeControl_Id='" & strArLine(0) &
"'" & vbCrLf

strSQL = strSQL & "update MovtosDia "
strSQL = strSQL & "set ContadorTotal=" & lngContTot & ","
strSQL = strSQL & "InicioCont=" & strArLine(1) & ","
strSQL = strSQL & "FinCont=" & strArLine(2) & "-1 "
strSQL = strSQL & "where Num_Ruta='" & strRutaNum & "' and "
strSQL = strSQL & "FechaRuta={d '" & Format$(dteFecha,
"yyyy-mm-dd") & "'}"
strSQL = strSQL & vbCrLf

strSQL = strSQL & "commit transaction"

Entre otras cosas, este programa mantiene un control de un contador. Hay
varias rutas y
cada una de ellas tiene uno. Datos que son recbidos por el programa se
importan a la base
de datos y entre ellos esta el contador inicial y final. Yo guardo estos
dos datos mas la
diferenca entre ellos para saber cuanto subio.

Aparte de que no tengo codigo para probar si hubo errores dentro de la
transaccion, este
SQL estaba actualizando bien la mayoria de los registros. Solo algunas
veces fallaba, no actualizando
los datos del contador. Despues de cuidadosamente analizar el codigo
descubri el problema, que
radica en la segunda linea. (= "update VeControl...". Como solo contaba
con el strSQL = "...
esta linea estaba sobre escribiendo el contenido de strSQL, siendo este
"begin transaction".

Mi pregunta es que tipo de problema se puede esperar cuando se tiene un
commit tran sin
un begin tran? Se me hace muy raro que este SQL este funcionando bien para
la mayoria de los
registros.

Cualquier comentario es bienvenido :-)
Gracias

Saga


Preguntas similares