Eliminar registro actual Visual Basic ADO

Tengo una aplicación hecha en Visual Basic 6.0 y un motor de base de datos Sql Server 7 conectada con ADO.
Bueno, estoy aquí por que después de varios intentos he podido modificar un registro actual:
Private Sub cmdModificar_Click()
rst!Nombre = txtNombre
rst!Apellido = txtApellido
rst.Update
Bueno, ahora necesito eliminar el registro actual de una tabla llamada "nombres"... Por ejemplo, si estoy en registro número 8 me elimine el registro numero 8, pero resulta que me modifica siempre el primer registro...
Bueno, como programadores sabemos que todo registro que se elimina de una base de datos no debe ser eliminado en su totalidad, así que hice que antes de eliminar un registro copie el registro actual a una tabla que se llama "Eliminados" y después elimine el registro actual de la tabla "nombres"
Dejo el código que utilizé:
Private Sub cmdEliminar_Click()
Dim var As Integer
'----------------------------------------------------------------------------
'Primero se abre la Tabla "Eliminados"
'La tabla "Eliminados" es aquella que guarda a los alumnos que se eliminarán
'Este paso es necesario antes de borrar cualquier registro
'----------------------------------------------------------------------------
Dim tField As ADODB.Field
'
' Por si ya estaba abierta...
Set cnn = Nothing
Set rst = Nothing
'
' Crear los objetos
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
'
' abrir la base usando las credenciales de Windows
cnn.Open "Provider=SQLOLEDB; " & _
"Initial Catalog=Prueba; " & _
"Data Source=SERGIO; " & _
"integrated security=SSPI; persist security info=True;"
' Se abre el recordset abriendo la tabla "Eliminados"
rst.Open "SELECT * FROM Eliminados", cnn, adOpenDynamic, adLockOptimistic
rst.AddNew
rst.Fields("IdNombreEli") = txtIdNombre
rst.Fields("NombreEli") = txtNombre
rst.Fields("ApellidoEli") = txtApellido
rst.Update
'----------------------------------------------------------------------------
'Se cierra la conexion de la tabla "Eliminados"
'Este paso es necesario, ya que esta tabla no puede permanecer abierta
'si se necesita abrir otra tabla
'----------------------------------------------------------------------------
rst.Close
cnn.Close
'----------------------------------------------------------------------------
'la declaración "Dim tField As ADODB.Field" se debe sacar ya que si no
'se provocará un error de compilación: "declaracion duplicada"
'----------------------------------------------------------------------------
' Por si ya estaba abierta...
Set cnn = Nothing
Set rst = Nothing
'
' Crear los objetos
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
'
' abrir la base usando las credenciales de Windows
cnn.Open "Provider=SQLOLEDB; " & _
"Initial Catalog=Prueba; " & _
"Data Source=SERGIO; " & _
"integrated security=SSPI; persist security info=True;"
'
' abrir el recordset indicando la tabla a la que queremos acceder
'
rst.Open "SELECT * FROM nombres", cnn, adOpenDynamic, adLockOptimistic
rst.Delete
rst.Update
End Sub
Pero el problema es que me elimina el primer registro, si quiero eliminar el registro numero 8 me elimina el registro numero 1...

2 respuestas

Respuesta
1
Claro que eliminas el primer registro siempre porque solo abres la tabla y nunca buscas el registro que vas a eliminar.
Tienes que colocar un WHERE con la condición con la cual identificas de manera única el registro que quieres eliminar.
Hola...
Gracias por responder, me ha servido el Where, pero con mi padre hicimos algo mejor...
Agregamos un campo más que le llamamos "estado" este tiene valores de 0 y 1 (Bit), y cuando damos al boton eliminar lo que hace visual basic es pasar de valor 1 a 0, (rst!estado = 0) y al momento de abrir la base de datos colocamos al boton cmdAbrir (rst.open "Select * from nombres where nombres.estado = 1") asi mostrará solamente los campos que contengan los valores 1...
Gracias y preparate que necesitaré un poco de ayuda de parte tuya... 100% te recomiendo...
Saludos
Respuesta
1
Lo que estas haciendo es abrir el recordset y luego haces un delete, cuando abres un recordset por defecto el puntero se posiciona en el primer registro, para el caso en que quisieras eliminar el registro numero 8 podrías poner lo siguiente:
Rst. Open "SELECT * FROM nombres", cnn ...
rst.Absoluteposition=8
rst.delete
Con estas lineas abres el recordset, luego pones el cursor en la posición que quieres seleccionar (en este caso 8), y luego eliminas el registro.
Hola:
Gracias por responder...
Probé lo que me has escrito y me ha dado resultado... muchas gracias...
Pero se me ocurrió hacer otra cosa, lo que hice fue agregar otro campo a la tabla, ese campo de llama estado, es de valor Bit (0 y 1), y cuando presione el botón modificar lo que hace es sencillamente cambiar del valor 1 a 0, así cuando abra la tabla nuevamente mostrará solamente los registros que tengan en el campo "estado" = 1...
rst.open *SELECT * FROM nombres WHERE nombres.estado = 1", cnn.....
Gracias y dejaré el código de todas maneras, de pasada lo dejo para aprender más de visual basic...
Gracias...
Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas