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

Preguntas similare

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


Respuesta Responder a este mensaje
#2 Alejandro Mesa
03/11/2005 - 02:32 | Informe spam
Saga,

Sin un "begin transaction", cada sentencia se ejecuta en su propia
transaccion y por ende ambos updates son ejecutados sin problema, pero al
tratar de ejecutar commit transaction, sql server dara un error y no nos has
dicho nada si tu programa esta manejando los errores que vienen desde sql
server.

Ejemplo:

create table t1 (c1 int)
go

insert into t1 values(1)
insert into t1 values(2)
commit transaction
go

select * from t1
go

drop table t1
go

En este ejemplo, cuando sql server se topa con la sentencia "commit
transaction", devuelve un error diciendo que el valor de @@trancount no es
consistente antes y despues del commit, en ese momento aborta el batch pero
las sentencias insert ya fueron ejecutadas y salvados los cambios. Cuantas
filas devuelve la sentencia "select"?


AMB


"Saga" wrote:


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



Respuesta Responder a este mensaje
#3 Saga
03/11/2005 - 16:49 | Informe spam
Primeramente, gracias a los dos por sus comentarios.

La rutina que manda llamar el codigo que presente cuenta con un
manejador de error. Lo que hace este es que asigna la descripcion
del error a una variable (tipo String).

Esta variable es procesada por la rutina que manda llamar la rutina que
decribo. Por lo tanto, si un error ocurre, el codigo sigue con su
ejecucion,
unicamente tomando nota del error.

El problema que daba es que los campos InicioCont y FinCont de
MovtosDia no se estaban actualizando en algunos casos. Lo misterioso
de esto es que en la mayoria de los casos todo estaba funcionando bien,
o por lo menos daba esa percepcion.

Saludos
Saga
Respuesta Responder a este mensaje
#4 Miguel Egea
03/11/2005 - 16:53 | Informe spam
uff, eso parece más bien otra cosa, cambia la estructura de tu tabla y no
permitas nulos en esos campos, tu aplicación fallará pero podrás ver que es
lo que está pasando si sql pone ahí un null, es que ese valor que le estás
pasando vale null


i
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:

Primeramente, gracias a los dos por sus comentarios.

La rutina que manda llamar el codigo que presente cuenta con un
manejador de error. Lo que hace este es que asigna la descripcion
del error a una variable (tipo String).

Esta variable es procesada por la rutina que manda llamar la rutina que
decribo. Por lo tanto, si un error ocurre, el codigo sigue con su
ejecucion,
unicamente tomando nota del error.

El problema que daba es que los campos InicioCont y FinCont de
MovtosDia no se estaban actualizando en algunos casos. Lo misterioso
de esto es que en la mayoria de los casos todo estaba funcionando bien,
o por lo menos daba esa percepcion.

Saludos
Saga



Respuesta Responder a este mensaje
#5 Saga
03/11/2005 - 18:31 | Informe spam
Interesante. Ok, voy a ver eso.

gracias de nuevo.
Saga

"Miguel Egea" wrote in message
news:%
uff, eso parece más bien otra cosa, cambia la estructura de tu tabla y
no permitas nulos en esos campos, tu aplicación fallará pero podrás
ver que es lo que está pasando si sql pone ahí un null, es que ese
valor que le estás pasando vale null


i
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:

Primeramente, gracias a los dos por sus comentarios.

La rutina que manda llamar el codigo que presente cuenta con un
manejador de error. Lo que hace este es que asigna la descripcion
del error a una variable (tipo String).

Esta variable es procesada por la rutina que manda llamar la rutina
que
decribo. Por lo tanto, si un error ocurre, el codigo sigue con su
ejecucion,
unicamente tomando nota del error.

El problema que daba es que los campos InicioCont y FinCont de
MovtosDia no se estaban actualizando en algunos casos. Lo misterioso
de esto es que en la mayoria de los casos todo estaba funcionando
bien,
o por lo menos daba esa percepcion.

Saludos
Saga







email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida