Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   mostrar solo un registro cuyo id y cédula sean las mismas (https://www.clubdelphi.com/foros/showthread.php?t=91634)

yuyidt 23-03-2017 15:44:14

mostrar solo un registro cuyo id y cédula sean las mismas
 
Hola amigos buenos días. Tengo una pequeña duda, estoy haciendo un proyecto tipo moodle pero en delphi. Tengo el modulo de calificaciones donde se muestra un grid con el id del examen, cédula de los que participaron en dicho examen, nombre y apellido y la suma de la nota total.

- Tengo un form con un dbgrid, y un combobox,
el dbgrid conectado a 1 query con 2 tablas relacionadas, pero solo muestra en el dgbrid los campos, id:exa-cedula-nombre-apellido-nota
Código SQL [-]
SELECT
resp_calif.id_exad,eva_maestro.nombre_examen,resp_calif.cedula,resp_calif.pregunta,resp_calif.respue  sta,datos_personales.nombre,datos_personales.apellido,resp_calif.nota 
FROM
resp_calif
INNER JOIN datos_personales ON datos_personales.cedula = resp_calif.cedula
INNER JOIN eva_maestro ON eva_maestro.id_exa = resp_calif.id_exad

- las tablas son las siguientes:
resp_calif cuyos campos son (cedula-id_exad-pregunta-respuesta-puntos-nota), en esta tabla se encuentran todas las preguntas y respuestas de todos los usuarios, con los puntos que saco en la pregunta y el id del examen al que pertenece la pregunta (ejemplo, la cedula 123 respondió 5 preguntas del examen 1, lo que quiere decir que aparecerán 5 registros de esa cédula)

- en el combobox se muestran los id_exa(examenes), cuando selecciono el examen me muestra todos los usuarios que participaron en ese examen, lo que quiero que aparezca aquí es: la cédula 123 tiene 5 preguntas en el examen 1 pero que me aparezca un solo registro(es decir que solo me diga que esa cédula participo en ese examen y su nota es 20 por ejemplo).

- en el evento onchange del combobox tengo el siguiente código:
Código Delphi [-]
procedure TForm4.ComboBox1Change(Sender: TObject);
begin
with datamodule2.FDQuery10 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT resp_calif.id_exad,resp_calif.cedula,datos_personales.nombre,datos_personales.apellido,resp_calif.no  ta,eva_maestro.nombre_examen');
SQL.Add('FROM datos_personales, resp_calif, eva_maestro');
SQL.Add('WHERE datos_personales.cedula = resp_calif.cedula');
SQL.Add('AND eva_maestro.id_exa = resp_calif.id_exad');
SQL.Add('AND resp_calif.id_exad = :idexd');
ParamByName('idexd').AsString:= ComboBox1.Text;
Open;
end;
end;

pero eso me muestra la misma cédula con el mismo id varias veces(depende de la cantidad de preguntas que haya respondido en ese examen, si fueron 5, me aparecen 5 registros). Solo quiero que me diga 1 registro(para saber que la cédula participo en el examen)) Como puedo hacerlo? me ayudan por favor?

Young 23-03-2017 19:08:26

Hola, me parece que la solución es agregar DISTINCT después del SELECT, esto eliminará los registros duplicados del resultado de la consulta.

Código SQL [-]
SELECT DISTINCT resp_calif.id_exad,eva_maestro.nombre_examen,resp_calif.cedula,resp_calif.pregunta,resp_calif.respue  sta,datos_personales.nombre,datos_personales.apellido,resp_calif.nota 
FROM
resp_calif
INNER JOIN datos_personales ON datos_personales.cedula = resp_calif.cedula
INNER JOIN eva_maestro ON eva_maestro.id_exa = resp_calif.id_exad

Saludos.

yuyidt 23-03-2017 20:25:39

Gracias young
 
Estaba por escribir que ya lo había hecho, le agregue el distinct y cambie la consulta del query similar a la consulta de combobox.change. Gracias


La franja horaria es GMT +2. Ahora son las 08:31:02.

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