
guardar varios registros con un bucle, pero si se encuentra uno ya guardado no lo vuelva a guardar
Publicado por victor alfonso (21 intervenciones) el 04/03/2023 15:23:02
Cordial saludo, planteo la situación que tengo en el momento cuando intento guardar registro en una tabla en una DB Access.
Intento guardar varios registros a la vez a través de un bucle For Next, el cual muy amablemente se construyo en una consulta aquí en el foro de este sitio.
Al ejecutarse el código guarda los registros en la tabla "tbNotas" sin problema alguno, los datos son cargados desde un formulario en el cual hay en común un objeto comboBox que se repite 6 veces cmbmateriaModulo1, 2,3,4,5,6
y se guardan los registros que sean necesarios es decir si solo se seleccionaron 3 combos de los 6 no se guardan los otros tres que no tienen datos.
la situación sería cuando por alguna razón suceda que solo se seleccionan tres combos y se guardan tres registros y después se abra el formulario desde donde se mandarían los datos y nuevamente se proceda a asignar los módulos o materias restantes al estudiante ya que al buscar al estudiante ps se le muestran los otros módulos que ya tiene asignados y solo se van a seleccionar los faltantes, entonces se vuelve a ejecutar el código y se guardan todos los registros otra vez entonces en la tabla "tbNotas quedan guardados los tres que se guardaron inicialmente mas los 5 0 6 que se mandan nuevamente desde el formulario, y por esta razón se duplican los tres primeros registros guardados.
Entonces lo que quiero es que si el bucle va a guardar nuevamente los registros cuando encuentre uno de ellos ya guardado ps no lo guarde sino los otros que faltarían.
el código del bucle es el siguiente:
Private Sub asignarMateriaNotas()
Dim Bucle As Long, CtrDato As Control
DoCmd.SetWarnings False
If Nz(Me.cmbidentificacionEstudiante, "") = "" Then Exit Sub 'se verifica que hay un alumno seleccionado, si no lo hay se aborta)
'mas verificaciones aquí, antes de ejecutar el bucle para evitar campos vacíos
For Bucle = 1 To 6
Set CtrDato = Controls("cmbmateriaModulo" & Bucle)
If Not IsNull(CtrDato) Then DoCmd.RunSQL "INSERT INTO tbNotas(idEstudiante, idNivelSemestre, idCalendario, idPrograma, idMateriaModulo) VALUES(cmbidentificacionEstudiante, nombreSemestre, idCalendario, cmbidPrograma, " & CtrDato & ")"
Next Bucle
DoCmd.SetWarnings True
End Sub
Estoy utilizando el método Docmd.RunSQL porque así me guarda sin problemas, ya que si utilizo el método CurrentDb.Execute me arroja un error en tiempo de ejecución que dice se esperaba "4". entonces como con el otro método funciona ps lo dejo así.
Espero haberme echo entender y que me pueda ayudar con esto, mil gracias de antemano.
Intento guardar varios registros a la vez a través de un bucle For Next, el cual muy amablemente se construyo en una consulta aquí en el foro de este sitio.
Al ejecutarse el código guarda los registros en la tabla "tbNotas" sin problema alguno, los datos son cargados desde un formulario en el cual hay en común un objeto comboBox que se repite 6 veces cmbmateriaModulo1, 2,3,4,5,6
y se guardan los registros que sean necesarios es decir si solo se seleccionaron 3 combos de los 6 no se guardan los otros tres que no tienen datos.
la situación sería cuando por alguna razón suceda que solo se seleccionan tres combos y se guardan tres registros y después se abra el formulario desde donde se mandarían los datos y nuevamente se proceda a asignar los módulos o materias restantes al estudiante ya que al buscar al estudiante ps se le muestran los otros módulos que ya tiene asignados y solo se van a seleccionar los faltantes, entonces se vuelve a ejecutar el código y se guardan todos los registros otra vez entonces en la tabla "tbNotas quedan guardados los tres que se guardaron inicialmente mas los 5 0 6 que se mandan nuevamente desde el formulario, y por esta razón se duplican los tres primeros registros guardados.
Entonces lo que quiero es que si el bucle va a guardar nuevamente los registros cuando encuentre uno de ellos ya guardado ps no lo guarde sino los otros que faltarían.
el código del bucle es el siguiente:
Private Sub asignarMateriaNotas()
Dim Bucle As Long, CtrDato As Control
DoCmd.SetWarnings False
If Nz(Me.cmbidentificacionEstudiante, "") = "" Then Exit Sub 'se verifica que hay un alumno seleccionado, si no lo hay se aborta)
'mas verificaciones aquí, antes de ejecutar el bucle para evitar campos vacíos
For Bucle = 1 To 6
Set CtrDato = Controls("cmbmateriaModulo" & Bucle)
If Not IsNull(CtrDato) Then DoCmd.RunSQL "INSERT INTO tbNotas(idEstudiante, idNivelSemestre, idCalendario, idPrograma, idMateriaModulo) VALUES(cmbidentificacionEstudiante, nombreSemestre, idCalendario, cmbidPrograma, " & CtrDato & ")"
Next Bucle
DoCmd.SetWarnings True
End Sub
Estoy utilizando el método Docmd.RunSQL porque así me guarda sin problemas, ya que si utilizo el método CurrentDb.Execute me arroja un error en tiempo de ejecución que dice se esperaba "4". entonces como con el otro método funciona ps lo dejo así.
Espero haberme echo entender y que me pueda ayudar con esto, mil gracias de antemano.
Valora esta pregunta


0