![]() |
Error al actualizar datos.
Hola a tod@s.
Quisiera que me ayudaran por favor a resolver un problemita que me tiene parado con un pequeño proyecto que estoy desarrollando. Antes que nada utilizo Conexión ADO y para el acceso a los datos utilizo ADOQuery. El planteamiento es el siguiente: Tengo dos tablas: Alumno Id Apellido1 Apellido2 Nombres .. .. Calificaciones NumeroPeriodoEscolar IdAlumno NotaPrimerParcial NotaSegundoParcial PromedioParciales NotaPractica NotaExamenFinal CalificacionFinal .......................... Esas dos tablas las muestro utilizando una consulta SQL en un DBGrid, dicha consulta es la siguiente:
Como podemos ver, en la tabla calificaciones se guardan las calificaciones de todos los alumnos en cada periodo. Pongo en la consulta: NumeroPeriodoEscolar = 1 para representar el primer periodo, pero dicho número irá aumentando secuencialmente. Dónde radica el problema? Bueno, sucede que al mostrar dicha consulta en un DBGrid, lo hago para que el usuario pueda cambiar datos de la tabla Calificaciones, es decir, que pueda modificar: NotaPrimerParcial, NotaSegundoParcial, NotaPractica y NotaExamenFinal. En el caso de las demás columnas, como las que pertenecen a la tabla Alumno y las que son calculadas (PromedioParciales y CalificacionFinal) les cambio la propiedad ReadOnly = True en el DBGrid. Al cambiar cualquier valor de la tabla Calificaciones me dispara un error que dice: "Información de Columna Clave insuficiente para realizar el Update o Refresh". Probé cambiando la propiedad ReadOnly = False de las columnas que apuntan a la tabla Alumno y al modificarla lo hace sin problema y sin error, es decir, sólo se presenta este error al modificar valores en la tabla Calificaciones. Si la consulta la hago sólo con la tabla Calificaciones me funciona de maravillas, pero entonces el usuario no sabrá que alumno está modificando. Probé usar campos LookUp para mostrar el Apellido1, Apellido2 y Nombre por medio a los campos Id e IdAlumno, pero no podría entonces mostrar el listado ordenado por los campos como se muestra en la consulta especificada. Espero no haber causado molestias con tanto texto, pero la verdad es que por más que traté de resumir para plantear el problema, me extendí para ser lo suficientemente explícito. Vpepen.- **************** |
Pues hasta donde yo se mi amigo, si tu RecordSet es el resultado de una consulta que involucra a más de una tabla, este recordset no podrá ser modificado.
Pero podrias armar un catálogo donde se muestre la info que necesitas y la edición del alumno sea realizada en una ventana adicional. :P Suerte |
Cita:
vpepen.- ************** |
Yo cambiaría el esquema completamente, usaría 2 Grids (uno para alumnos y otro para calificaciones), ambos con HideSelection a False.
Se formaría una relación Maestro-detalle entre ambos grids, de forma que al seleccionar un alumno, se mostrarían solo las calificaciones de ese alumno y del periodo elegido. Consulta Alumnos (Maestro)
Consulta de Calificaciones (Detalle) Cuando se hace clic en el Grid de Alumnos:
IdAlumno debería ser clave ajena (foránea, foreign key) de la tabla Alumno. Además debe tener un índice secundario por ese campo para agilizar las búsquedas. Saludos |
Cita:
Vpepen.- ************ |
La franja horaria es GMT +2. Ahora son las 22:14:36. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi