Transacciones y SQL Server
Publicado por Larisa (1 intervención) el 30/12/2005 18:12:57
Hola a todos:
En el siguiente código estoy confrontando problemas con las transacciones, el cual arroja el siguiente error específicamente en el segundo SELECT, arroja lo siguiente
"NO SE PUEDE CREAR UNA NUEVA CONEXIÓN PORQUE ESTÁ EN MODO DE TRANSACCIÓN MANUAL O DISTRIBUIDA". Al parecer es el SQL Server, puesto que con acces funciona bien. Esto se produce desde de emigre de acces a SQL Server.
Mientras utilice solo INSERT todo esta bien, pero desde que aparece más de un SELECT en un misma transacción viene el problema.
Si elimino las transacciones, funciona bien.
Espero alguien me pueda ayudar, ya que he buscado en muchos sitios y no encuentro nada.
FELIZ AÑO NUEVO A TODOS.
LARISA
·"·"·"·"·"·"·"·"·"·"·"·"·"·"·"
con.BeginTrans
con.Execute "DELETE FROM stock_reporte"
SQL = "SELECT tanques.c_tanque, tanques.d_tanque, tanques.capacidad, unidades_medida.Abreviatura FROM tanques, unidades_medida WHERE tanques.c_tanque = tanques.c_tanque AND tanques.c_unidades_C = unidades_medida.c_unidad AND tanques.cod_grupo_tanque = 'TT01' AND c_tanque <> 'T29' ORDER BY tanques.c_tanque"
'SQL = "SELECT tanques.c_tanque, tanques.d_tanque FROM tanques"
Set rss = con.Execute(SQL)
Do While Not rss.EOF
tanque = rss!c_tanque
capacidad = rss!capacidad
d_tanque = rss!d_tanque
abrv = rss!abreviatura
'Escogiendo el tanque
SQL = "SELECT SUM(stock_alcohol.volumen_actual) as vol, SUM(stock_alcohol.grad_corregido) as corre, SUM (stock_alcohol.lap) as la FROM stock_alcohol WHERE stock_alcohol.c_tanque = '" & tanque & "' "
Set rsa = con.Execute(SQL)
If rsa!vol > 0 Then
grad = (rsa!la / rsa!vol) * 100
grad = Format(grad, "###,##.00")
'Si hay producto en el tanque
SQL = "SELECT grupo_de_productos.d_grupo_producto, productos.iniciales FROM stock_alcohol, grupo_de_productos, productos WHERE stock_alcohol.c_tanque = '" & tanque & "' AND stock_alcohol.grupo_producto = grupo_de_productos.c_grupo_producto AND stock_alcohol.tipo_producto = productos.c_producto "
Set rsaa = con.Execute(SQL)
grupo = " "
productos = " "
Do While Not rsaa.EOF
grupo = rsaa!d_grupo_producto
productos = (productos) + rsaa!iniciales
rsaa.MoveNext
Loop
Set NewItem = ListView2.ListItems.Add(, , d_tanque)
grad = Format(grad, "#,#.0")
la = Format(rsa!la, "#,#.00")
NewItem.SubItems(1) = capacidad
NewItem.SubItems(2) = abrv
NewItem.SubItems(3) = rsa!vol
NewItem.SubItems(4) = grad
NewItem.SubItems(5) = la
NewItem.SubItems(6) = productos
NewItem.SubItems(7) = grupo
blanco = " "
SQL = "INSERT INTO stock_reporte (tanque, capacidad, medida, volumen, grado,lap, producto, grupo, cliente)"
SQL = SQL & " VALUES ("
SQL = SQL & "'" & d_tanque & "',"
SQL = SQL & "'" & capacidad & "',"
SQL = SQL & "'" & abrv & "',"
SQL = SQL & "'" & rsa!vol & "',"
SQL = SQL & "'" & grad & "',"
SQL = SQL & "'" & rsa!la & "',"
SQL = SQL & "'" & productos & "',"
SQL = SQL & "'" & grupo & "',"
SQL = SQL & "'" & blanco & "')"
con.Execute (SQL)
Else
'Si no hay producto en el tanque
Set NewItem = ListView2.ListItems.Add(, , d_tanque)
NewItem.SubItems(1) = capacidad
NewItem.SubItems(2) = abrv
NewItem.SubItems(3) = " 0 "
NewItem.SubItems(4) = " 0 "
NewItem.SubItems(5) = " 0 "
NewItem.SubItems(6) = " "
NewItem.SubItems(7) = " "
blanco = " "
SQL = "INSERT INTO stock_reporte (tanque, capacidad, medida, volumen, grado,lap, producto, grupo, cliente)"
SQL = SQL & " VALUES ("
SQL = SQL & "'" & d_tanque & "',"
SQL = SQL & "'" & capacidad & "',"
SQL = SQL & "'" & abrv & "',"
SQL = SQL & "'0',"
SQL = SQL & "'0',"
SQL = SQL & "'0',"
SQL = SQL & "' ',"
SQL = SQL & "' ',"
SQL = SQL & "' ')"
con.Execute (SQL)
End If
rss.MoveNext
Loop
rsa.Close
Set rsa = Nothing
con.CommitTrans
Exit Sub
Atrapada:
con.RollbackTrans
MsgBox Err.Description, vbOKOnly + vbInformation, "Error 00163"
Err.Clear
En el siguiente código estoy confrontando problemas con las transacciones, el cual arroja el siguiente error específicamente en el segundo SELECT, arroja lo siguiente
"NO SE PUEDE CREAR UNA NUEVA CONEXIÓN PORQUE ESTÁ EN MODO DE TRANSACCIÓN MANUAL O DISTRIBUIDA". Al parecer es el SQL Server, puesto que con acces funciona bien. Esto se produce desde de emigre de acces a SQL Server.
Mientras utilice solo INSERT todo esta bien, pero desde que aparece más de un SELECT en un misma transacción viene el problema.
Si elimino las transacciones, funciona bien.
Espero alguien me pueda ayudar, ya que he buscado en muchos sitios y no encuentro nada.
FELIZ AÑO NUEVO A TODOS.
LARISA
·"·"·"·"·"·"·"·"·"·"·"·"·"·"·"
con.BeginTrans
con.Execute "DELETE FROM stock_reporte"
SQL = "SELECT tanques.c_tanque, tanques.d_tanque, tanques.capacidad, unidades_medida.Abreviatura FROM tanques, unidades_medida WHERE tanques.c_tanque = tanques.c_tanque AND tanques.c_unidades_C = unidades_medida.c_unidad AND tanques.cod_grupo_tanque = 'TT01' AND c_tanque <> 'T29' ORDER BY tanques.c_tanque"
'SQL = "SELECT tanques.c_tanque, tanques.d_tanque FROM tanques"
Set rss = con.Execute(SQL)
Do While Not rss.EOF
tanque = rss!c_tanque
capacidad = rss!capacidad
d_tanque = rss!d_tanque
abrv = rss!abreviatura
'Escogiendo el tanque
SQL = "SELECT SUM(stock_alcohol.volumen_actual) as vol, SUM(stock_alcohol.grad_corregido) as corre, SUM (stock_alcohol.lap) as la FROM stock_alcohol WHERE stock_alcohol.c_tanque = '" & tanque & "' "
Set rsa = con.Execute(SQL)
If rsa!vol > 0 Then
grad = (rsa!la / rsa!vol) * 100
grad = Format(grad, "###,##.00")
'Si hay producto en el tanque
SQL = "SELECT grupo_de_productos.d_grupo_producto, productos.iniciales FROM stock_alcohol, grupo_de_productos, productos WHERE stock_alcohol.c_tanque = '" & tanque & "' AND stock_alcohol.grupo_producto = grupo_de_productos.c_grupo_producto AND stock_alcohol.tipo_producto = productos.c_producto "
Set rsaa = con.Execute(SQL)
grupo = " "
productos = " "
Do While Not rsaa.EOF
grupo = rsaa!d_grupo_producto
productos = (productos) + rsaa!iniciales
rsaa.MoveNext
Loop
Set NewItem = ListView2.ListItems.Add(, , d_tanque)
grad = Format(grad, "#,#.0")
la = Format(rsa!la, "#,#.00")
NewItem.SubItems(1) = capacidad
NewItem.SubItems(2) = abrv
NewItem.SubItems(3) = rsa!vol
NewItem.SubItems(4) = grad
NewItem.SubItems(5) = la
NewItem.SubItems(6) = productos
NewItem.SubItems(7) = grupo
blanco = " "
SQL = "INSERT INTO stock_reporte (tanque, capacidad, medida, volumen, grado,lap, producto, grupo, cliente)"
SQL = SQL & " VALUES ("
SQL = SQL & "'" & d_tanque & "',"
SQL = SQL & "'" & capacidad & "',"
SQL = SQL & "'" & abrv & "',"
SQL = SQL & "'" & rsa!vol & "',"
SQL = SQL & "'" & grad & "',"
SQL = SQL & "'" & rsa!la & "',"
SQL = SQL & "'" & productos & "',"
SQL = SQL & "'" & grupo & "',"
SQL = SQL & "'" & blanco & "')"
con.Execute (SQL)
Else
'Si no hay producto en el tanque
Set NewItem = ListView2.ListItems.Add(, , d_tanque)
NewItem.SubItems(1) = capacidad
NewItem.SubItems(2) = abrv
NewItem.SubItems(3) = " 0 "
NewItem.SubItems(4) = " 0 "
NewItem.SubItems(5) = " 0 "
NewItem.SubItems(6) = " "
NewItem.SubItems(7) = " "
blanco = " "
SQL = "INSERT INTO stock_reporte (tanque, capacidad, medida, volumen, grado,lap, producto, grupo, cliente)"
SQL = SQL & " VALUES ("
SQL = SQL & "'" & d_tanque & "',"
SQL = SQL & "'" & capacidad & "',"
SQL = SQL & "'" & abrv & "',"
SQL = SQL & "'0',"
SQL = SQL & "'0',"
SQL = SQL & "'0',"
SQL = SQL & "' ',"
SQL = SQL & "' ',"
SQL = SQL & "' ')"
con.Execute (SQL)
End If
rss.MoveNext
Loop
rsa.Close
Set rsa = Nothing
con.CommitTrans
Exit Sub
Atrapada:
con.RollbackTrans
MsgBox Err.Description, vbOKOnly + vbInformation, "Error 00163"
Err.Clear
Valora esta pregunta
0