Hola Julián.
Añado la referencia al hilo inicial para evitar que te mencionen los mismos enlaces y además brindar más información a quién pueda ayudarte sobre el error.
También aprovecho a sugerirte otra organización para el código anterior:
Código Delphi
[-]
procedure TFormAsistencia.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var
st: string;
begin
with Sender as TDBGrid do
if (SelectedField.FieldName = 'id_asistencias_tipo') and (Key in ['1'..'4']) then
begin
DataSource.DataSet.Edit;
case Key of
'1': st:= 'Presente';
'2': st:= 'Ausente';
'3': st:= 'Tarde';
'4': st:= 'Retiro Anticipado';
end;
DataSource.DataSet.FieldByName('x_asistencia').AsString:= st;
end;
end;
Un saludo y espero que encuentres pronto la solución.