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

Error 3021?

Estas en el tema de Error 3021? en el foro de Visual Basic clásico en Foros del Web. Hola Amigos del foro miren tengo esta consulta con el error 3021 en visual basic 6, me indica que "el valor del BOF o EOF ...
  #1 (permalink)  
Antiguo 05/12/2007, 21:59
Avatar de juancho24  
Fecha de Ingreso: octubre-2007
Mensajes: 101
Antigüedad: 16 años, 6 meses
Puntos: 1
Pregunta Error 3021?

Hola Amigos del foro

miren tengo esta consulta con el error 3021 en visual basic 6, me indica que "el valor del BOF o EOF es true, o el actual registro se elimino; la operacion solicitada requiere un registro actual"

a que se pude deber este error?

esto me pasa al tener la tabla de access sin datos, al momento de ingresarle un resistro me soluciona el problema, que puedo hacer para que me ingrese datos sin tener ningun registro en la tabla?

ayudenme porfavor

gracias

saludos
  #2 (permalink)  
Antiguo 07/12/2007, 00:55
 
Fecha de Ingreso: mayo-2005
Mensajes: 117
Antigüedad: 19 años
Puntos: 0
Re: Error 3021?

hola..

veamos... no tiene por que marcar te el error si vas a insertar un registro nuevo (insert), sin importar si la tabla esta vacia o no....

es error es cuando tratas de pasar al siguiente registro y ya esta en el ultimo o esta vacía la tabla o bien pasar al anterior y estas en el principio o esta vacía la tabla .... estaría bien que pusieras tu código para examinarlo y ver el problema.....

saludos....

rahd....
  #3 (permalink)  
Antiguo 07/12/2007, 09:39
Avatar de juancho24  
Fecha de Ingreso: octubre-2007
Mensajes: 101
Antigüedad: 16 años, 6 meses
Puntos: 1
Re: Error 3021?

Cita:
Iniciado por rahd_rr Ver Mensaje
hola..

veamos... no tiene por que marcar te el error si vas a insertar un registro nuevo (insert), sin importar si la tabla esta vacia o no....

es error es cuando tratas de pasar al siguiente registro y ya esta en el ultimo o esta vacía la tabla o bien pasar al anterior y estas en el principio o esta vacía la tabla .... estaría bien que pusieras tu código para examinarlo y ver el problema.....

saludos....

rahd....
Gracias por responderme, aqui esta el codigo y "Me marca el error en el codigo del calendar"

Private Sub Calendar1_Click()

rs("fecha") = Calendar1.Value

End Sub

'Connection Confirmation
Private Sub Form_Load()

'Set Skinner1.Forms = Forms
Set cnn = Nothing
Set rs = Nothing

' establece la cadena de conexión a utilizar en la propiedad ConnectionString
cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
App.Path & "\Negocios.mdb" & ";Persist Security Info=False"

' abre la base de datos
cnn.Open

' abre el recordset enviando la consulta sql
rs.Open "Select * from OBSERVACIONESGENERALES", cnn, adOpenDynamic, adLockOptimistic

'txtAtendioVisita.Enabled = False
'txtHoraVisita.Enabled = False
'txtRelacion.Enabled = False
'Frame1.Enabled = False
'txtMontoCredito.Enabled = False
'txtPlazo.Enabled = False
'txtObjetivo.Enabled = False
'Frame2.Enabled = False
'txtAspectosPositivos.Enabled = False
'txtExpectativa.Enabled = False
'txtAspectosNegativos.Enabled = False
'txtConclusion.Enabled = False
'cmdSalir.Enabled = False

Static varMostrarMenu As Boolean
Dim Ya_Existe As Integer
Ya_Existe = App.PrevInstance
Call funcHookText(txtRutCliente)
Call funcHookText(txtdvcliente)
varMostrarMenu = True
If Ya_Existe <> 0 Then
End
End If

End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Call funcUnHookText
End Sub

Private Sub cmdSalir_Click()

rs.AddNew
Call Asignar_Datos
rs.Update

MsgBox "Registro Guardado", vbInformation

Unload Me

End Sub


' Sub que asigna los datos al recordset

Private Sub Asignar_Datos()

rs("NombrePersonaAtendio") = txtAtendioVisita.Text
rs("HoraVisita") = txtHoraVisita.Text
rs("RelacionconCliente") = txtRelacion.Text
rs("MontoCredito") = txtMontoCredito.Text
rs("PlazoCredito") = txtPlazo.Text
rs("ObjetivosCredito") = txtObjetivo.Text
rs("AspectosPositivos") = txtAspectosPositivos.Text
rs("AspectosNegativos") = txtAspectosNegativos.Text
rs("ExpectativasNegocio") = txtExpectativa.Text
rs("Conclusion") = txtConclusion.Text
rs("DisposiciondelCliente") = IIf(OptDisposicion(0).Value = True, "Favorable", IIf(OptDisposicion(1).Value = True, "Regular", IIf(OptDisposicion(2).Value = True, "Escasa", "UltimoValor")))
rs("ConocimientoActividad") = IIf(OptConocimiento(0).Value = True, "Favorable", IIf(OptConocimiento(1).Value = True, "Regular", IIf(OptConocimiento(2).Value = True, "Escasa", "UltimoValor")))
rs("RutVisitador") = lblRutVisitador.Caption
rs("RutCliente") = lblRutCliente.Caption
rs("fecha") = Calendar1.Value

End Sub
  #4 (permalink)  
Antiguo 08/12/2007, 17:59
 
Fecha de Ingreso: mayo-2005
Mensajes: 117
Antigüedad: 19 años
Puntos: 0
Re: Error 3021?

hola...

según yo el problema esta en que estas asignando al recordset el valor del calendar a un registro que aun no agregas(cuando la tabla esta vacia) esto en cada click del calendar ...osea que no estas dando al
rs un addnew ya que cada vez que asignes al rs un valor debes tener listo el nuevo registro (addnew) registro abierto en espera de datos o bien el RS debe de estar apuntado a un registro existente(tabla no vacia)

por ejemplo si te das cuenta en la parte del codigo

1 rs.AddNew
2 Call Asignar_Datos
3 rs.Update

1 primero abres el registro nuevo, registro abierto en espera de datos(si la tabla esta vacia o no se crea un registro y ahora el RS apunta el este)
2 llamas la función que asigna los valores al rs que esta abierto(llenas el registro nuevo)
3 das update al registro que esta abierto
entonces al momento que das Clcik al Calendar tratas de asignar su valor a un registro que no no existe(tabla vacía)...

por lo tanto debes de validar que exista al menos un registro en la tabla (que no este vacía)...
if Not rs.BOF and Not rs.EOF then
rs.("fecaha") = valor
end if

con esto modifica el valor de la fecha en del registro al que apunta el rs en cada click del calendar obviamente no se modfica hasta que des el update

ademas date cuenta que el la función ..

Private Sub Asignar_Datos()
.....
....
rs("fecha") = Calendar1.Value
....
....
End Sub

ya asignas el valor del calendar al rs .....

ahora ... el por que solo cuando la tabla esta vacia te da ese error...
en el Load del form abres la conección y traes la consulta y la pones o guardas o se la asigans al RS (recodset) si la consulta te devuelve como resultado uno o mas registro el recordset se coloca en el primer registro (si no mal recuerdo ). por lo tanto estando en el primer registro o en cualquiera tu puedes acceder a los datos borrarlos o modificarlos etc ...
por lo tanto en cualquier momento tu puedes asignar un valor al registro en el que esta posicionado el RS esto es

rs("campo")= valor

y en caso que la consulta no te regrese ningún registro(tabla vacia) el RS esta Posicionado en el Principio(BOF) del RS y a su vez en el Final(EOF) y no tiene algún registro existente para asignar los datos, no apunta a ingun registro y si tratas de asignar o sacar un valor
rs("campor")=valor
variable=rs("campo")
te pinta el error...

espero te haya sido de ayuday espero haberme explicado claramente y no haberte confundido..

saludos.....

.... rahd rr

Última edición por rahd_rr; 08/12/2007 a las 18:09
  #5 (permalink)  
Antiguo 11/12/2007, 10:21
Avatar de juancho24  
Fecha de Ingreso: octubre-2007
Mensajes: 101
Antigüedad: 16 años, 6 meses
Puntos: 1
Pregunta Re: Error 3021?

Cita:
Iniciado por rahd_rr Ver Mensaje
hola...

según yo el problema esta en que estas asignando al recordset el valor del calendar a un registro que aun no agregas(cuando la tabla esta vacia) esto en cada click del calendar ...osea que no estas dando al
rs un addnew ya que cada vez que asignes al rs un valor debes tener listo el nuevo registro (addnew) registro abierto en espera de datos o bien el RS debe de estar apuntado a un registro existente(tabla no vacia)

por ejemplo si te das cuenta en la parte del codigo

1 rs.AddNew
2 Call Asignar_Datos
3 rs.Update

1 primero abres el registro nuevo, registro abierto en espera de datos(si la tabla esta vacia o no se crea un registro y ahora el RS apunta el este)
2 llamas la función que asigna los valores al rs que esta abierto(llenas el registro nuevo)
3 das update al registro que esta abierto
entonces al momento que das Clcik al Calendar tratas de asignar su valor a un registro que no no existe(tabla vacía)...

por lo tanto debes de validar que exista al menos un registro en la tabla (que no este vacía)...
if Not rs.BOF and Not rs.EOF then
rs.("fecaha") = valor
end if

con esto modifica el valor de la fecha en del registro al que apunta el rs en cada click del calendar obviamente no se modfica hasta que des el update

ademas date cuenta que el la función ..

Private Sub Asignar_Datos()
.....
....
rs("fecha") = Calendar1.Value
....
....
End Sub

ya asignas el valor del calendar al rs .....

ahora ... el por que solo cuando la tabla esta vacia te da ese error...
en el Load del form abres la conección y traes la consulta y la pones o guardas o se la asigans al RS (recodset) si la consulta te devuelve como resultado uno o mas registro el recordset se coloca en el primer registro (si no mal recuerdo ). por lo tanto estando en el primer registro o en cualquiera tu puedes acceder a los datos borrarlos o modificarlos etc ...
por lo tanto en cualquier momento tu puedes asignar un valor al registro en el que esta posicionado el RS esto es

rs("campo")= valor

y en caso que la consulta no te regrese ningún registro(tabla vacia) el RS esta Posicionado en el Principio(BOF) del RS y a su vez en el Final(EOF) y no tiene algún registro existente para asignar los datos, no apunta a ingun registro y si tratas de asignar o sacar un valor
rs("campor")=valor
variable=rs("campo")
te pinta el error...

espero te haya sido de ayuday espero haberme explicado claramente y no haberte confundido..

saludos.....

.... rahd rr

Hola

Mira la verdad estoy enredado con esto, mira valide que exista un registro en la tabla con lo que me dijiste, que era esto

if Not rs.BOF and Not rs.EOF then
rs("fecha") = Calendar1.value
end if


pero sigo teniendo el problema, no entendi que mas tenia que modificar,
porfavor me puedes responder k es lo que exactamente tengo que modificar

gracias

saludos
  #6 (permalink)  
Antiguo 12/12/2007, 01:58
 
Fecha de Ingreso: mayo-2005
Mensajes: 117
Antigüedad: 19 años
Puntos: 0
Re: Error 3021?

hola....

es necesario que en el evento del click del calendar tengas esa instruccion???

rs("fecha")=calendar.value

lo pregunto ya que en tu codigo al dar click en Salir llamas al sub que asigna el valor del calendar (y todos los demas Tex)...

Private Sub cmdSalir_Click()

rs.AddNew
Call Asignar_Datos
rs.Update

MsgBox "Registro Guardado", vbInformation

Unload Me

End Sub

por lo que se ve no es necesario esa instruccion ahi ...

saludos ...

....rahd RR
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 10:41.