Ademas de lo que te dice Daniel, tampoco es necesario que interpretes la fecha de la manera que lo estas haciendo (copiando de a partes del string)
Una forma mucho mas elegante y efectiva de hacerlo:
Código Delphi
[-]
uses
DateUtils;
...
var
AYear, AMonth, ADay: Word;
begin
DecodeDate(FieldByName('Fec_Nacim').AsDate, AYear, AMonth, ADay)
end;
Aunque evidentemente esto solamente te funcionará si el campo en cuestion es de tipo fecha
Por otro lado
Código Delphi
[-]
FESMPMD1.Query3.ExecSQL;
FESMPMD1.Query3.Active;
FESMPMD1.Query3.Open;
FESMPMD1.Query3.First;
Dado que estas usando una sentencia de tipo SELECT no deberias estar usando ExecSQL, que se usa para ejecutar sentencias Insert, Update, Delete, etc
Para Select deberias usar open
Luego la linea
No hace nada, es simplemente una variable booleana, si no le asignas True o False lo que estas haciendo es "consultar su valor" por nada. Si tiene sentido hacer esto:
Código Delphi
[-]
FESMPMD1.Query3.Active := True; FESMPMD1.Query3.Active := False;
if FESMPMD1.Query3.Active then
ShowMessage('Esta abierto')
else
ShowMessage('Esta cerrado');
Por ultimo si bien lo que te comenta Daniel sobre como armar la cadena SQL
Código Delphi
[-]
txt_Query := Format('UPDATE Secce0 SET Edad = %s WHERE Rfe_Lave = "%s"', [FecCap, txt_Rfe_Llave]);
Es perfectamente valido, pero aun se podria mejorar utilizando parametros; lo ideal es usar parametros siempre que se pueda, aunque es cierto que hay ocasiones en las que al ir construyendo el string de forma dinamica no es tan sencillo hacerlo. Pero en tu caso que es un sql estatico es mejor usar parametros, asi:
Código Delphi
[-]
ElQuery.Text := ' UPDATE Secce0 SET Edad = :Edad WHERE Rfe_Lave = :LaLlave ';
ElQuery.ParamByName('Edad').Value := FecCap;
ElQuery.ParamByName('LaLlave').Value := txt_Rfe_Llave;