Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   modificar tablas maestro_detalle (https://www.clubdelphi.com/foros/showthread.php?t=91638)

yuyidt 23-03-2017 21:04:14

modificar tablas maestro_detalle
 
Hola buenas tardes. Presento el siguiente caso, espero me puedan ayudar.

Tengo una tabla maestro (eva_maestro), tabla detalle (eva_detalle) y una tabla temporal (eva_estudiantes)

1. En la tabla eva_maestro se guarda información referente a una evaluación (id_exa,nombre_examen,nota,fecha_inicio y fecha_final)
2. En la tabla eva_detalle se guardan las preguntas de la evaluación(id(de la pregunta),id_exama(campo que se relaciona con id_exa de eva_maestro),tipo_pregunta,pregunta,opcion1,opcion2,opcion3,opcion4,respuesta y puntos(de la pregunta)
3. En la tabla temporal se van guardando las preguntas mientras el examen aún no se guarda, una vez guardado el examen se vacía esta tabla y pasan los datos correspondientes a eva_maestro y eva_detalle(id(de la pregunta),ced_est,tipo_pregunta,pregunta,opcion1,opcion2,opcion3,opcion4,respuesta, y puntos)

//Lo que aparece en negrita son los campos de las tablas

Eso me lo guarda bien, el asunto esta que no se como hacer si quiero modificar ese examen, quizá cambiarle el nombre, las fechas, agregar o eliminar preguntas, etc.

En el formulario tengo un edit que es donde escribo el id del examen, en el evento onchange lo puse para que al escribir en el edit me aparezca automáticamente el examen si existe, si existe entonce me llena los edit del nombre, la nota, y las fechas de inicio y fin.

Codigo del boton guardar:

Código Delphi [-]
procedure TForm5.BitBtn1Click(Sender: TObject);
var
  a:integer;
  begin
    with datamodule2.FDQuery6 do
    begin
      close;
      sql.Text:='SELECT ced_est FROM eva_estudiantes WHERE ced_est=:cedes';
      ParamByName('cedes').Value:='i';
      open;
      begin
        close;
        sql.Text:='INSERT INTO eva_maestro (nombre_examen,fecha_ini,fecha_fin,nota) VALUES (:nomex,:feini,:fefin,:not)';
        ParamByName('nomex').Value:=edit1.Text;
        ParamByName('feini').value:=formatdatetime('YYYY-MM-DD',DateTimePicker1.Date);
        ParamByName('fefin').value:=formatdatetime('YYYY-MM-DD',DateTimePicker2.Date);
        Parambyname('not').Value:=combobox2.Text;
        ExecSQL;
        close;
        sql.Text:='SELECT max(id_exa) as ultimo FROM eva_maestro';
        open;
        a:=FieldByName('ultimo').AsInteger;
        close;
        sql.Text:='INSERT INTO eva_detalle (id_exama,pregunta,tipo_pregunta,Opcion1,Opcion2,Opcion3,Opcion4,respuesta) SELECT '+inttostr(a)+',pregunta,tipo_pregunta,Opcion1,Opcion2,Opcion3,Opcion4,respuesta FROM eva_estudiantes WHERE ced_est=:cedes';
        ParamByName('cedes').Value:='i';
        ExecSQL;
        close;
        sql.Text:='TRUNCATE eva_estudiantes';
        execsql;
      end;
    end;
end;

Que debería agregar para que me modifique el registro si existe?

En el botón eliminar, que debería agregar también para que me elimine el examen con sus respectivas preguntas?

Gracias de antemano

ecfisa 24-03-2017 04:03:05

Hola.
Cita:

Empezado por yuyidt (Mensaje 514638)
...
Que debería agregar para que me modifique el registro si existe?
...

Basándome en el código de tu mensaje, para modificar un registro haría algo similar a esto:
Código Delphi [-]
procedure TForm5.BitBtn1Click(Sender: TObject);
begin
  with DataModule2.FDQuery6 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE EVA_MAESTRO');
    SQL.Add('SET NOMBRE_EXAMEN = :NOMBRE_EXAMEN, FECHA_INI = :FECHA_INI,');
    SQL.Add('FECHA_FIN = :FECHA_FIN, NOTA = :NOTA');
    SQL.Add('WHERE CED_EST = :CED_EST');
    ParamByName('NOMBRE_EXAMEN').AsString := Edit1.Text;
    ParamByName('FECHA_INI').AsDate       := DateTimePicker1.Date;
    ParamByName('FECHA_FIN').AsDate       := DateTimePicker2.Date;
    ParamByName('NOTA').AsString          := ComboBox2.Text;
    ParamByName('CED_EST').AsString       := 'i';  // ¿ Codigo único / ID ?
    ExecSQL;
    ...

Saludos :)


La franja horaria es GMT +2. Ahora son las 13:10:45.

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