Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Error: La operación no está permitida si el objeto está cerrado.

Estas en el tema de Error: La operación no está permitida si el objeto está cerrado. en el foro de Visual Basic clásico en Foros del Web. Soy una completa novata en esto, no se que significa ese error. Me sale cuando intento guardar los datos de dos txt en la base ...
  #1 (permalink)  
Antiguo 07/11/2010, 17:30
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Sonrisa Error: La operación no está permitida si el objeto está cerrado.

Soy una completa novata en esto, no se que significa ese error. Me sale cuando intento guardar los datos de dos txt en la base de datos de Access, con el siguiente código:

Dim cedtrue As Boolean = False
Dim contrue As Boolean = False
Dim registro As New frmRegistro
Dim ced As String
Dim con As String
ced = txtDI.Text
con = txtContrasena.Text

'Aqui es donde me genera el error y no avanza mas a traces de la cadena.

While (Usuario.EOF = False) And (cedtrue = False) And (contrue = False)
If (ced = Usuario.Fields(0).Value) Then
cedtrue = True
If (con = Usuario.Fields(3).Value) Then
contrue = True
Else
MsgBox("Contraseña incorrecta")
End If
Else
Usuario.MoveNext()
End If
End While

If (cedtrue = True) And (contrue = True) Then
frmRegistro.Show()
ElseIf (cedtrue = False) And (contrue = False) Then
MsgBox("Documento incorrecto")
End If


Este error ya lo pudieron resolver en otro foro pero ninguna de las soluciones las pude o supe aplicar a este codigo. Tambien me sale en otros codigos donde intento consultar o guardar datos en la BD.

Muchas gracias, de antemano, por la atencion prestada.
  #2 (permalink)  
Antiguo 08/11/2010, 02:48
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 19 años
Puntos: 13
Respuesta: Error: La operación no está permitida si el objeto está cerrado.

Hola

En principio diría que es porque el recordset o la bd están cerradas, en que parte del código abres el recordset usuario?, lo cierras en algún momento?

--Saludos--
  #3 (permalink)  
Antiguo 09/11/2010, 19:02
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Respuesta: Error: La operación no está permitida si el objeto está cerrado.

Pues he intentado abrir el recorset usuario con Usuario.open() dentro del codigo pues en el modulo de Conexion ya lo abri, pero no funciona... aunque creo que esa no es la manera correcta de abrirlo.
  #4 (permalink)  
Antiguo 10/11/2010, 01:37
 
Fecha de Ingreso: noviembre-2009
Mensajes: 315
Antigüedad: 15 años
Puntos: 0
Respuesta: Error: La operación no está permitida si el objeto está cerrado.

Cita:
Iniciado por ValeriaGP Ver Mensaje
Soy una completa novata en esto, no se que significa ese error. Me sale cuando intento guardar los datos de dos txt en la base de datos de Access, con el siguiente código:

Dim cedtrue As Boolean = False
Dim contrue As Boolean = False
Dim registro As New frmRegistro
Dim ced As String
Dim con As String
ced = txtDI.Text
con = txtContrasena.Text

'Aqui es donde debe ir una consulta

While (Usuario.EOF = False) And (cedtrue = False) And (contrue = False)
If (ced = Usuario.Fields(0).Value) Then
cedtrue = True
If (con = Usuario.Fields(3).Value) Then
contrue = True
Else
MsgBox("Contraseña incorrecta")
End If
Else
Usuario.MoveNext()
End If
End While

If (cedtrue = True) And (contrue = True) Then
frmRegistro.Show()
ElseIf (cedtrue = False) And (contrue = False) Then
MsgBox("Documento incorrecto")
End If


Este error ya lo pudieron resolver en otro foro pero ninguna de las soluciones las pude o supe aplicar a este codigo. Tambien me sale en otros codigos donde intento consultar o guardar datos en la BD.

Muchas gracias, de antemano, por la atencion prestada.
y como se si la consulta llego v al final si no la has hecho?
  #5 (permalink)  
Antiguo 10/11/2010, 10:09
Avatar de moniqa25  
Fecha de Ingreso: noviembre-2007
Mensajes: 10
Antigüedad: 17 años
Puntos: 0
Respuesta: Error: La operación no está permitida si el objeto está cerrado.

Hola, V.

Bueno, si no he comprendido mal lo que quieres hacer, sería más o menos esto. Lo he hecho en ADO por optimizar rendimiento.

Espero que te sirva.

Lo primero que necesitas (y que no veo) es abrir la conexión a la BD:
Public Function ConectarBDAccess_ADO(ByRef ctnConexion As ADODB.Connection, strBaseDatos As String, Optional varPassword As Variant) As Boolean

Dim strBDAccessADO As String

On Error GoTo ControlErrores

ConectarBDAccess_ADO = True

strBDAccessADO = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strBaseDatos
If Not IsMissing(varPassword) Then
strBDAccessADO = strBDAccessADO & ";Jet OLEDB:Database Password=" & varPassword
End If
If ctnConexion.State = adStateOpen Then
ctnConexion.Close
End If
ctnConexion.ConnectionTimeout = 60
ctnConexion.Open (strBDAccessADO)

Exit Function

ControlErrores:
ConectarBDAccess_ADO = False
Call MostrarError("ConectarBDAccess_ADO", Err.Number, Err.Description)

End Function






Dim cedtrue As Boolean = False
Dim contrue As Boolean = False
Dim registro As New frmRegistro
Dim ced As String
Dim con As String

' ***** Nuevo *****
Dim strSQL As String
Dim ctnBDEjemplo As New ADODB.Connection
Dim rfoDatos As New ADODB.Recordset



ced = txtDI.Text
con = txtContrasena.Text




'Aqui es donde debe ir una consulta
if not ConectarBDAccess_ADO(ctnBDEjemplo, "Ruta y nombre del fichero Access", "Password (opcional) si la tienes) then
'Error en la conexión a BD
'Tratar error
exit sub
endif

'Ya estamos conectados. Abrimos un recordset (entiendo, por tu código, que sólo te va a devolver un registro)
strSQL = "SELECT NombreTabla1.Campo1, NombreTabla1.Campo2, NombreTabla2.Campo1 " & _
"FROM NombreTabla1 " & _
"INNER JOIN NombreTabla2 ON NombreTabla1.IDClave = NombreTabla2.IDClave
rfoDatos.CursorLocation = adUseClient
rfoDatos.Open strSQL, ctnBDIntercambio, adOpenForwardOnly, adLockOptimistic, adCmdText
If Not rfoDatos.EOF And cedtrue And NOT contrue Then
do while not rfodatos.eof
If (ced = rfodatos("Campo1")) Then
cedtrue = True
If (con = rfodatos("Campo2").Value) Then
contrue = True
Else
MsgBox("Contraseña incorrecta")
End If
End If
rfoDatos.movenext
loop
end if

If cedtrue And contrue Then
frmRegistro.Show()
ElseIf not cedtrue And not contrue Then
MsgBox("Documento incorrecto")
End If

Etiquetas: objeto
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 16:56.