Sería bueno que hicieras un DEBUG para identificar en que línea lanza el error. De todas maneras sugiero que antes de realizar el Append verifiques si el dataset está abierto:
Código Delphi
[-]
if not CDS.Active then
CDS.CreateDataSet;
CDS.append;
CDS.FieldByName('cant').AsFloat:= 1;
CDS.FieldByName('detalle').Asstring:= texto;
CDS.FieldByName('precio').Asfloat:= precio;