Access - error error no se puede anexar los registros-infracciones de claves

 
Vista:
sin imagen de perfil

error error no se puede anexar los registros-infracciones de claves

Publicado por victor alfonso (21 intervenciones) el 24/02/2023 23:31:31
Muy buenas tardes cordial saludo, agradecido de antemano por este espacio para resolver problemas de programación para aquellas personas que no tenemos muchos conocimientos al respecto.
estoy intentando guardar registros en una tabla en Access, utilizando una sentencia SQL, insert into.
ahora bien cuando el código se ejecuta sale un error que indica que el sistema es decid la DB que se esta creando no puede anexar los registros a la tabla.

lo que necesito es que al momento de ejecutar otro código y guardar los registros en otra tabla tbSemestre1, en ese momento se ejecute otro código (el que esta posteado aquí) que guarde parte de esos datos del registro en la tabla tbNotas.

aclaración: no conviene realizar una consulta de anexar-tabla porque esta lo que hace es que copia lo que esta en una tabla y lo pasa a la otra, pero lo que en realidad quiero lograr es que en la tabla tbNotas pueda guardar el registro para el mismo estudiante varias vecesy que en un campo idMateriaModulo me le asigne el valor de del campo que se encuentra en el formulario de envio en el campo cmbmateriaModulo1 y al segundo registro cuando lo guarde asigne el valor en el campo idMAteriaModulo pero del segundo registro que seria del mismo estudiante del campo del formulario cmbmateriaModulo2.

espero hacerme entender.
comparto el código utilizado el sub Private Sub asignarMateriaNotas()

Private Sub asignarMateriaNotas()
Dim SQL As String
Dim SQL2 As String
Dim SQL3 As String
Dim SQL4 As String
Dim SQL5 As String
Dim SQL6 As String
'If Not IsNull(Me.cmbmateriaModulo1) Then
If (IsNull(DLookup("idEstudiante", "tbNotas", "idEstudiante = " & Me.cmbidentificacionEstudiante.Value))) Then
SQL = "INSERT INTO tbNotas(idEstudiante, idNivelSemestre, idCalendario, idPrograma, idMateriaModulo)" _
& "VALUES(cmbidentificacionEstudiante, nombreSemestre, idCalendario, cmbidPrograma, cmbmateriaModulo1)"
DoCmd.RunSQL SQL
MsgBox "ya monto el primero en notas"
End If
'End If
'If Not IsNull(Me.cmbmateriaModulo2) Then
If (Not IsNull(DLookup("idEstudiante", "tbNotas", "idEstudiante = " & Me.cmbidentificacionEstudiante.Value))) Then
SQL2 = "INSERT INTO tbNotas(idEstudiante, idNivelSemestre, idCalendario, idPrograma, idMateriaModulo)" _
& "VALUES(cmbidentificacionEstudiante.Value, nombreSemestre, idCalendario, cmbidPrograma, cmbmateriaModulo2)"
DoCmd.RunSQL SQL2
MsgBox "ya monto el segundo en notas"
End If
'End If
'If Not IsNull(Me.cmbmateriaModulo3) Then
If (Not IsNull(DLookup("idEstudiante", "tbNotas", "idEstudiante = " & Me.cmbidentificacionEstudiante))) Then
SQL3 = "INSERT INTO tbNotas(idEstudiante, idNivelSemestre, idCalendario, idPrograma, idMateriaModulo)" _
& "VALUES(cmbidentificacionEstudiante, nombreSemestre, idCalendario, cmbidPrograma, cmbmateriaModulo3);"
DoCmd.RunSQL SQL3
MsgBox "ya monto el tercero en notas"
End If
'End If
' If Not IsNull(Me.cmbmateriaModulo4) Then
If (Not IsNull(DLookup("idEstudiante", "tbNotas", "idEstudiante = " & Me.cmbidentificacionEstudiante))) Then
SQL4 = "INSERT INTO tbNotas(idEstudiante, idNivelSemestre, idCalendario, idPrograma, idMateriaModulo)" _
& "VALUES(cmbidentificacionEstudiante, nombreSemestre, idCalendario, cmbidPrograma, cmbmateriaModulo4);"
DoCmd.RunSQL SQL4
MsgBox "ya monto el cuarto en notas"
End If
'End If
' If Not IsNull(Me.cmbmateriaModulo5) Then
If (Not IsNull(DLookup("idEstudiante", "tbNotas", "idEstudiante = " & Me.cmbidentificacionEstudiante))) Then
SQL5 = "INSERT INTO tbNotas(idEstudiante, idNivelSemestre, idCalendario, idPrograma, idMateriaModulo)" _
& "VALUES(cmbidentificacionEstudiante, nombreSemestre, idCalendario, cmbidPrograma, cmbmateriaModulo5);"
DoCmd.RunSQL SQL5
MsgBox "ya monto el quinto en notas"
End If
'End If
' If Not IsNull(Me.cmbmateriaModulo6) Then
If (Not IsNull(DLookup("idEstudiante", "tbNotas", "idEstudiante = " & Me.cmbidentificacionEstudiante))) Then
SQL6 = "INSERT INTO tbNotas(idEstudiante, idNivelSemestre, idCalendario, idPrograma, idMateriaModulo)" _
& "VALUES(cmbidentificacionEstudiante, nombreSemestre, idCalendario, cmbidPrograma, cmbmateriaModulo6);"
DoCmd.RunSQL SQL6
MsgBox "ya monto el sexto en notas"
End If
'End If
End Sub


Peticion; Si esto se puede simplificar a un bucle y que me permita guardar varias veces el registro del mismo estudiante pero teniendo en cuenta que el segundo registro guardaria en la columna idMateriaModulo en la tabla tbNotas el valor del segundo elemento cmbmateriaModulo2. en el formulario de envío y así sucesivamente de acuerdo a la cantidad de módulos por ejemplo, es decir que si hay seis módulos en el formulario de envío deben guardarse 6 registros al mismo estudiante pero con diferentes módulos.


adjunto imagenes del error y diseño de las tablas

error-no-se-puede-anexar-los-registros-infracciones-de-claves
esta-es-la-tabla-tbNotas-y-sus-campos
me-manda-el-error-a-ese-codigo
tablas-para-insertar-los-registros
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

error error no se puede anexar los registros-infracciones de claves

Publicado por Anonimo (3320 intervenciones) el 25/02/2023 15:31:55
Amplia explicación veamos si se puede cumplir con la petición.

El error creo que proviene de la posible existencia de una relación o de una condición, pues en el punto que falla (a diferencia del resto de las SQLs) se ejecuta solo si el dato no existe ... (en base al pantallazo con el error).

.- Tras un análisis comparativo se aprecia que las SQLs solo varían en el nombre de un objeto (al que se supone un control del formulario).
.- Que la condición es común a todas (se basa en la existencia del Id de estudiante) y dado que se le considera indispensable si no existe ¿para que continuar el proceso?.
.- Solo es indispensable que el único dato que varia tenga valor (que no es lo mismo que un NULL, ojo al dato)

En base a ello esta es la propuesta:

1
2
3
4
5
6
7
8
Private Sub asignarMateriaNotas()
Dim Bucle As Long, CtrDato As Control
If DCount("*", "tbNotas", "idEstudiante = " & Me.cmbidentificacionEstudiante) Then Exit Sub
For Bucle = 1 To 6
    Set CtrDato = Controls("cmbmateriaModulo" & Bucle)
    If Not IsNull(CtrDato) Then CurrentDb.Execute "INSERT INTO tbNotas(idEstudiante, idNivelSemestre, idCalendario, idPrograma, idMateriaModulo) VALUES(cmbidentificacionEstudiante, nombreSemestre, idCalendario, cmbidPrograma, " & Me.CtrDato & ")"
    Next Bucle
End Sub

En lugar de utilizar para la inserción el método 'DoCmd' se utiliza el 'CurrentDb.Execute' que entre otras virtudes tiene la de que no emite mensajes.

Se ha respetado la SQL original a la que se le cambia en tiempo de ejecución la referencia al control del formulario.
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

error error no se puede anexar los registros-infracciones de claves

Publicado por victor alfonso (21 intervenciones) el 25/02/2023 16:37:11
Muy buenos días, en primera instancia agradezco su aporte a la consulta realizada por mi parte.
al utilizar el código que me ha suministrado y al ejecutarlo me arroja un error de compilación y dice que no se ha encontrado el método o dato miembro me.CtrDato y resalta solo la palabra CtrDato en azul.

Private Sub asignarMateriaNotas()
Dim Bucle As Long, CtrDato As Control
If DCount("*", "tbNotas", "idEstudiante = " & Me.cmbidentificacionEstudiante) Then Exit Sub
For Bucle = 1 To 6
Set CtrDato = Controls("cmbmateriaModulo" & Bucle)
If Not IsNull(CtrDato) Then CurrentDb.Execute "INSERT INTO tbNotas(idEstudiante, idNivelSemestre, idCalendario, idPrograma, idMateriaModulo) VALUES(cmbidentificacionEstudiante, nombreSemestre, idCalendario, cmbidPrograma, " & Me.CtrDato & ")"
Next Bucle
End Sub
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

error error no se puede anexar los registros-infracciones de claves

Publicado por Anonimo (3320 intervenciones) el 25/02/2023 16:53:13
Elimina lo de 'Me." y que quede solo CtrDato (por defecto ya asume que pertenece al formulario actual), es un Bug (en algún momento se utilizo el nombre en lugar de la variable para verificar detalles).

No lo experimentes en la base real, hazlo en una copia (por si el planteamiento y tratamiento de los datos no es el correcto).
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

error error no se puede anexar los registros-infracciones de claves

Publicado por victor alfonso (21 intervenciones) el 25/02/2023 17:04:40
hola de nuevo, ahora sale un mensaje de error 3061 en tiempo de ejecución, dice :
pocos parámetros, se esperaba 4,

adjunto imagen
error-3061
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

error error no se puede anexar los registros-infracciones de claves

Publicado por Anonimo (3320 intervenciones) el 25/02/2023 18:55:09
Desde este lado no se puede verificar ese problema, tendrás que localizarlo en/con los datos reales.

En la primera exposición estan estos datos que se combinan por parejas:
(idEstudiante, idNivelSemestre, idCalendario, idPrograma, idMateriaModulo)" _
& "VALUES(cmbidentificacionEstudiante, nombreSemestre, idCalendario, cmbidPrograma, cmbmateriaModulo3)

-Destino- -- Dato--
idEstudiante ===> cmbidentificacionEstudiante
idNivelSemestre ===> nombreSemestre
idCalendario ===> idCalendario
idPrograma ==> cmbidPrograma
idMateriaModulo) ===> cmbmateriaModulo3 (se modifica a ===> CtrDato )

Hay cinco y se le asignan cinco, si alguno no tiene valor no lo cuenta y se queda en cuatro (el problema seria de datos, uno es NULL).

Con los datos reales y cuando se produzca el error (se detendrá el código) click en 'DEPURAR' y al pasar el cursor sobre los campos de 'Values' debería mostrar su contenido (basta detener un momento el cursor sobre el campo).

Y si todos tiene valor habrá que verificar si los nombres son correctos así como sus tipos.

Personalmente acostumbro a ser mas preciso al adjudicar los datos verificando que se les adjudica el tipo correcto,.
Si el valor en CtrDato fuera un valor de texto (asumí que era numérico) quizás esa parte necesite una ligera modificación pues no es el dato real (que tendrá un tipo definido) dado que CtrDato tendrá que asumir el dato de cualquier campo su tipo es: 'Variant'

En definitiva si el control al que emula CtrDato es de tipo texto se modifica la asignación y problema resuelto.

...... cmbidPrograma, " & CtrDato & ")" ====>>>> .... cmbidPrograma, '" & CtrDato & "')"

Para que se aprecien las comillas simples (los indicadores de texto)
1
...... cmbidPrograma, " & CtrDato & ")"  ====>>>>   .... cmbidPrograma, '" & CtrDato & "')"
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

error error no se puede anexar los registros-infracciones de claves

Publicado por victor alfonso (21 intervenciones) el 25/02/2023 23:29:27
Nuevamente, de antemano siento mucho el ser insistente pero no consigo que funcione el código.
todavía sigue saliendo el mismo error 3061 en tiempo de ejecución donde dice pocos parámetros se esperaba 4.

ya he cambiado las instrucciones de losa datos según sus orientaciones y nada, adjunto imágenes de los resultados obtenidos al pasar el mouse por cada elemento una vez detenido el código en depuración.

Bucle1
CtrDato4
otro-CtrDato4
Sin-titulo
Sin-titulo2
Sin-titulo3


La verdad no se que estará mal asignado, espero su compresión y ayuda
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

error error no se puede anexar los registros-infracciones de claves

Publicado por Anonimo (3320 intervenciones) el 26/02/2023 02:32:20
Solo he visto que esta en la primera iteración del bucle (bucle =1) el resto es siempre el valor que se supone hay en el objeto 'cmbmateriaModulo1' y que en el siguiente paso seria 'cmbmateriaModulo2' ... etc. utilizando una variable [CtrDato] que contiene un (4)

¿Es correcto ese valor?, si es un numero no debería dar problemas ni tener comillas (la primera versión) pero ¿Qué valores tienen el resto de los datos?:

El primero deberá existir porque se verifica que es igual a 'Me.cmbidentificacionEstudiante' y el ultimo porque es 'cmbmateriaModulo1' pero ¿y el resto?.

Copia la linea (duplicala) y a la original (o a una de ellas) comentala, a la otra modifica esta parte y ejecuta para ver que resultado da y tambien que datos del error nos aporta:

Antes
1
If Not IsNull(CtrDato) Then CurrentDb.Execute "INSERT INTO tbNotas .......


Después:
1
If Not IsNull(CtrDato) Then Docmd.RunSQL "INSERT INTO tbNotas .....

Hay unas ligeras diferencias entre ambos métodos y considero que para esto es mas adecuado CurrentDb que DoCmd.

La tarea pendiente es:
.- Verificar que los datos tienen valores adecuados

cmbidentificacionEstudiante ===> ¿su valor es ....?:
nombreSemestre ===> ¿su valor es ....?:
idCalendario ===> ¿su valor es ....?:
cmbidPrograma ===> ¿su valor es ....?:
cmbmateriaModulo1 ===> Su alias es (CtrDato) y el/su valor en el paso uno es cuatro (4) ¿es el esperado?

Se supone que antes funcionaba bien y el cambio no debería afectar, la duda esta en que sea capaz de obtener los datos al cambiar el método de ejecución (y eso es fácil verificarlo cambiando al método anterior: [Docmd.RunSQL] y sí, aceptando los mensajes si aun están activos).

P.D.
He vuelto a leer el post inicial y me surge la duda si el codigo posteado llego a funcionar.

Pregunta basica: ¿si intentas añadir los datos directamente en la tabla lo permite?.

No sea que tengamos mas de un problema (el original que no permite insertar datos) y que pueda haber alguna incompatibilidad con la version reducida.

Intenta insertar un par de registros directamente en la tabla (los que insertarían los bucles uno y dos) y comenta los resultados por si ese es el primer problema a resolver.
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

error error no se puede anexar los registros-infracciones de claves

Publicado por victor alfonso (21 intervenciones) el 26/02/2023 17:52:14
Al cambiar la linea de código y utilizar el método Docmd.RunSQL, sale el error de que el sistema no deja anexar el registro y relaciona dentro delas causas una que es; no se anexaron 1 registro por infracción de claves.

En relación a que si el codigo posteado inicialmente deja insertar los registros en la tabla tbNotas? Si claro, si deja insertar los registros, pero funciona solo si deshabilito la opción de exigir integridad referencial en la relación existente de la tabla tbNotas y tbEstudiante, ya que en la tabla tbnotas existe un campo que relaciona el idEStudiante, ademas de eliminar la relación existente entre estas tablas tambien probé cambiando el tipo de campo combinado de idEstudiante en la tabla tbNotas por un campo caja de texto, así si me deja guardar los registros solo que en el campo de idestudiante de la tabla tbNotas me guarda es un numero 12, que seria el valor que toma del control cmbidentificacionEstudiante del formulario de envío.
y no se como cambiar ese numero 12 por el numero de identificación del estudiante en el campo al abrir la tabla, porque lo he echo es cuando eso se presenta en campo combinado que al guardar el registro se guarda es el índice del valor o elemento de la opción del cuadro combinado, pero en un cuadro de texto no es igual. ¿Como se hace alli?
comparto imágenes del proceso de guardado de registros con el código largo, el que esta posteado al inicio,

aqui-para-anexar-el-registro-2
aqui-ya-va-por-el-cuarto-registro
cambio-campo-de-cuadro-combinado-a-cuadro-de-texto
despues-de-montar-todos-los-registros-satisfactorio
montando-el-primer-registro
montando-el-segundo-registro
montando-el-tercer-registro
registros-guardados-soloque-tambien-los-vacios
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

error error no se puede anexar los registros-infracciones de claves

Publicado por Anonimo (3320 intervenciones) el 26/02/2023 21:00:33
Primero hay que resolver el problema para mantener la integridad y es sencillo:

En las relaciones dependientes (1 <==> N) que tienen activada la integridad, primero se ha de crear el registro de la tabla (1) y tras ello ya se pueden crear los de la tabla (N) (Access en las relaciones integrales exige que los los hijos han de nacer 'en el matrimonio').

El problema real:
El dato que hace referencia al alumno es incorrecto (si el combo que se esta utilizando es el de la tabla 'Notas', no es adecuado ni tiene sentido: solo aparecen los datos de quienes tengan notas o futuras notas), que se verifique su existencia en la tabla alumnos no hace nada.

Para crear notas para los alumnos el ID del alumno ha de tomarse de la tabla [alumnos] (un combo con el id de su matricula o el id de matricula + el nombre).
Si se utiliza la tabla [notas] solo admitirá 'repetidores' y anteriores ya existentes.

Problema a solucionar: no repetir las notas
Debería crearse un índice en la tabla notas que identifique como única a la combinación de (estudiante + modulo + curso + [mes o trimestre o semestre o ..]).

En la tabla NOTAS el dato [IdEstudiante] que sea un simple numero (eliminar lo que hay en la pestaña 'búsqueda')
SI se desea ver las notas de un estudiante hacerlo con la tabla Estudiantes (o la que se relacione con ese campo).
Un click en el (+) que aparece a su izquierda y las notas del estudiante a la vista (y así se ahorra crear un formulario y subformulario, es cutre: pero funciona).

No es necesario verificar si el alumno esta en la tabla alumnos (si no lo esta: no sale en el combo)

Veamos si esto funciona:
El origen de la fila del combo utilizado para seleccionar alumno ha de salir de la tabla estudiantes:
1
Select IdEstudiante Form [aqui la tabla estudiantes] Order by IdEstudiante;

Podemos reutilizar el mismo combo y nombre (solo hay que modificar su origen de la fila).

Hay que verificar que no existe en la tabla notas el registro a crear (para no duplicarlo) y se puede hacer de dos formas una la legal y otra .. la menos legal (utilizando el método Execute, si hay un índice no repetirá las notas ni dará error, simplemente no crea el registro pues ya existe).

Nota:
Los dos campos que has señalado en la ultima imagen son:
El ID (que es autonumerico y se crea solo)
El de relación con la tabla estudiantes que devuelve un valor (el desconocido 12) que supongo es el numero de fila (oculto) en lugar del ID del estudiante, pero no nos sirve ni uno ni el otro (solo están los estudiantes que ya tienen notas) le faltan los nuevos alumnos.

1
2
3
4
5
6
7
8
9
Private Sub asignarMateriaNotas()
Dim Bucle As Long, CtrDato As Control
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 CurrentDb.Execute "INSERT INTO tbNotas(idEstudiante, idNivelSemestre, idCalendario, idPrograma, idMateriaModulo) VALUES(cmbidentificacionEstudiante, nombreSemestre, idCalendario, cmbidPrograma, " & CtrDato & ")"
    Next Bucle
End Sub

Antes de ejecutar el bucle de inserción, lo correcto seria que se verificase si todos los combos tiene un elemento seleccionado y de no tenerlo enviar el foco al objeto y abortar. un ejemplo:

1
If Nz(Me.nombreSemestre, "") ="" Then Me.nombreSemestre.SetFocus :Exit Sub

El resto: igual, solo hay que cambiar el nombre del objeto
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

error error no se puede anexar los registros-infracciones de claves

Publicado por victor alfonso (21 intervenciones) el 27/02/2023 16:46:48
Ya he logrado solucionar el inconveniente para que se pudieran guardar los registros en la tabla tbNotas con la identificación del estudiante, tocó corregir y asignar nuevamente el tipo de dato en el campo idEstudiante en todas las tablas donde se relacionaba. y asi segun sus orientaciiones en el campo de idEstudiante y en los formularios que todos lo tomaran de la tabla tbEstudiantes y eso corrigio el problema, ademas de un ligero cambio en el metodo utilizando Docmd.RunSQL.

ahora bien en la tabla tbNotas va todo bien al guardar los registros, pero ahora en la tabla tbSemestre1 actualiza la informacion del registro seleccionado pero resulta que me duplica el registro, no se porque esta sucediendo eso ahora porque antes no pasaba.

adjunto imagenes
tabla-notas
tabla-semestre-1

en esta ultima se ve el registro duplicado...
Aclaro en esta tabla ya existen los registros solo que se hace una consulta para actualizarlos es decir matricularle los modulos que corresponden, pero al momento que el código se ejecuta y guarda los cambios de actualización, al abrir la tabla tbSemestre1 están el registro duplicado.

este es el codigo para actualizar el registro pero como menciono al guardar el registro después aparece duplicado

Private Sub MatricularModulos1()
Dim NN As Long, ABC As Control
DoCmd.SetWarnings False
' On Error GoTo ManipulaError
If IsNull(Me.cmbidentificacionEstudiante) Then MsgBox "¡Atención!" & vbCrLf & "" & vbCrLf & "Se debe definir la identificación del estudiante para realizar el proceso. Revise los campos e inténtelo nuevamente.", vbInformation, "Institución CENFORT": Exit Sub
For NN = 1 To 6
Set ABC = Me.Controls("cmbmateriaModulo" & NN)
If Nz(ABC, "") <> "" Then CurrentDb.Execute "UPDATE tbSemestre1 SET materiaModulo" & NN & " = '" & Replace(ABC, "'", "''") & "' WHERE idEstudiante = " & Me.cmbidentificacionEstudiante
Next NN

MsgBox "¡Atención!" & vbCrLf & "" & vbCrLf & "Los módulos de formación han sido matriculados satisfactoriamente al estudiante en su respectiva formación.", vbInformation, "Institución CENFORT"

DoCmd.Close
'ManipulaError:
' MsgBox "El número de documento de identidad ingresado no corresponde a registros de estudiantes matrículados.", vbInformation, "Atencion"
DoCmd.SetWarnings True
End Sub
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

error error no se puede anexar los registros-infracciones de claves

Publicado por Anonimo (3320 intervenciones) el 27/02/2023 22:51:25
Para evitar que se repitan registros, lo correcto: crear un índice

En la vista de la tabla en su modo diseño se puede ver el icono que permite crearlos, (es el que tiene el símbolo del rayo), si la tabla no esta protegida, aceptara las repeticiones de registros (tantas como se le quieran añadir).

Al respecto de la consulta de actualización de la tabla [tbSemestre1] , ¿Dónde están los campos: [materiaModulo1], [materiaModulo2], .., [materiaModulo6]?

En la imagen no se ven esos campos a las que se les quiere asignar el valor de [ABC] tras sustituirle una comilla simple por dos.

Por simple curiosidad ¿para que se utiliza o utilizará el campo [IdSemestre]?.
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

error error no se puede anexar los registros-infracciones de claves

Publicado por victor alfonso (21 intervenciones) el 27/02/2023 23:59:10
El campo idSemestre es para identificar que ese estudiante si esta matriculado en el primer semestre o segundo semestre o tercer semestre con sus respectivos módulos de formación además del programa y en que calendario.
este valor se le asigna al campo idSemestre cuando al estudiante se le realiza el proceso de matricula inicialmente y ese registro ps se manda a que se guarde también en la tabla tbSemestre1, cuando al estudiante se le renueva la matricula para el segundo semestre, al ejecutar el código ps se guardara el registro en la tabla tbSemestre2 y así sucesivamente al renovar para tercer semestre.

le comparto imágenes donde se puede apreciar la existencia de los campos [materiaModulos] 1,2,3,.... tanto en tabla como en vista diseño

y le comparto una imagen con la creación de el índice relacionando los campos, pero todavía se presenta que al actualizar el registro en tbSemestre1 actualiza el que ya esta pero me ingresar otro registro duplicado completo como el actualizado.
campos-de-la-tabla-tbSemestre-1
campos-materia-modulos
indice
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

error error no se puede anexar los registros-infracciones de claves

Publicado por Anonimo (3320 intervenciones) el 28/02/2023 01:50:54
Por lo que se aprecia en el diseño de la tabla [tbSemestre1] el campo [idSemestre] que es autonumerico, solo se representa a si mismo y al utilizarlo en el índice [estudiante] lo destroza por completo al hacer a cada registro (el mismo registro duplicado una y cien veces) diferente de si mismo y por lo tanto de cualquier otro.

Lo dejo en este punto, pues solo se ve una parte del conjunto pero creo que una revisión del proyecto original adaptado a los datos reales, seria una idea a tener en cuenta.

Por ello el interrogante sobre la utilidad que tiene ese campo autonúmerico que solo se representa a si mismo y que solo valdría para denotar antigüedad (establecer un orden entre iguales) pero en esa tabla no debería haber iguales.
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

error error no se puede anexar los registros-infracciones de claves

Publicado por victor alfonso (21 intervenciones) el 26/02/2023 18:49:40
con el bucle for tambien funciona utilizando el metodo Docmd.RunSQL.
guarda los registros y solo hasta los que tienen datos los vacíos o Null no los almacena, esta bien, aunque el inconveniente es que en el campo de idEstudiante guarda es el numero 12 como referencia del dato de numero de identificación del cmbidentificacionEstudiante del formulario. y aclarando que el campo de idEstudiante de la tabla tbNotas ya no es un cuadro combinado sino un cuadro de texto, soloasi deja guardar registros y sin exigir la integridad referencial entre la tabla tbNotas y la tabla tbEstudiantes.

adjunto imagen
con-el-bucle-for-con-Docmd.RunSQL
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