Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Actualizar campos de una Tabla cuando se actualize otra tabla (https://www.clubdelphi.com/foros/showthread.php?t=73657)

RedVenom 08-05-2011 01:09:38

Actualizar campos de una Tabla cuando se actualize otra tabla
 
Buenas tardes
Tengo un problemita se que ya lo vi resuelto en algun lado del club pero no lo puedo encontrar de nuevo, bueno mi problema es el siguiente: Tengo cuatro tablas que se llaman GRUPOS, ALUMNOS, MATERIAS Y CALIFICACIONES entonces en la tabla calificaciones guardo el ID del alumno, el ID de la materia y la calificacion de la materia, y en la tabla alumnos tengo el ID del alumno su nombre y lo relaciono con el Id de algun grupo, bueno entonces mi problema esta que en la tabla grupo tengo una columna creada para cada materia entonces lo que quisiera hacer es que segun el alumno y la materia a la que le coloque calificacion vaya sumando en la columna que le corresponde a la materia y al nombre del grupo donde corresponde el alumno en la tabla grupo se sume el valor agregado al que ya habia en esa columna de ese registro.
Espero haberme explicado y de antemano agradezco su valiosa ayuda.

RedVenom 08-05-2011 01:16:02

aqui les va un ejemplo para ser mas explicito
Luis Perez pertenece al grupo B y saco 10 en matematicas
Carlos Lopez pertenece al grupo B y saco 8 en matematicas
entonces cuando yo capture estas calificaciones en la tabla CALIFICACIONES
en la tabla GRUPOS en el registro del grupo B en el campo MATEMATICAS de esta tabla se debio haber realizado la suma de las dos calificaciones y ahora deberia estar el valor 18 en ese campo, y asi cuando de de alta otra calificacion se sume al valor que ya hay en ese campo y de igual forma si doy de alta calificaciones en la materia español se guarde en la columna correspondiente de la tabla grupos.

Caral 08-05-2011 01:18:47

Hola
No entiendo.
Saludos

RedVenom 08-05-2011 01:23:05

si creo que fue algo enredada mi explicacion pero no se me ocurre como hacerla mas clara, intentare de nuevo empezare por esta parte del problema quiero que cuando yo ponga una calificacion en una tabla esta se sume un campo de otra tabla.

Caral 08-05-2011 01:25:40

Hola
Eso lo entiendo.
Lo que no entiendo es como o por que le vas a sumar a luis y a carlos las calificaciones de matematicas, simplemente por que estan el el grupo B.
Que BD usas?.
Saludos

RedVenom 08-05-2011 01:29:16

Bueno es que realmente no son calificaciones si no puntos entonces al final deseo saber cuantos puntos saco determinado grupo en la ma teria matematicas o la que sea, bueno y estoy usando SQL Server Express.

Muy probablemente este errado en mi diseño de base de datos si tienen una sugerencia que facilite esta tarea sera bien recibida.

Espero su ayuda y de antemano se las agradezco.

Caral 08-05-2011 01:33:51

Hola
Tienes que hacer un update de la tabla calificaciones.
Recorrerla, ya que tendras varios nombres (alumnos) y guardarla.
Creo que lo logico es hacerlo de alumno en alumno, pero siempre sera con un update, salvo que se haga directamente en la tabla con un filtro.
Saludos

RedVenom 08-05-2011 01:40:50

Yo imaginaba hacerlo despues en el evento before post del dataset pero antes de eso guardar en una variable el dato de la calificacion y luego sumarlo al valor que ya hay en el campo, pero no se si se pueda y si sea lo correcto tambien lei que se podria hacer un procedimiento almacenado o en un trigger pero no tengo idea de como se hace en el SQL Server.

Caral 08-05-2011 01:43:42

Hola
Me da la impresion de que te complicas la vida un poco.
1- Quieres sumar los puntos de un grupo X.
2- Quieres guardarlos en una tabla.
Yo digo: Por que?, es imperativo guardar ese dato?.
Si tienes los datos por que no simplemente sumarlos y presentarlos sin alterar la tabla ?.
Saludos

RedVenom 08-05-2011 01:59:58

Bueno esa parte me agrada mas pero como lo haria en un reporte si quisiera un listado de mejor al peor grupo en matematicas por ejemplo.
Son cosas que me revuelven y se me complican ya que solo programo ocasionalmente.

Caral 08-05-2011 03:31:39

Hola
En realidad es una sencilla consulta sql.
Puedes hacerla para verla por pantalla o en un reporte, da igual.
Te recomiendo que veas o estudies acerca de sql, es necesario cuando se trabaja con tablas.
Saludos

RedVenom 08-05-2011 07:12:01

De verdad que estas cosas me revuelven mucho.
Bueno si lo que quiero saber es los puntos de un solo grupo si se me ocurre mas o menos como hago una consulta en la que solo tenga a los alumnos del grupo que quiero saber el puntaje, hago un recorrido por los registros y en una variable sumo todos los valores y despues le paso el parametro al reporte, bueno hasta ahi si creo saber como lograrlo pero que pasa si quiero el puntaje de cada uno de los grupos para que en el listado me salga de menor a mayor??
Ahi es donde pierdo la idea.

Caral 08-05-2011 15:49:44

Hola
Tendriamos que empezar por saber que campos contiene cada tabla.
Creo, por lo que veo que tienes que enlazar la tabla grupos con la de calificaciones, pero solo creo, no lo se sin saber cuales campos tienes.
Saludos

RedVenom 08-05-2011 18:05:37

Tengo relacionadas la tabla alumnos con la de calificaciones por un campo que se llama curp y la de materias con la de calicaciones por el campo id_m y la tabla grupos esta relacionada con la de alumnos por medio del campo id_g
la tabla grupos tiene los siguientes campos id_g, nombre, ubicacion y capacidad; la tabla alumnos tiene los siguientes campos curp, apaterno, amaterno, nombre, f_nac, edad, id_g; la tabla materias tiene los id_m, nombre, creditos, plan; la tabla calificaciones tiene los siguientes campos id_c, id_m, curp, calificacion, periodo

Caral 08-05-2011 20:50:50

Hola
Estoy haciendo un ejemplo en access, con lo que necesitas.
Dame un rato.
Saludos

RedVenom 08-05-2011 20:52:49

muchas gracias, no sabes cuanto te lo voy agradecer

Caral 08-05-2011 23:46:18

Hola
Hay algunas cosas que no tengo claro.
He hecho un pequeño programa para ver y filtrar:
Alunmos (de momento):
Por Curso, calificacion, materia.
Hay varias sentencias sql, me parece que seran ineresantes para que las analices.
Lo dejo ahi, mientras lo revisas y me dices con algo mas de exactitud que requieres.
Viendo este ejemplo podremos analizar mejor los requerimientos.
Saludos
PD: La BD es access, podras ver lo que he hecho.
Como veras todo funciona solamente con un query.

RedVenom 09-05-2011 21:50:12

Ya lo cheque y de ya te puedo agradecer las lineas de codigo y el apoyo, ya que un detalle que tenia con tus lineas me ayude para corregir mi error, pero bueno ahora volviendo al problema planteado lo que necesito es hacer un listado con la suma de todas las calificaciones de la materia matematicas de los integrantes de cada grupo osea que me ponga por ejemplo una lista donde aparezca el grupo B tuvo 180 (que seria la suma de las calificaciones de la materia matematicas de todos los integrantes de ese grupo) y que luego me aparezca el grupo C y asi susecivamente todos los grupos.
No se si fui mas claro

Caral 09-05-2011 22:52:21

Hola
Si maistro, ya casi lo hago.
Saludos

Caral 09-05-2011 23:44:23

Hola
En la parte de calificaciones hay dos combobox.
1- grupos, 2- materia.
Selecciona el grupo, selecciona la materia y presiona el boton ver resultado.
Saludos

RedVenom 10-05-2011 00:38:51

Creo que diste en el clavo pero quiero en tender que hace parte del codigo por eso deseo preguntar que hace esta parte:
Código Delphi [-]
' HAVING (((Calificaciones.id_m)= :Mat) AND ((Grupos.id_g)= :Grup)); ';
  QTemp1.Parameters[0].Value:= ComboBox8.Text;
  QTemp1.Parameters[1].Value:= ComboBox7.Text;

Ya se que el HAVING es parte del SQL del query pero deseo entender cual es su funcion porque en esa parte del codigo me pierdo.
Gracias

Caral 10-05-2011 02:29:40

Hola
Having y where son prácticamente lo mismo.
La diferencia es que si se usa un group by el where va delante y el having va despues, Claro, o uno u otro, no los dos a la vez.
Hacen esencialmente lo mismo, por lo menos asi lo veo yo.
Supongo que esa es tu duda?.
Saludos

RedVenom 10-05-2011 03:49:31

Eso suponia que hacia las veces del where, pero en la setencia no entiendo la parte de ":Mat" y ":Grup" supongo que son variables que le pasas pero de donde lo tomas?? y que funcion tiene el parameters[ ] del ADOQuery.

Caral 10-05-2011 04:12:01

Hola
El mat y el grup NO son variables, son parametros que se le dan a la sentencia sql y van precedidos por dos puntos ( : ).
Cuando uno quiere un dato en la sentencia se coloca un parametro, el nombre no importa, igual puede ser mat o pepe o grup o ana.
Yo normalmente le pongo un nombre que me guie, la puse mat, para acordarme que necesito un dato de una materia y le puse grup para acordarme que necesito un grupo.
parameters[ ] es el que le va a dar el dato que pide la sentencia sql.
Va de 0 a lo que sea.
como ves aqui:
QTemp1.Parameters[0].Value:= ComboBox8.Text;
El query (Qtemp1), Da el valor del parametro numero (0) del combobox (8) que pidio el parametro :Grup que puse en la sentencia sql.
Espero te quede mas claro.
Saludos

RedVenom 11-05-2011 03:21:16

hasta ahi voy entendiendo, pero tengo otra duda como sabes que parametro corresponde del qtemp1 correspond al :mat o al :grup de la sentencia los declaras en algun lado???

Caral 11-05-2011 03:27:42

Hola
Veamos un ejemplo mas sencillo:
Código SQL [-]
Select * from tutabla where dia = :PrimerParametro and año = :Segundoparametro and mes = :Tercerparametro
Los datos que sacaremos empiezan de cero, quiere decir que el primerparametro sera cero, el segundo uno y el tercero dos, asi:
Código Delphi [-]
TuQuery.Parameters[0].Value:= ElDato1; //PrimerParametro
TuQuery.Parameters[1].Value:= ElDato2; //Segundoparametro
TuQuery.Parameters[2].Value:= ElDato3; //Tercerparametro
Saludos

RedVenom 11-05-2011 18:04:24

Entendido y anotado ahora mi problema es que SQL Server no acepta DISTINCTROW y entonces deberia hacerlo con DISTINCT pero veo que no funciona de la misma manera.

Caral 11-05-2011 18:15:08

Hola
Efectivamente, son muy similares, pero por alguna razon, que por supuesto no se cual es, DISTINCTROW devuelve los valores con mas eficiencia que DISTINCT ya que parece que ROW suena a columna o algo asi.
Lo que he hecho en esos casos es usar conjuntamente con el DISTINCT, MAX, MIN u otro que me ayude.
Creo que le pides explicaciones a la persona equivocada, yo estoy en esto hace muy poco y no se de muchisimas cosas nada.
Saludos

RedVenom 11-05-2011 18:19:38

Te agradezco muchisimo tu ayuda y orientacion, y pues para tener muy poco en esto me parece que sabes baastante. Me has iluminado en lo que respecta la codigo de mi aplicacion, con tus explicaciones y ejemplos he resuelto muchas detalles que tenia y aclarado dudas.
De nuevo agradezco el interes en el apoyo a los que menos sabemos.


La franja horaria es GMT +2. Ahora son las 14:52:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi