Access - guardar varios registros con un bucle, pero si se encuentra uno ya guardado no lo vuelva a guardar

 
Vista:
sin imagen de perfil

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

guardar varios registros con un bucle, pero si se encuentra uno ya guardado no lo vuelva a guardar

Publicado por Anonimo (3316 intervenciones) el 04/03/2023 18:00:12
Esa tabla por diseño, no debería de permitir duplicar la nota de un estudiante para la misma evaluación (si hay que cambiarla por la causa que fuera: se modifica, no se duplica)

Sigo pensando que el campo autonumérico en esa tabla solo causa y causara problemas al crear una imagen falsa (que es único).

Y si bien es único: solo lo es en ese campo
(el resto se pueden repetir un numero infinito de veces ..... y siendo los importantes son los grandes ignorados).

Si una SQL funciona con el método DoCmd.RunSQL esa misma SQL también deberá funcionar con el método CurrentDb.Execute.
Ambos métodos hacen lo mismo (ejecutar la SQL) que se diferencien en la forma de hacerlo es normal (de no ser así uno de los dos sobraría y no es el caso).

Para resolver el problema actual se pueden planificar alternativas, por ejemplo:
.- Excluyendo del bucle a los que ya existen y no deben de modificarse al ser copias fieles de los que ya están.

Una curiosidad: ¿los registros que se duplican son 'copia fiel' de los que ya estaban?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

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 18:20:26
si claro, son la misma copia, no se hace modificaciones de nada, el ejemplo sería se le están matriculando los módulos o materia a x estudiante y se mando el formulario con solo tres materias matriculadas, entonces luego se abre otra vez el formulario para matricular los módulos o materias que faltaron es decir que de 6 faltarían 3, entonces se abre el formulario y se busca el formulario como si se fueran a matricular los módulos por primera vez a ese estudiante pero ya muestra en el formulario que tiene 3 materias matriculadas, solo seleccionamos en los combos restantes las otras tres materias o dos si son dos que se van a matricular, y es que lo que sucede es que se guardan todos porque no se esta haciendo una actualización de los registros sino que se están guardando nuevamente. lo que no quiero es colocar otro botón que diga editar matricula de módulos o materias sino que en el mismo formulario de donde se mandan los datos también se anexen los dos módulos faltantes , es decir que si va a guardar los registros completos otra vez cuando encuentre uno que ya esta guardado no lo guarde sino que pase al otro y así sucesivamente hasta poder guardar los que faltan.

Pienso yo que...según lo citado "Para resolver el problema actual se pueden planificar alternativas, por ejemplo:
.- Excluyendo del bucle a los que ya existen y no deben de modificarse al ser copias fieles de los que ya están."

Al excluir del bucle los registros que ya están, ¿Cuándo ese bucle se ejecute por primera vez donde no hay datos o registros guardados igual manera los guardaría todos?, es decir ps si se escogen 5 se guardarían 5.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

guardar varios registros con un bucle, pero si se encuentra uno ya guardado no lo vuelva a guardar

Publicado por Anonimo (3316 intervenciones) el 04/03/2023 19:42:59
Estas buscando lo mas difícil por no aplicar lo que es sencillo.

Crea un índice que impida duplicar datos y no los podrá duplicar sea cual sea el método de inserción.

Dara mensajes de error indicado que no puede duplicar si se utiliza DoCmd (pero insertara los que no tiene).

Para excluir a los que ya están, habrá que verificar (en tiempo de ejecución) si esta o no en el conjunto (si existe el registro) y en el bucle se puede hacer la verificación al igual que se verifica si el valor del campo de control es un NULL (se tendrían que verificar ambas condiciones).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar