Duda: No ver un dato si ya fue ingresado

Hola, ¿Cómo estas? Te comento algo haber si me podes dar una mano
Tengo una duda en como resolver lo siguiente: (Visual Basic 6 / SQL Server 2005)
Tengo una ventana para que alumnos de una institución se inscriban a sus materias para cursarlas.
Tengo una Tabla "Materias" de donde utilizo el Id_Materias y Nombre_materia y el año
Tengo una tabla "Alumno" de donde estoy utilizando el Id_legajo
Tengo una tabla Insc_Materias en donde voy a guardar los datos de materias a las cuales están inscrpito los alumnos.
Lleno un list con las materias que puede anotarse (abro las que el año es igual a 1)
Hasta ahí todo bien, las puedo guardar bien.
Ahora es donde me entre a perder.
¿Cómo hago para que si el alumno ya se inscribió no me la muestre o permita más esa materia?
¿Debería agregar un campo más a la tabla por ejemplo "Hablitar" (1 o 0)? ¿En qué tabla iría, la de inscripciones o la de materias?
*Otra duda que me surgio, por ejemplo un almuno se anota a Matematica se guarda en la tabla el un nuevo id_inscripcion (autonumerico), el id_legajo, el id_carrera y el  id_materia = 2, supongamos que el programa esta mal y le permite al mismo alumno seleccionar nuevamente matematica. ¿mediante codigo, puedo hacer un control para que no me ingrese los mismos datos? El unico campo que no permite repetidos es el id_inscripcion ¿como podria hacer un control?
Espero que me haya expresado bien y se entiendan mis dudas, desde ya te agradezco mucho, te dejo saludos.
Una ultima duda yo declaro 2 recordset un rslegajo con el que compruebo si el alumno existe y otro para actualizar los datos de las materias, no se si es conveniente con un solo recordset primero comprobar el legajo y luego cerrarlo y después utilizarlo para actualizar los datos, o no hay problema de usar dos (o más ) mientras que después de ocuparlos los vacíe, es una duda media tonta que tengo, por que a mi me resulta más comprensible cuando uso un recorset con un nombre en particular para cada cosa.
Bueno muchísimas gracias nuevamente, disculpa si me excedí demasiado.

2 Respuestas

Respuesta
1
Lo primero es que vos en la lista mostrás las materias en las que puede anotarse
Pero no me decís si antes elegís un legajo, voy a suponer que si antes elegiste un legajo
tienes que darle las 2 chances, primero que mire en un list las materias que ya se anoto, y en la otra podes poner todas las materias independientemente si se haya anotado o no, PERO A ESA LISTA O CUANDO DAS EL ALTA tienes que revisar si la materia ya esta cargada y mandas un mensaje.
Algo más complejo es que cuando seleccione la materia del conjunto, se la sombrees en la otra lista para que vea que la cargo o al hacer click en la lista ahí mandas la consulta de control que ya la tiene registrada.
SI EL PROGRAMA TE PERMITE CARGAS 2 DATOS IGUALES, la base de datos esta mal echa y la tienes que volver a rehacer porque no te lo tiene que permitir.
Después queda en vos hacer todos los controles para resolver esa situación.
Con respecto al recordset, yo los uso igual lo que hago es que apenas se termine de usar cerrarlos.
Porque en algunas consultas vas a usar muchos y no es por los nombres sino por la carga en memoria del sistema
saludos
leandro
Hola muchísimas gracias por responderme tan rapido.
Mira sigo con la duda de como controlar en la consulta de SQL si ya están los datos
Te planteo nuevamente haber si me explico mejor.
rs.open Select * FROM Materias Where id_carrera=(por el legajo se el Id_carrera-) Ahi cargo todas las materias que tiene la carrera de ese alumno. Ejmplo
Nombre de las carreras: materias anotadas:
Matematica I      Ok->                                                Matematica I
Matematica II
Ingles I Ok-> Ingles I
Contabilidad Básica
Contabilidad Avanzada
...
Ahí entonces se guardaría en la tabla de inscripciones matemática 1 e ingles 1, supongamos que el usuario cierra sesión y en unos meses quiere anotarse a matemática 2 e ingles 2.
Lo que no quiero es que en el List "Nombre de las carreras" No vuelva a mostrar Matemática 1 e Ingles 1.
rs.open las materias que tiene ese legajo/carrera pero que no estén en la tabla Insc_materia ¿Me podrías dar una mano para hacer una consulta algo así?
Ahora me surgió una duda si estoy armando mal la tabla de inscripciones (por que me permite valores repetidos), te comento como la planté (soy bastante novato en esto)
Id_inscripcion (autonumeric)
Id_legajo (int) 
Id_carrera(int)
id_materia(int)
El id_legajo podria tener varios legajos iguales ya q el alumno 01 podria estar anotado 10 veces en materias distintas Id_legao=01 id_materia05, Id_legao=01 id_materia08.. y asi, lo mismo el campo id_materia podria tener id_materia=08 id_legajo=01,id_materia=08  id_legajo=07. ¿Estoy planteando mal mi tabla?
Bueno muchísimas gracias por haberme respondido, te dejo un saludo, espero que cuando tengas algún tiempo veas si me puedes orientar
Pd:(el legajo)
Tengo unos Textbox para que se ingresen el legajo y contraseña si el usuario existe abre la ventana y el legajo lo guardo en una variable para luego actualizar ese alumno.
Para sacar las materias en las que esta anotada, o tuvo que aprobarlas o las tienes que pasar como materias finalizadas... eso depende de tu sistema
porque si tienes materias que son correlativas, quiero decir si no doy matemática 1, no puedo incribirme en matemática 2 lo tienes que tener previsto.
Por el planteamiento de tu base, ojo frena la programación y dale especial atención a normalizar la base, no podes hacer un programa sin antes normalizar la base porque te pasan estas cosas por ejemplo id_carrera en la tabla del ejemplo va a estar repetida mil veces y creo a mi entender que con el id. Materia se ha que carrera pertenece.
Fíjate la base antes de seguir.
OK, muchas gracias, ahí veo como hago.
Lo de las correlativas, tengo más o menos armado como hacer, no lo anote acá, por que era a modo de ejemplo lo que me interesaba era como no ver las materias en las que e alumno se anotó, muchísimas gracias por responder, después cualquier duda te consulto nuevamente
Respuesta
1
Lo que debes hacer es que al alumno insccriba la materia, antes de grabarla, vas a esa tabla y consulta si esa maetria para ese alumno ya esta inscrita, si lo esta le muestras un mensaje que no la puede inscribir pues ya esta inscrita.
Con respecto a lo de los recordset si esta bien que utilices más 1 recordset, lo que debes tener en cuenta es no excederte en ellos pues eso esta en la memoria del PC y si llegas a llenarla vas a tener problemas en tu aplicación
Hola muchas gracias por responder, la verdad es que me saltaron unas cosas que me complicaron más, así que cambie varias cosas y ahora estoy con otros líos.
Te agradezco mucho por tu respuesta, saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas