Perdona me he confudido ponlo siguiente
Código Delphi
[-]
with ClientDataSet2 do
begin
Close;
CommandText:='select * from materia WHERE id = :id'; Params.ParambyName('id').AsInteger:=strtoint(edit2.Text);
open;
edit;
FieldByname('materia').AsString:=edit1.Text;
post;
end;
Primero haz la consulta del registro que quieres modificar, y luego lo modifics con FieldByname, prueba a ver que tal.
Saludos.