Foros del Web » Programación para mayores de 30 ;) » Programación General »

Error BOF como Evitar ??

Estas en el tema de Error BOF como Evitar ?? en el foro de Programación General en Foros del Web. Hola Amigos Bueno, estoy realizando un Programa y hay una parte que es para Eliminar los Registros pero cuando hay 1 solo registro que lo ...
 
Antiguo 22/10/2004, 17:05
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 23 años
Puntos: 0
Error BOF como Evitar ??

Hola Amigos

Bueno, estoy realizando un Programa y hay una parte que es para Eliminar los Registros pero cuando hay 1 solo registro que lo Elimino me sale esto:

Error "3021" en tiempo de ejecución :

El valor es BOF o EOF es True, o el actual registro se eliminó; la
operación solicitada requiere un registro actual.


Como Evito esto:

El Código que le tengo es:

Código PHP:
Private Sub CmdEliminar_Click()
    
Rs.Delete
    Rs
.MoveNext
    
If Rs.EOF Then
        Rs
.MoveLast
    End 
If
End Sub 
Espero que me Ayuden.

Saludos
 
Antiguo 22/10/2004, 18:09
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 22 años, 4 meses
Puntos: 0
Por que no pruebas con:
cn as new adodb.connection

cn.open "tu conexion"

sql="Delete from tabla where tu_condicion"
cn.execute(sql)

de la otra manera como tu lo tienes puedes intenta esto:

rs.delete
sql="select count(*) from tu tabla"
rs2 sql,cn
if rs2(0)=0 then
msgbox "No hay registros"
else
rs.movenext
end if

Pero no se si funcione

Saludos
 
Antiguo 22/10/2004, 18:26
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 23 años
Puntos: 0
No Funciona me marca lo siguiente:

Código PHP:
if rs2(0)=0 then 
Una cosa, como yo lo tengo no se puede hacer para que diga un Mensaje etc. Realmente no se. Espero que me Ayudes.

Saludos
 
Antiguo 22/10/2004, 18:32
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 22 años, 4 meses
Puntos: 0
Que te marca?
Pero te digo hazlo mejor de la primer forma por ejem:

cn as new adodb.connection
rs as new adodb.recordset
sql as string

cn.open "tu conexion"

En el boton de borrar

sql="select count(*) from tu tabla where tucondicion" 'Para saber que registro va aborar si existe o no
set rs=cn.execute(sentencia)
if rs(0)=0 then
Msgbox "El registro no existe"
else
sql="Delete from tu tabla where tucondicion" 'Que registro va a borrar
cn.execute(sentencia)
Msgbox "Registro Eliminado"
End if

Saludos
 
Antiguo 22/10/2004, 18:34
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 23 años
Puntos: 0
Que pongo en


tucondicion

Saludos
 
Antiguo 22/10/2004, 18:37
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 23 años
Puntos: 0
Mira como está compuesto el Form

Código PHP:
Dim cn As ADODB.Connection
Dim rs 
As ADODB.Recordset

Private Sub cmdAnterior_Click()
rs.MovePrevious
cmdSiguiente
.Enabled = True
desabilitar
If rs.BOF = True Then
 rs
.MoveFirst
 cmdPrimero
.Enabled = False
 cmdAnterior
.Enabled = False
Else
 
refrescar
End 
If
End Sub

Private Sub cmdBuscar_Click()
    
Load frmBuscarEliminar
    frmBuscarEliminar
.Show vbModal
    txtNombre 
= Nombre
End Sub

Private Sub CmdEliminar_Click()
    If 
Trim(txtNombre.Text) = "" Then
    MsgBox 
"Base de Datos sin Contactos", vbInformation, "Información"
    
txtNombre.SetFocus
    
Exit Sub
    End 
If
    
rs.Delete
    rs
.MoveNext
    
If rs.EOF Then
        rs
.MoveLast
    End 
If
    
Unload Me
    Load frmEliminar
    frmEliminar
.Show vbModal
End Sub

Private Sub cmdPrimero_Click()
rs.MoveFirst
refrescar
desabilitar
End Sub

Private Sub cmdSiguiente_Click()
rs.MoveNext
desabilitar
If rs.EOF = True Then
   rs
.MoveLast
   cmdUltimo
.Enabled = False
   cmdSiguiente
.Enabled = False
Else
   
refrescar
End 
If
End Sub

Private Sub cmdUltimo_Click()
rs.MoveLast
refrescar
desabilitar
End Sub

Private Sub Form_Load()
    
Set cn = New ADODB.Connection
    Set rs 
= New ADODB.Recordset
    cn
.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & App.Path & "\Directorio.mdb ;Admin=Admin;Pwd=896576560;"
    
rs.ActiveConnection = cn
    rs
.CursorType = adOpenKeyset
    rs
.Open "Select * From Directorio", cn, adOpenStatic, adLockOptimistic
    Label7
.Caption = rs.RecordCount & " Contactos Agregados a su lista"
    
Set txtNombre.DataSource = rs
    txtNombre
.DataField = "Nombre"
    
Set txtTelefono.DataSource = rs
    txtTelefono
.DataField = "Telefono"
    
Set txtFax.DataSource = rs
    txtFax
.DataField = "Fax"
    
Set txtEmail.DataSource = rs
    txtEmail
.DataField = "Email"
    
Set txtDireccion.DataSource = rs
    txtDireccion
.DataField = "Direccion"
    
If Ok Then txtNombre.SetFocus
End Sub

Private Sub cmdCancelar_Click()
    
Unload Me
    Load frmMain
    frmMain
.Show vbModal
End Sub

Private Sub Form_Unload(Cancel As Integer)
    
cn.Close
    Set cn 
= Nothing
End Sub

Private Sub Timer1_Timer()
Dim wkday
Dim mnthday
Dim mnth
wkday 
= Weekday(Now)
mnth = Month(Now)
If 
wkday = 1 Then
wkday 
= "Domingo"
ElseIf wkday = 2 Then
wkday 
= "Lunes"
ElseIf wkday = 3 Then
wkday 
= "Martes"
ElseIf wkday = 4 Then
wkday 
= "Miércoles"
ElseIf wkday = 5 Then
wkday 
= "Jueves"
ElseIf wkday = 6 Then
wkday 
= "Viernes"
ElseIf wkday = 7 Then
wkday 
= "Sábado"
End If
If 
mnth = 1 Then
mnth 
= "Enero"
ElseIf mnth = 2 Then
mnth 
= "Febrero"
ElseIf mnth = 3 Then
mnth 
= "Marzo"
ElseIf mnth = 4 Then
mnth 
= "Abril"
ElseIf mnth = 5 Then
mnth 
= "Mayo"
ElseIf mnth = 6 Then
mnth 
= "Junio"
ElseIf mnth = 7 Then
mnth 
= "Julio"
ElseIf mnth = 8 Then
mnth 
= "Agosto"
ElseIf mnth = 9 Then
mnth 
= "Septiembre"
ElseIf mnth = 10 Then
mnth 
= "Octubre"
ElseIf mnth = 11 Then
mnth 
= "Noviembre"
ElseIf mnth = 12 Then
mnth 
= "Diciembre"
End If
Label6.Caption = Time & ", " & wkday & ", " & mnth & " " & Day(Now) & ", " & Year(Now)
End Sub

Public Sub refrescar()
txtNombre.Text = rs!Nombre
End Sub

Public Function validar() As Boolean
If rs.BOF = True Or rs.EOF = True Then
  validar 
= False
Else
  
validar = True
End 
If
End Function

Public 
Sub desabilitar()
If 
cmdPrimero.Value = True Then
         cmdSiguiente
.Enabled = True
         cmdUltimo
.Enabled = True
         cmdAnterior
.Enabled = False
         cmdPrimero
.Enabled = False
Else
If 
cmdUltimo.Value = True Then
         cmdSiguiente
.Enabled = False
         cmdUltimo
.Enabled = False
         cmdAnterior
.Enabled = True
         cmdPrimero
.Enabled = True
Else
        
cmdSiguiente.Enabled = True
        cmdUltimo
.Enabled = True
        cmdAnterior
.Enabled = True
        cmdPrimero
.Enabled = True
End 
If
End If
End Sub 
Si puedes modificalo y así aprendo

Saludos
 
Antiguo 22/10/2004, 18:49
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 22 años, 4 meses
Puntos: 0
A lo que me refiero es que en la forma me imagino que hay algun text que tenga el ID o llave primaria de tu tabla entonces al borrarlo en tu condicion pones:

sql="Delete from tu tabla where id=" & text1.text

Si no por que no intentas con:

if isnull(rs(0)) then
msgbox "No hay mas registos"
else
llenas todos tus text por que si hay cuando menos un registro
con el rs.movenext
End if
 
Antiguo 22/10/2004, 18:59
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 23 años
Puntos: 0
En que parte pongo esto:

Código PHP:
if isnull(rs(0)) then
msgbox 
"No hay mas registos"
else 
rs.movenext
End 
if 
Saludos

PD: Perdoname las innoracia pero bueno, estoy aprendiendo
 
Antiguo 22/10/2004, 19:00
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 23 años
Puntos: 0
Listo

Ya anda

Solo que quite

Código PHP:
    rs.MoveNext 
Quedaría así

Código PHP:
Private Sub CmdEliminar_Click()
    If 
Trim(txtNombre.Text) = "" Then
    MsgBox 
"No hay Registros", vbInformation, "Información"
    
txtNombre.SetFocus
    
Exit Sub
    End 
If
    
rs.Delete
    
If rs.EOF Then
        rs
.MoveLast
    End 
If
    
Unload Me
    Load frmEliminar
    frmEliminar
.Show vbModal
End Sub 
 
Antiguo 22/10/2004, 19:02
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 23 años
Puntos: 0
Ahora, dejame hacerte una pregunta. Como puedo usar un TexBox como buscar automatico. Ejemplo:

Pongo Adrián López y en los siguientes Cámpos se llenan automaticamente con la Info de la BD.

Saludos
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 13:52.