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 ...
  #1 (permalink)  
Antiguo 22/10/2004, 17:05
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 21 años, 2 meses
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
  #2 (permalink)  
Antiguo 22/10/2004, 18:09
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años, 6 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
  #3 (permalink)  
Antiguo 22/10/2004, 18:26
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 21 años, 2 meses
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
  #4 (permalink)  
Antiguo 22/10/2004, 18:32
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años, 6 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
  #5 (permalink)  
Antiguo 22/10/2004, 18:34
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 21 años, 2 meses
Puntos: 0
Que pongo en


tucondicion

Saludos
  #6 (permalink)  
Antiguo 22/10/2004, 18:37
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 21 años, 2 meses
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"cnadOpenStaticadLockOptimistic
    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
  #7 (permalink)  
Antiguo 22/10/2004, 18:49
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años, 6 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
  #8 (permalink)  
Antiguo 22/10/2004, 18:59
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 21 años, 2 meses
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
  #9 (permalink)  
Antiguo 22/10/2004, 19:00
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 21 años, 2 meses
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 
  #10 (permalink)  
Antiguo 22/10/2004, 19:02
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santo Domingo - R. Dominicana
Mensajes: 606
Antigüedad: 21 años, 2 meses
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 23:43.