Foros del Web » Programando para Internet » ASP Clásico »

Error al actualizar tabla

Estas en el tema de Error al actualizar tabla en el foro de ASP Clásico en Foros del Web. Estoy intentando actualizar una tabla mediante varias consultas con en una pagina web y me sale todo el rato el siguiente error: Microsoft OLE DB ...
  #1 (permalink)  
Antiguo 16/04/2012, 12:38
 
Fecha de Ingreso: abril-2012
Mensajes: 20
Antigüedad: 12 años
Puntos: 1
Sonrisa Error al actualizar tabla

Estoy intentando actualizar una tabla mediante varias consultas con en una pagina web y me sale todo el rato el siguiente error:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[Microsoft][Controlador ODBC Microsoft Access] No se pudo actualizar; actualmente este elemento está bloqueado.

No entiendo lo que esta bloqueado pues tengo todos los permisos para el usuario que utilizo respecto a la base de datos, directorio y demas. ALguien tiene alguna idea de lo que puede ser?
  #2 (permalink)  
Antiguo 16/04/2012, 12:52
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 2 meses
Puntos: 88
Respuesta: Error al actualizar tabla

por lo que se mira es bloqueo por uso.... esto es debido a que realizaste una consulta previa, y no declaraste el cierre de la misma

esto es por una linea simple "RS.CLOSE"

ahora, si miraramos tu codigo se podria verificar mejor, no crees
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #3 (permalink)  
Antiguo 16/04/2012, 13:04
 
Fecha de Ingreso: abril-2012
Mensajes: 20
Antigüedad: 12 años
Puntos: 1
Respuesta: Error al actualizar tabla

Claro, te lo paso encantada aunque es bastante largo la verdad. Te agradezco tu ayuda, ahi va:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="../Connections/Conexion1.asp" -->
<%

Dim Ad
Dim Ad_numRows
Dim Repeat1__numRows
Dim Repeat1__index
Dim fac
Dim uni

Dim numPlaz
Dim nif
Dim opc
Dim can
Dim sup

Repeat1__numRows = -1
Repeat1__index = 0
Ad_numRows = Ad_numRows + Repeat1__numRows

Set Ad = Server.CreateObject("ADODB.Recordset")
Ad.ActiveConnection = MM_Conexion1_STRING
Ad.Source = "SELECT * FROM Admitidos ORDER BY OPCION, NOTA"
Ad.CursorType = 0
Ad.CursorLocation = 2
Ad.LockType = 1
Ad.Open()
Ad_numRows = 0
%>

<html>
<head>
</head>
<body>

<% While ((Repeat1__numRows <> 0) AND (NOT Ad.EOF)) %>

<BR><%fac=(Ad.Fields.Item("FACULTAD").Value)%><B R/>
<BR><%uni=(Ad.Fields.Item("UNIVERSIDAD").Value)%>< BR>
<BR><%numPlaz=(Ad.Fields.Item("NUM PLAZAS").Value)%><BR/>
<BR><%nif=(Ad.Fields.Item("NIF").Value)%><BR/>
<BR><%opc=(Ad.Fields.Item("OPCION").Value)%><BR/>

<%
If (numPlaz > 0) Then 'Si el numero de plazas de la fila que es leida es mayor que cero, actualiza ese NIF a CANDIDATO=true, SUPLENTE=false'


set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_Conexion1_STRING
Command1.CommandText = "UPDATE Admitidos SET CANDIDATO=true, SUPLENTE=false WHERE UNIVERSIDAD= '" + Replace(uni, "'", "''") + "' AND FACULTAD='" + Replace(fac, "'", "''") + "' and NIF = '" + Replace(nif, "'", "''") + "';"

Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()



'Como ya tiene un candidato en esa universidad/facultad, debe de actualizar el numero de plazas, con lo cual, le resta una en todas las filas donde aparezca el par universidad/facultad'

set Command2 = Server.CreateObject("ADODB.Command")
Command2.ActiveConnection = MM_Conexion1_STRING
Command2.CommandText = "UPDATE Admitidos SET [NUM PLAZAS]='" + Replace(numPlaz-&1, "'", "''") + "' WHERE UNIVERSIDAD= '" + Replace(uni, "'", "''") + "' AND FACULTAD='" + Replace(fac, "'", "''") + "' ;"

Command2.CommandType = 1
Command2.CommandTimeout = 0
Command2.Prepared = true
Command2.Execute()


'Despues de ejecutar la consulta, lee los datos de candidato y suplente para ver si tiene que seguir haciendo actualizacion o borrado de filas'

can=(Ad.Fields.Item("CANDIDATO").Value)
sup=(Ad.Fields.Item("SUPLENTE").Value)

response.write(fac)
response.write(uni)
response.write(sup)
response.write(nif)
response.write(can)




If can=true Then 'Si ha encontrado un candidato, debe mirar si el nif de ese candidato aparece mas veces en la tabla y tiene mas veces el campo candidato=true. Si es asi, mira la opcion y si esta ultima es menos, borra la fila primera ya que candidatos con menos opcion se borran de la tabla'

set Command3 = Server.CreateObject("ADODB.Command")
Command3.ActiveConnection = MM_Conexion1_STRING
Command3.CommandText = "DELETE Id FROM Admitidos WHERE NIF = '" + Replace(nif, "'", "''") + "' AND ('" + Replace(opc, "'", "''") + "' > EXISTS(SELECT OPCION FROM Admitidos WHERE NIF = '" + Replace(nif, "'", "''") + "' AND CANDIDATO=true));"

Command3.CommandType = 1
Command3.CommandTimeout = 0
Command3.Prepared = true
Command3.Execute()
end if


'Si ha entrado en ese if, quiere decir que ha borrado esa fila, por tanto, debemos actualizar una vez mas el numero de plazas, ya que habria otra vacante es esa universidad/facultad que hemos borrado
'
set Command5 = Server.CreateObject("ADODB.Command")
Command5.ActiveConnection = MM_Conexion1_STRING
Command5.CommandText = "UPDATE [Admitidos] SET [NUM PLAZAS]='" + Replace(numPlaz+&1, "'", "''") + "' WHERE UNIVERSIDAD= '" + Replace(uni, "'", "''") + "' AND FACULTAD='" + Replace(fac, "'", "''") + "' ;"

Command5.CommandType = 1
Command5.CommandTimeout = 0
Command5.Prepared = true
Command5.Execute()


If sup=true then 'Aqui hacemos lo mismo que antes, si suplente=true, miramos si hay por encima y borramos este, pero aqui no cambiamos el numero de plazas ya que eso solo afecta a los que son candidatos, pues los suplentes no restan plaza'

set Command4 = Server.CreateObject("ADODB.Command")
Command4.ActiveConnection = MM_Conexion1_STRING
Command4.CommandText = "DELETE Id FROM Admitidos WHERE NIF = '" + Replace(nif, "'", "''") + "' AND '" + Replace(opc, "'", "''") + "' > EXISTS (SELECT OPCION FROM Admitidos WHERE NIF = '" + Replace(nif, "'", "''") + "' AND SUPLENTE=true);"

Command4.CommandType = 1
Command4.CommandTimeout = 0
Command4.Prepared = true
Command4.Execute()
end if

End If
%>




<%Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
Ad.MoveNext()%>
<%wend%>



</body>
</html>
<%
Ad.Close()
Set Ad = Nothing
%>

Etiquetas: access, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:00.