Eliminar registros coincidente en dos tablas

Torpon
05 de Agosto del 2005
Verás os explico
Tengo Una base de datos, la cual está compuesta por dos tablas, una llamada Personal con los campos IdRegistro, Nombre, PrimerApellido, SegundoApellido y Dni y otra llamada Tramites, con los campos IdTramite, FechaTramite, ReseañaTramite y IdRegistro, las cuales me muestran sus datos en los ListViewPersonal y ListViewTramites relaccionados por el campo IdRegistro de cada una, aclarando que en la tabla Persona su IdRegistro es númerico Sin duplicados y en la tabla Tramites, su IdRegistro es tipo Número y con duplicados, al poder realizar la misma persona varios trámites, mi problema es que cuando elimino cualquier registro de la Tabla Personal, no elimina los correspondientes a los IdRegistros de la tabla Tramites, tengo que eliminarlos por separado, mi pregunta es que código tendría que utilizar para eliminar de una vez los registros de la tabla Tramites, que coincidan con el IdRegistro de la tabla Personal, utilizó el siguiente código:

Private Sub Eliminar() 'Elimino de la tabla Personal

If MsgBox("¿Desea eliminar el Registro...?", 4 + 32 + 256) = vbYes Then
abrir
If RstPersonal.RecordCount > 0 Then
While Not RstPersonal.EOF
Cod = IIf(IsNull(RstPersonal("IdRegistro")), "**Ninguno**", Trim(RstPersonal("IdRegistro")))
If Cod = CodiPro.Caption Then
RstPersonal.Edit
RstPersonal.Update
RstPersonal.Delete 'Elimina el Registro
End If
RstPersonal.MoveNext
Wend
End If
End If
FormPersonal.ListViewPersonal.ListItems.Clear
Nombre.Text = ""
PrimerApellido.Text = ""
SegundoApellido.Text = ""
DniPersona.Text = ""
Close Database

End Sub

Y desde el mismo Formulario FormPersonal, desde otros controles, grabo, elimino y modifico los datos de la Tabla Tramites, en la cual para eliminar un registro de esta empleo el código:
Private Sub EliminarTramite() 'Eliminar Trámite

If MsgBox("¿Desea eliminar éste trámite...?", 4 + 32 + 256) = vbYes Then
abrir
If RstPersonal2.RecordCount > 0 Then
While Not RstPersonal2.EOF
Cod = IIf(IsNull(RstPersonal2("IdTramite")), "**Ninguno**", Trim(RstPersonal2("IdTramite")))
If Cod = CodiPro2.Caption Then
RstPersonal2.Edit
RstPersonal2.Update
RstPersonal2.Delete 'Elimina el trámite
End If
RstPersonal2.MoveNext
Wend
End If
End If
FormPersonal. ListViewTramites.ListItems.Clear
txtFecha.Text=””
txtTramite.Text = ""
Close Database
End Sub

kinoscar
05 de Agosto del 2005
asumo que en cod almacenas el idregistro que deseas eliminar, pues bien puedes hacer lo siguiente

para la tabla personal
rstpersonal.close
rstpersonal.open "delete * from personal where idregistro=" & cod
rstpersonal.open "select * from personal
para la tabla tramites
rstpersonal2.close
rstpersonal.open "delete * from tramites where idregistro=" & cod
rstperonal2.open "Select * from tramites"

esto te eliminara de las dos tablas todos los registros cuyo campo idregistro coincida con el valor de la variable cod

espero te sirva
suerte



fmastra
05 de Agosto del 2005
No aclaras que aplicacion de base de datos usas, pero asumiendo que esta echa en Access, lomas facil es desde access si las tablas estan relacionadas por el campo idRegistro, exigirle a esa relacion integridad referencial y que elimine en cascada los registros.
Entonces cuando elimines de la tabla Personal se eliminan automaticamente de la tabla Tramites.