NECESITO resolver mi problema

Cerrado
NIñAA - 21 jun 2009 a las 02:50
 Elinv - 22 jun 2009 a las 14:22
Hola, necesito alguien que me ayude con esta programacion , si no lo termino para mañana me van a reprobar... no se por k no funciona !! alguen puede decir que sucede.

me sale un mensaje que dice
EL VALOR DEL BOF O EOF ES TRUE, O EL ACTUAL REGISTRO SE ELIMINO LA OPERACION SOLICITADA REQUIERE UN REGISTRO ACTUAL.

SEGUN ESTO ES PARA GUADAR LOS DATOS DE TEXTBOX EN ACCESS Y ME SALIO BN UNA VEZ PERO A LA SEGUNDA VEZ QUELOCORRI YA NO SALIO Y NO LE MOVI NADA.

AYUDENME POR FAVOR LES DEJO LA PROGRAMACION
Option Explicit

Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset

'Connection Confirmation
Private Sub Form_Load()


' establece la cadena de conexión a utilizar en la propiedad ConnectionString
cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Admin\Escritorio\calis.mdb;Persist Security Info=False"

' abre la base de datos
cnn.Open

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

' muestra los datos en los text
Call Visualizar_Datos
End Sub

' botón que mueve al primer previo
'''''''''''''''''''''''''''''''''''''''''''''''
Private Sub cmdMoveFirst_Click()

rs.MoveFirst

' Visualiza los datos en los textbox
Call Visualizar_Datos
End Sub

' botón que se desplaza al último registro
'''''''''''''''''''''''''''''''''''''''''''''''
Private Sub cmdMoveLast_Click()

' Ejecuta MoveLast y se posiciona en el último registro
rs.MoveLast

' Visualiza los datos en los textbox
Call Visualizar_Datos
End Sub

' Botón para el siguiente
'''''''''''''''''''''''''''''''''''''''''''''
Private Sub cmdMoveNext_Click()

rs.MoveNext

' Si no sobrepasó el final del recordset ...
If rs.EOF Then
' se posiciona en el ultimo
rs.MoveLast
MsgBox " Se está en el ultimo registro ", vbInformation
Else
' Visualiza los datos en los text box
Call Visualizar_Datos
End If
End Sub


' Command para ir al registro previo
''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub cmdMovePrevious_Click()
rs.MovePrevious

' si el recordset sobrepasó el comienzo se posiciona en el primero
If rs.BOF Then
rs.MoveFirst
MsgBox " este es el Primer registro ", vbInformation, " Primer registro"
Else
' Carga los datos
Call Visualizar_Datos
End If
End Sub


' Botón que añade un nuevo registro
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub command1_Click()

Call clear
' Ejecuta el método AddNew para crear un registro
rs.AddNew
' Le pasa el foco al control
Text1.SetFocus

End Sub

' Botón que elimina el registro
''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub command2_click()

If MsgBox(" Eliminar el registro ?? ", vbOKCancel + vbExclamation, " Eliminar ") = vbOK Then

' elimina el registro en el que está posicionado el recordset
rs.Delete

' Mueve al siguiente
rs.MoveNext

' si elrecordset llegó al final se posiciona en el último
If rs.EOF Then
rs.MoveLast
MsgBox " Ultimo registro ", vbInformation
End If

' muestra los datos en los textbox
Call Visualizar_Datos
End If



End Sub

' Botón que graba los datos
'''''''''''''''''''''''''''''''''''''''
Private Sub command3_Click()
If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Or Text4.Text = "" Then
MsgBox "Debe completar los datos", vbExclamation
Exit Sub
End If
Call Asignar_Datos
rs.Update
MsgBox " Registro guardado", vbInformation, "Grabar"

End Sub


' Sub que carga los datos del recordset y los asigna a los textbox
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Visualizar_Datos()
Text1.Text = CLng(rs("nombre"))
Text2.Text = rs("escuela")
Text3.Text = rs("colonia")
Text4.Text = rs("sexo")
End Sub

' Limpia las cajas de texto
Private Sub clear()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
End Sub

' Sub que asigna los datos al recordset
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Asignar_Datos()
rs("nombre") = Text1.Text
rs("escuela") = Text2.Text
rs("colonia") = Text3.Text
rs("sexo") = Text4.Text
End Sub

3 respuestas

Mira creo entender de acuerdo a tu código que está todo bien.
Te faltaría un controlador de errores, para cuando la base de datos no tiene registro alguno, es decir, está vacía, o cuando la consulta sql no te arroja ningún resultado.

Opcionalmente se utiliza "on error resume next"

Pero si queres algo mas dirigido usa el controlador de errores "err"

He autorizado a recibir tus respuestas por mail, así que todo lo que quieras, estoy a tu disposición.

Un abrazo.

Luis
1
Mirá lo que deseas es muy fácil!
Seguramente en tu base de datos tenes un campo fecha que tenes que llenar?.
Bueno cuando haces el select en el evento load del formulario, hacelo sobre la fecha actual, es decir, en la que se ejecuta el programa, y como ese día todavía no se habrá cargado ningun registro, te mostrará ningun resultado, y el formulario quedará vacío, pero tampoco podrá usar los botones de navegar pues esa busqueda arrojó cero resultado.

Deberías mantener la consulta select siempre sobre la fecha actual, para que no te busque en toda la base de datos, y autorizar otro tipo de select mas general, para cuando quieras autorizar la busqueda en toda la base, de esta manera no necesitas tener otra base de datos o tabla paralela o alterna.
----------------------------------------------------------------------------------------------
'En la base de datos tenes un campo denominado "fecha_de_ingreso" de tamaño 10 y tipo texto
'ojo que el formato es de texto y no de fecha, esto es porque si en algun momento
'te olvidas de ingresar la fecha te permite igualmente ingresar otros datos, dado que el campo
'con formato -fecha- tiene muchos inconvenientes en access.
'-----------------------------------------------------------

'Si te queres fijar si la fecha es válida, podes hacerlo así
-----------------------------------------------------------
If IsDate(mensaje) Then
MsgBox Format(mensaje, "General Date")
End If

'esto te mostrará la fecha correctamente para el caso de que el texto ingresado sea una fecha válida.
-----------------------------------------------------------

'Tenes que hacer una consulta mas o menos así en
-----------------------------------------------------------
'Private Sub Form_Load()
' sql = "select * from empleados where fecha_de_ingreso like '" & Date & "%'"
'End Sub
-----------------------------------------------------------
'Como esa consulta del evento load te va a dar cero registro para el día nuevo
'tendrías que agregar al final del evento load del formulario, algo mas o menos asi
'si el id que casi siempre es autonumérico esta vacio, informar el hecho
'y vacías todas las casillas de texto y le indicas que puede ingresar uno nuevo.
If rst!id_empleado = Empty Then
MsgBox "No hay registros que mostrar. Debe ingresar alguno"
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
End If
-----------------------------------------------------------

Un abrazo.

Luis
0
ola muchas gracias por contestarme ... y sii descubri eso en la mañana ...
la vdd es k no soy muy buena en programacion y me gustaria saber si existe una forma
k no este muy complicada
para que cada que se inicie el programa la base de datos este limpia ... y que corra correctamente
el programa ... pero que a su vez los datos que anteriormente habia ingresado los pueda encontrar aunk sea en otra base de datos
... no se si me explike ...
-1