DoCmd.RunCommand acCmdDeleteRecord de distintas tablas en simultaneo

Tengo la fórmula que detallo abajo, funciona bien salvo porque la instrucción delete record solo me borra el registro actual en el formulario actual (en la tabla Paciente). Como verán hay otras tablas involucradas (Evolución e HC_Ingreso) y quisiera que también borre el registro de esas tablas. ¿Cómo se especifica el registro a borrar? Lo que identifica a cada registro es el DNI (tipo texto).

Private Sub cmdAlta_Click()
If MsgBox("¿Desea dar egreso a este paciente?", vbYesNo, "Gestion de pacientes JANIES") = vbYes Then
  If IsNull(Me.F_Nacimiento) Then
      CurrentDb.Execute "INSERT INTO Historial_Paciente (DNI, Nombre_Apellido, Cama, Edad, F_Ingreso, Diagnostico, Obra_Social, Derivado, Tel_Contacto, F_Egreso) VALUES ('" & Me.DNI & "','" & Me.Nombre_Apellido & "'," & Me.Cama & ",'" & Me.Edad & "',#" & Format(Me.F_Ingreso, "mm/dd/yyyy") & "#,'" & Me.Diagnostico & "','" & Me.Obra_Social & "','" & Me.Derivado & "','" & Me.Tel_Contacto & "',#" & Format(Me.F_Egreso, "mm/dd/yyyy") & "#)"
   Else
      CurrentDb.Execute "INSERT INTO Historial_Paciente (DNI, Nombre_Apellido, Cama, F_Nacimiento, Edad, F_Ingreso, Diagnostico, Obra_Social, Derivado, Tel_Contacto, F_Egreso) VALUES ('" & Me.DNI & "','" & Me.Nombre_Apellido & "'," & Me.Cama & ",#" & Format(Me.F_Nacimiento, "mm/dd/yyyy") & "#,'" & Me.Edad & "',#" & Format(Me.F_Ingreso, "mm/dd/yyyy") & "#,'" & Me.Diagnostico & "','" & Me.Obra_Social & "','" & Me.Derivado & "','" & Me.Tel_Contacto & "',#" & Format(Me.F_Egreso, "mm/dd/yyyy") & "#)"
   End If
   If MsgBox("¿Desea tambien archivar las evoluciones e historia clinica del paciente?", vbYesNo, "Gestion de pacientes JANIES") = vbYes Then
   CurrentDb.Execute "INSERT INTO Historial_Evolucion SELECT * FROM Evolucion WHERE DNI = '" & Me.DNI & "'"
   CurrentDb.Execute "INSERT INTO Historial_HC_Ingreso SELECT * FROM HC_Ingreso WHERE DNI = '" & Me.DNI & "'"
   End If
   DoCmd.SetWarnings False
   AllowEdits = True
   DoCmd.RunCommand acCmdDeleteRecord
   Me.Requery
   DoCmd.SetWarnings True
   AllowEdits = False
   End If
End Sub

2 Respuestas

Respuesta
1

Listo lo solucione. Lo dejo por si alguien le sirve. El tema es el siguiente:

Tengo 3 tablas que almacenan datos de pacientes, una de Evolución (Evolución), otra de Historia Clínica (HC_Ingreso) y otra de la información básica del paciente (Paciente). En el formulario donde veo los datos del paciente (que tiene origen de datos en la tabla Paciente) tengo un botón que sirve para "egresar" al paciente y archivar los datos de esa internación, o sea los días de internación, las evoluciones diarias, la historia clínica. Ese botón a apretarse selecciona al paciente de la tabla Paciente, lo copia a la tabla historial homónima, copia las evoluciones de la tabla Evolución pasándolas al historial homónimo, y copia la historia clínica de la tabla HC_Ingreso y la copia en el historial homónimo. También en el mismo procedimiento borra el registro que copio, o sea el de la tabla Paciente (mediante el comando acCmdDeleteRecord) y mediante la función "DELETE FROM" borra el registro de las tablas Evolución y HC_Ingreso.

Viendo la fórmula podría haber usado INSERT FROM y DELETE FROM para las 3 tablas, pero bueno como fui armándolo de a poco me quedo así y funciona. Igual acepto sugerencias. Dejo la fórmula por si alguien necesita hacer algo parecido.

PD: resumen: copiar registros de 3 tablas, pasarlos a otras 3 tablas y después borrarlos.

Private Sub cmdAlta_Click()
If MsgBox("¿Desea dar egreso a este paciente?", vbYesNo, "Gestion de pacientes JANIES") = vbYes Then
  If IsNull(Me.F_Nacimiento) Then
      CurrentDb.Execute "INSERT INTO Historial_Paciente (DNI, Nombre_Apellido, Cama, Edad, F_Ingreso, Diagnostico, Obra_Social, Derivado, Tel_Contacto, F_Egreso) VALUES ('" & Me.DNI & "','" & Me.Nombre_Apellido & "'," & Me.Cama & ",'" & Me.Edad & "',#" & Format(Me.F_Ingreso, "mm/dd/yyyy") & "#,'" & Me.Diagnostico & "','" & Me.Obra_Social & "','" & Me.Derivado & "','" & Me.Tel_Contacto & "',#" & Format(Me.F_Egreso, "mm/dd/yyyy") & "#)"
   Else
      CurrentDb.Execute "INSERT INTO Historial_Paciente (DNI, Nombre_Apellido, Cama, F_Nacimiento, Edad, F_Ingreso, Diagnostico, Obra_Social, Derivado, Tel_Contacto, F_Egreso) VALUES ('" & Me.DNI & "','" & Me.Nombre_Apellido & "'," & Me.Cama & ",#" & Format(Me.F_Nacimiento, "mm/dd/yyyy") & "#,'" & Me.Edad & "',#" & Format(Me.F_Ingreso, "mm/dd/yyyy") & "#,'" & Me.Diagnostico & "','" & Me.Obra_Social & "','" & Me.Derivado & "','" & Me.Tel_Contacto & "',#" & Format(Me.F_Egreso, "mm/dd/yyyy") & "#)"
   End If
   If MsgBox("¿Desea tambien archivar las evoluciones e historia clinica del paciente?", vbYesNo, "Gestion de pacientes JANIES") = vbYes Then
   CurrentDb.Execute "INSERT INTO Historial_Evolucion SELECT * FROM Evolucion WHERE DNI = '" & Me.DNI & "'"
   CurrentDb.Execute "DELETE * FROM Evolucion WHERE DNI = '" & Me.DNI & "'"
   CurrentDb.Execute "INSERT INTO Historial_HC_Ingreso SELECT * FROM HC_Ingreso WHERE DNI = '" & Me.DNI & "'"
   CurrentDb.Execute "DELETE * FROM HC_Ingreso WHERE DNI = '" & Me.DNI & "'"
   End If
   DoCmd.SetWarnings False
   AllowEdits = True
   DoCmd.RunCommand acCmdDeleteRecord
   Me.Requery
   DoCmd.SetWarnings True
   AllowEdits = False
   End If
End Sub
Respuesta
1

No hay otra forma: las instrucciones INSERT, DELETE y UPDATE insertan, borran y modifican filas de una sola tabla.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas