Con este código que tienes siempre va a pasar por el INSERT.
Haces una búsqueda con un SELECT, realizas el Open, luego cierras y luego haces un INSERT.
Siempre va a pasar por ahí.
Código Delphi
[-]
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;
Tal vez no acabo de entender muy bien lo que quieres hacer.
Lo lógico tal vez sería hacer el SELECT y después de hacer el Open, preguntar si lo ha encontrado o no para hacer un INSERT o un UPDATE.
Algo así:
Código Delphi
[-]
FDQuery6.sql.text :='SELECT * ...'
FDQuery6.Open;
if (FDQuery6.isEmpty) then begin
....
end
else begin
...
end;
...