Hola
El TClientDataSet es muy poderoso, para mi es una de las herramientas más robustas y necesarias para la programación con datos, lamentablemente es menospreciado.
El TClientDataSet tiene unas propiedades llamadas FieldDef e IndexDef, en estas propiedades es posible agregar campos e indices, ya sean primarios o no.
Al definir un indice primario es posible evitar tuplas duplicadas.
Estas estructuras se pueden crear de 3 maneras diferentes, la primera por código.
Var
CDS : TClientDataSet;
Begin
CDS := TClientDataSet.Create(Nil)
CDS.FieldDefs.Add('NombreCampo', TFieldType, Size, Required);
CDS.FieldDefs.Add('NombreCampo', TFieldType, Size, Required);
CDS.FieldDefs.Add('NombreCampo', TFieldType, Size, Required);
CDS.FieldDefs.Add('NombreCampo', TFieldType, Size, Required);
CDS.IndexDefs.Add('NombreIndice','llave1;llave2;llaven',[ixPrimary]);
CDS.CreateDataSet;
La segunda forma de crearla es por el editor del IDE, doble click a la propiedad fieldef y doble click a la propiedad IndexDef, luego con el botón derecho del mouse sobre el componentes, se le dice "Create DataSet"
La tercera es con la utilización de un DataSetProvider y crearlo a partir de un SQL.
Otras cosas que permite hacer el ClientDataSet son:
1. Guardar la información localmente en formato binario o XML.
2. Recuperar una tabla de un archivo local previamente guardado.
3. Cargar datos locales, conectarse a una tabla real y aplicar cambios almacenados
4. Agrupar y sumarizar en varios niveles.
5. Sincronizar los datos y controlar los errores con respecto a la base de datos.
6. Permite trabajar como memorytables
7. Es compatible desde Delphi4 hasta XE5.
No olvidar incluir en los uses la unidad midaslib, de lo contrario se requiere el uso del midas.dll.
Espero les sea de utilidad.
Saludos.