Consulta de eliminación En access

Señores todo expertos, cordial saludo.

En esta oportunidad solicito de su ayuda en lo siguiente: tengo dos tablas en access tabla1 y tabla2, en la tabla1 hay uno o varios registros. En la tabla2 hay muchos registros incluidos los de la tabla1. Necesito que los datos que están en la tabla1 sean eliminados solo de la tabla2.

2 Respuestas

Respuesta
2

Sin necesidad de escribir la Enciclopedia Británica. Si tengo la tabla Clientes

Y la tabla Copia, que contiene, entre otros, los registros de la Tabla Clientes

En cualquier evento, para el ejemplo lo pongo en el de Hacer clic en un botón de comando de un formulario cualquiera

Al pulsarlo me deja la tabla Copia como

Ya no están los registros que estaban en la tabla Clientes y sólo he tenido que decirle

Private Sub Comando208_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM copia WHERE cliente IN (SELECT cliente FROM Clientes)"
End Sub

Uso el campo Cliente de la tabla Clientes y de Copia. Los campos no tienen porque llamarse igual, pero sí ser de datos coherentes.

Respuesta
1

Lo puede hacer con SQL o con código VBA utilizando DAO. Le explico la segunda forma.

Tabla1

Observe esta tabla tiene 39 registros.

Tabla 2

Esta tabla tiene 43 registros, me equivoqué al resaltar en rojo debe ir hasta el número 43 que son los registros iguales en las 2 tablas.

Resultado después de ejecutar el código

Observe que solo quedan en la tabla 2 los 4 registros que muestra la imagen.

Aunque lo hice mediante una función lo puede hacer desde un procedimiento. Adicione un botón a un formulario y llame la función en el evento Después de Actualizar.

Formulario

Código del botón Actualizar

Private Sub btnActualizar_Click()
  Call retirar
End Sub

Código de la función retirar

Public Function retirar()
 On Error GoTo hay_error
 Dim db As Database
 Dim rs1 As Recordset
 Dim cta As Integer
 Dim mfactura As Long
 Set db = CurrentDb
 Set rs1 = db.OpenRecordset("Tabla1")
 Do Until rs1.EOF
     mfactura = Nz(DLookup("[idFactura]", "Tabla2", "idFactura=" & rs1!idFactura), 0)
     If rs1!idFactura = mfactura Then
       CurrentDb.Execute "DELETE FROM Tabla2 WHERE idFactura=" & mfactura
      cta = cta + 1
     End If
  rs1.MoveNext
 Loop
 If cta > 0 Then
   MsgBox "Se retiraron " & cta & " registros", vbInformation, "Actualizando"
 End If
hay_error_exit:
   Exit Function
hay_error:
    MsgBox Err.Description, vbCritical, "Error ...."
    Resume hay_error_exit
End Function

En este ejemplo utilicé el campo idFactura pero se puede hace con otro campo que esté en ambas tablas.

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

Por esto respondí "Lo puede hacer con SQL" y es la mejor opción, lo hice con DAO para obtener a la vez la cantidad de registros eliminados. El sabelotodo podría limitarse a decir "Complemento etc" pero parece que le gusta ofender a quienes también respondemos en TodoExpertos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas