Error: Could not update; currently locked.

anonimo
20 de Diciembre del 2002
Hola, en mi aplicacion tengo unos formularios que permiten cambiar tres archivos del servidor por otros.
1. subo los nuevos
2.elimino los viejos del servidor
3.elimino la entrada de la tabla FILES correspondiente al archivo antiguo
4.añado los datos en FILES del nuevo archivo
Para ello utilizo el siguiente codigo:
' Uploading file data
Dim fileUploadedPlan, fileUploadedPrograma, fileUploadedInscripcion
fileUploadedPlan = load.saveToFile ("plan", pathToFilePlan)
fileUploadedPrograma = load.saveToFile ("programa", pathToFilePrograma)
fileUploadedInscripcion = load.saveToFile ("solicitud", pathToFileInscripcion)

' destroying load object
Set load = Nothing

'Creamos un objeto FSO
Dim fso
Set fso=CreateObject("Scripting.FileSystemObject")

' Comprobamos que el archivo PLAN ha sido subido
If fileUploadedPlan=true Then
Dim strSQL0, RS0
Set RS0 = Server.CreateObject("ADODB.Recordset")
RS0.Open "Files", strConn, 3, 3
'Comprobamos si habia antes un archivo programa asociado a la asignatura y lo eliminamos
If idArchivoPlanInput <> "" Then
idArchivoPlanInput=Cint(IdArchivoPlanInput)
RS0.filter="id="&idArchivoPlanInput
'eliminamos del servidor el antiguo archivo de Programa
fileName=RS0("nombre")
Dim f0
'obtener identificadores para la ubicacion actual de los archivos
Set f0=fso.GetFile(Server.MapPath("FilesplanesCursoPost"&fileName))
f0.delete
'Eliminamos su entrada correspondiente en la base de datos
RS0.delete
RS0.MoveNext
End If
' Adding data
RS0.AddNew
RS0("nombre")=fileNamePlan
RS0("ruta")=pathToFilePlan
RS0("tipo")="planCursoPost"
'actualizamos el valor de id
idArchivoPlan=RS0("id")
RS0.Update
RS0.Close
set RS0=nothing
End If

' Comprobamos que el archivo PROGRAMA ha sido subido
If fileUploadedPrograma=true Then
Dim strSQL1, RS1
Set RS1 = Server.CreateObject("ADODB.Recordset")
RS1.Open "Files", strConn, 3, 3
'Comprobamos si habia antes un archivo programa asociado a la asignatura y lo eliminamos
If idArchivoProgramaInput <> "" Then
idArchivoProgramaInput=Cint(IdArchivoProgramaInput)
RS1.filter="id="&idArchivoProgramaInput
'eliminamos del servidor el antiguo archivo de Programa
fileName=RS1("nombre")
Dim f1
'obtener identificadores para la ubicacion actual de los archivos
Set f1=fso.GetFile(Server.MapPath("FilesprogramasCursoPost"&fileName))
f1.delete
'Eliminamos su entrada correspondiente en la base de datos
RS1.delete
RS1.MoveNext
End If
' Adding data
RS1.AddNew
RS1("nombre")=fileNamePrograma
RS1("ruta")=pathToFilePrograma
RS1("tipo")="programaCursoPost"
'actualizamos el valor de id
idArchivoPrograma=RS1("id")
RS1.Update
RS1.Close
set RS1=nothing
End If

' Comprobamos que el archivo INSCRIPCION ha sido subido
If fileUploadedInscripcion=true Then
Dim strSQL2, RS2
Set RS2 = Server.CreateObject("ADODB.Recordset")
RS2.Open "Files", strConn, 3, 3
'Comprobamos si habia antes un archivo Inscripcion asociado al curso y lo eliminamos
If idArchivoInscripcionInput <> "" Then
idArchivoInscripcionInput=Cint(IdArchivoInscripcionInput)
RS2.filter="id="&idArchivoInscripcionInput
'eliminamos del servidor el antiguo archivo d Programa
fileName=RS2("nombre")
Dim f2
'obtener identificadores para la ubicacion actual de los archivos
Set f2=fso.GetFile(Server.MapPath("FilesinscripcionesCursoPost"&fileName))
f2.delete
'Eliminamos su entrada correspondiente en la base de datos
RS2.delete
RS2.MoveNext
End If
' Adding data
RS2.AddNew
RS2("nombre")=fileNameInscripcion
RS2("ruta")=pathToFileInscripcion
RS2("tipo")="inscripcionCursoPost"
'actualizamos el valor de id
idArchivoInscripcion=RS2("id")
RS2.Update
RS2.Close
set RS2=nothing
End If
'destruimos el objeto FileSystemObject
set fso=nothing

Sólo "algunas veces" me da el siguiente error:
Microsoft JET Database Engine error '80040e21'

Could not update; currently locked.

/amena/departamento_psicologia/actualizarcursoPost2.asp, line 316

Esta linea se corresponde con:

RS1.delete
Me puede alguien explicar a que se debe por qué sucede a veces si otras no y porque en otros codigos que he utilizado la misma estructura funciona bien
Gracias


knocte
20 de Diciembre del 2002
La verdad es que no me he leido el mensaje entero porque es muy largo y porque no sé mucho de ASP, pero por el error que te da parece que alguien estuviera leyendo RS1 en el momento de querer eliminarlo, porque dice que está "locked". Creo que es esto porque además dices que sólo te pasa "a veces", eso quiere decir que sólo te da este problema cuando alguien esta accediendo en ese momento a esa entrada. ¿No?

ana
20 de Diciembre del 2002
Gracias por responder. Sé que me enrollo mucho.
No hay nadie conectado a esta pagina porque la estoy desarrollando y no tengo ningun pagina mas abierto que realice ninguna consulta al mismo tiempo que realiizo los cambios. Si te fijas primero accedo para borrar una entrada y eso lo hace bien es la segunda vez que accedo a la tabla cuando ya no me deja. Se supone que si pongo RS.Open "files" 3, 3(adlockOptimistic) solo bloqueo los datos en el momento de hacer los cambios Por eso la primera modificacion no debería influir en la segunda
Gracias