Como hacer que en una tabla después de los 50 registro se vallan eliminando

Se puede auto eliminar registros luego de cierta cantidad en una BD de Access

2 respuestas

Respuesta
1

Es de suponer que los datos los vayas metiendo a través de un formulario. Pues si tengo un formulario como el de la imagen, donde puedes ver que hay 50 registros

Cuando pongo el cursor en un registro nuevo, que sería el 51

Si le decimos sí, escribo el nombre del cliente, etc, pero la tabla me la deja como

Eliminó al primero de forma que sigue habiendo 50 y el código no puede ser más sencillo. En el el evento al activar el registro del formulario le tengo puesto

Private Sub Form_Current()
If Me.NewRecord Then
If DCount("*", "copia") = 50 Then
If MsgBox("Debemos eliminar el primero", vbYesNo, "Tu decides") = vbYes Then
DoCmd.SetWarnings False
DoCmd.RunSQL "delete * from copia where idcliente=Dmin(""idcliente"",""copia"")"
End If
End If
End If
End Sub

Sin tener que escribir la Enciclopedia Británica.

Cuando fueras a escribir otro registro, repite lo mismo y elimina el de Idcliente=2 y así sucesivamente, de forma que siempre haya 50 en la tabla.

Respuesta
1

Lo puede hacer de varias formas. En este ejemplo lo hago mediante un formulario, un cuadro combinado y una función que utiliza DAO.

FORMULARIO

Selecciono 10 registros, es decir, hasta el ID 19, obtengo esta pregunta.

Hago clic en y se ejecuta la función.

Obtengo en el formulario los registros que hay quedado. Observe que están a partir del ID 20.

CÓDIGO DEL CUADRO COMBINADO RETIRAR

Private Sub cboRetirar_AfterUpdate()
  If MsgBox("¿Está seguro de retirar " & Me.cboRetirar & " registros?", vbYesNo + vbQuestion + vbDefaultButton2, "Retirando registros") = vbYes Then
     Call retirar(Me.cboRetirar)
     Me.Requery
  End If
End Sub

CÓDIGO DE LA FUNCIÓN RETIRAR

Public Function retirar(Optional lnRegistros As Integer)
 On Error GoTo hay_error
  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim strSQL As String
  Dim cuento As Long
 If CLng(lnRegistros) = 0 Then
    MsgBox "Debe indicar una cantidad de registros", vbInformation, "Error.."
    Exit Function
 End If
 'Valido que el número de registros de la tabla sea igual
 'o mayor que la cantidad a eliminar
 cuento = DCount("*", "Productos")
 If cuento >= lnRegistros Then 'Retiro
   strSQL = "SELECT TOP " & Val(lnRegistros) & " Id,producto" & vbCrLf
   strSQL = strSQL & " FROM Productos ORDER BY Id;"
 Else
   MsgBox "El número de registros es menor que la cantidad a retirar", vbInformation, "Retirando registros"
   Exit Function
 End If
 Set db = CurrentDb
 Set rs = db.OpenRecordset(strSQL)
 Do Until rs.EOF
    rs.Delete
   rs.MoveNext
 Loop
 If Err.Number = 0 Then
    MsgBox "Se retiraron " & lnRegistros & " registros satisfactoriamente", vbInformation, "Retirando registros"
 End If
hay_error_exit:
  Exit Function
hay_error:
    MsgBox "Ocurrió el error " & Err.Number, vbCritical, "Error..."
    Resume hay_error_exit
End Function

Si quiere el ejemplo lo puede solicitar a [email protected], favor en el asunto anotar la consulta.

Una observación a la respuesta que dan que no aplica a entorno multiusuario :

1. Falta la instrucción: Me. Requery después del DoCmd.RunSQL ...

2. ¿Qué sucede si la tabla no tiene el campo ID Autoincremental? ¿Cómo se sabe que registros se retiran? Aunque este sería el caso de una tabla mal diseñada

3. ¿Qué pasa en un entorno multiusuario si otros usuarios están actualizando la misma tabla o está ejecutando una consulta sobre esta tabla? En entorno multiusuario se hace por un módulo de mantenimiento de la base de datos

En el caso de mi respuesta si la tabla no tiene un ID se debe suprimir del código SQL, por ejemplo:

      strSQL = "SELECT TOP " & lnRegistros & " producto" & vbCrLf
      strSQL = strSQL & " FROM Productos;"

Entonces si hace falta la Enciclopedia Británica

Elaboré esta herramienta para hacer el mantenimiento de las tablas. Se consideran 2 casos:

CASO I

Cuando la tabla tiene un ID autonumérico. Se utiliza el ID para retirar los registros

Al seleccionar la tabla se verifica si la tabla tiene el campo ID autonumérico y fija el nombre de éste en el campo "Clave Ppal". En este caso deshabilita el cuadro combinado "Campos" porque no se requiere. Posteriormente se llenan los campos sobre los registros a retirar y la cantidad mínima de registros que deben permanecer en la tabla.

CASO II

Cuando la tabla no tiene campo ID autonumérico. Se utiliza el nombre de cualquier campo para retirar los registros.

En este caso como no hay ID autonumérico la herramienta permite se elija cualquier campo para retirar los registros, observe que el campo "Clave Ppal" no tiene datos.

La herramienta permite elegir nombres compuestos en tablas y campos, por ejemplo, TABLA COSTOS y en los campos, por ejemplo, id de producto. Lo recomendado es evitar esta estructura para el nombre de los objetos, es mejor, TABLA_COSTOS y id_de_producto.

Al hacer clic en el botón Actualizar se procede a realizar la actualización y todo caso se valida la información y que al retirar la cantidad de registros se respete la cantidad mínima a mantener.

Esta herramienta solo permite la actualización en tablas locales, ya preparé otra versión para incluir tablas vinculadas, tiene buen código VBA o Enciclopedia Británica como lo llama otro.

La herramienta pueden solicitarla a [email protected], favor anotar en el asunto "Quiero la herramienta actualización de tablas" va con el código fuente para que la modifiquen a su gusto.

Nueva versión para actualizar tablas de otra base de datos MDB o ACCDB

Contiene la explicación en pdf dentro de la misma aplicación mediante un control de explorador web.

Puede solicitar la herramienta a [email protected], favor anotar en el asunto "Quiero la herramienta de actualización". Tiene bastante "Enciclopedia Británica" como dice otro.

Ya esta disponible la versión 2.0, le adicioné un LOG para registrar las bases de datos y tablas actualizadas.

Formulario LOG

Los campos "Desde" y "Hasta", sirven para imprimir o retirar registros en el rango de fechas. Puede solicitar la herramienta a [email protected], favor anotar en el asunto "Quiero la herramienta de actualización". Por ahora no tiene ningún costo y se suministra el código fuente.

¡Gracias! Hola esta bueno esa idea pero quiero que me avise automático, se borren algunos registros, al momento en que este trabajando, si fuese así lo borrara manualmente en la tabla.

Me interesa eso de actualizar tabla.

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas