Problema con INSERT into usando filtro

No puedo encontrar el error:

If MsgBox("¿Desea tambien archivar las Evoluciones, Historia Clinica y Cultivos 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 & "'"
   CurrentDb.Execute "INSERT INTO Historial_Antibioticos SELECT * FROM Antibioticos WHERE DNI = '" & Me.DNI & "'"
   CurrentDb.Execute "DELETE * FROM Antibioticos WHERE DNI = '" & Me.DNI & "'"
   CurrentDb.Execute "INSERT INTO Historial_Cultivos SELECT * FROM Cultivos WHERE DNI = '" & Me.DNI & "'"
   CurrentDb.Execute "DELETE * FROM Cultivos WHERE DNI = '" & Me.DNI & "'"
   End If

en el "CurrentDb.Execute "INSERT INTO Historial_Cultivos SELECT * FROM Cultivos WHERE DNI = '" & Me.DNI & "'"  se frena la ejecucion del codigo, no marca ningun error, pero obvio no obtengo el resultado que espero, todo lo anterior se ejecuta normalmente, pero no inserta en Historial_Cultivos y no borra de Cultivos. La sintaxis la veo bien. En las tablas Historial_Cultivos y Cultivos existe el campo DNI, de tipo texto, como en las otras tablas. No puedo darme cuenta que puede estar fallando. Tampoco se como fijarme que puede estar mal.

Alguna idea ¿?

1

1 respuesta

Respuesta
1

Para ver cual es el error

Pon lo siguiente

CurrentDb.Execute "INSERT INTO Historial_HC_Ingreso SELECT * FROM HC_Ingreso WHERE DNI = '" & Me.DNI & "'",dbFailOnError

agrega 

DbFailOnError

te dirá cual es el error.

Hola Antonio, se lo agregue a cada instrucción insert y delete, pero no me marca ningún error, y se ejecuta todo hasta la parte donde inserta desde cultivos a historial cultivos. Me doy cuenta porque si pongo en el medio esa instrucción, ejecuta hasta ahí. Si la saco, continua todo el código.

Verifica que tengas estas instrucciones en tu hoja de código

Y córrelo

Lo que tiene distinto esa tabla, que las demás no tienen, es que hay dos campos que son Cuadros de Lista, con selección múltiple. Efectivamente ahí chequie, Puse esos dos campos como texto, y funciona todo con normalidad.

¿Cómo podría hacer entonces? Porque en esos campos el usuario, a través dle formulario,es elecciona múltiples valores que se almacenan en el campo.

Ok. Entiendo .

En mi caso el cuadro de lista lo haría desde formulario (asignando los valores), o llamando a una tabla que tenga los elementos de mi lista.

Lo que puede pasar es que a la hora de inserta los datos de una tabla a otra, tu tabla

Historial_HC_Ingreso

espere otro valor, diferente al que estas insertando.

El Option Explicit de la imagen pasada es para que te obligue a declarar variables y así funcione el dbFailOnError que te dirá en un mensaje el error

¿Ok y en que lugar iría lo de Option Explicit y option compare database? El evento es este:

Private Sub cmdAlta_Click()
If MsgBox("¿Desea dar egreso a este paciente?", vbYesNo + vbQuestion, "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, Dias_Internacion, 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.Dias_Internacion & "','" & 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, Dias_Internacion, 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.Dias_Internacion & "','" & 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, Historia Clinica y Cultivos 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 & "'", dbFailOnError
   CurrentDb.Execute "INSERT INTO Historial_Antibioticos SELECT * FROM Antibioticos WHERE DNI = '" & Me.DNI & "'"
   CurrentDb.Execute "DELETE * FROM Antibioticos WHERE DNI = '" & Me.DNI & "'"
   CurrentDb.Execute "INSERT INTO Historial_Cultivos SELECT * FROM Cultivos where DNI='" & Me.DNI & "'"
   CurrentDb.Execute "DELETE * FROM Cultivos 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

El tema es que la tabla "Historial_Cultivos" es una copia de la tabla "Cultivos", o sea misma estructura, mismos campos, etc. De hecho la cree haciendo copy paste y cambiándole el nombre.

Tanto en el formulario como en la tabla "cultivos", el campo en cuestión es un combobox con origen de la fila una consulta, que saca los datos de otra tabla que posee los valores, y en "permitir varios valores" (de la tabla) esta en "si". Así cuando desplegó el combo, me aparecen para seleccionar los items que busca y en la tabla se ven todos los seleccionados, separados por comas. Eso funciona todo bien. El problema es la función INSERT al pasarlos a la otra tabla. Probé poniendo la tabla destino con el campo conflictivo en "texto" solo, (como pensando que reciba solo los valores separados por las comas), pero tampoco funciona.

En la parte superio, hasta arriba de donde tienes el código, agrega el dbFailOnError

Option Compare Database
Option Explicit
Private Sub cmdAlta_Click()
If MsgBox("¿Desea dar egreso a este paciente?", vbYesNo + vbQuestion, "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, Dias_Internacion, 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.Dias_Internacion & "','" & 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, Dias_Internacion, 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.Dias_Internacion & "','" & 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, Historia Clinica y Cultivos 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 & "'", dbFailOnError
   CurrentDb.Execute "INSERT INTO Historial_Antibioticos SELECT * FROM Antibioticos WHERE DNI = '" & Me.DNI & "'"
   CurrentDb.Execute "DELETE * FROM Antibioticos WHERE DNI = '" & Me.DNI & "'"
   CurrentDb.Execute "INSERT INTO Historial_Cultivos SELECT * FROM Cultivos where DNI='" & Me.DNI & "'", dbFailOnError
   CurrentDb.Execute "DELETE * FROM Cultivos 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

Me quedo asi, pero no sale nada cuando ejecuto el boton.

Dale espacio entre

Option Explicit
Private Sub cmdAlta_Click()

Mandame la base si quieres [email protected] Pa revisarla bien

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas