Perdón por tardar en contestar, al parecer se me ha perdido este hilo.
¿Acaso no hace eso ya los controles?
Si estoy editando un registro y quiero volver al valor anterior, uso Dataset.Cancel y esto volverá el registro al último valor estable.
Si doy a guardar (Dataset.Post), el nuevo valor pasa al valor del campo y el viejo se pierde.
El botón Limpiar, correspondería a la acción Dataset.Insert que traerá los valores por defecto de cada campo (establecidos en la base de datos como valores por defecto) y asignará sus valores a los DBEdits.
Para saber si un campo ha sido modificado en el DBEdit, tienes la propiedad Modified del TField.
Creo que verías más claro el asunto usando un TDBNavigator, porque te deja cancelar los cambios y volver a lo que tu llamas "valores estables".
Edito: El botón consultar tendría este código:
Código Delphi
[-]
Msg := EmptyStr;
if Dataset in EditModes then for i:= 0 to dataset.Fields.Count -1 do
if dataset.Fields[i].Modified then
Msg:= msg + '- '+ dataset.fields[i].FieldName + #10#13;
if Msg <> EmptyStr then
begin
Msg := 'Los siguientes campos han sido modificados:'+ #10#13 + Msg + ' ¿desea descartar los cambios realizados?';
if Application.Messagebox(msg, 'Advertencia', mbyesno) = idyes then
begin
Dataset.Cancel;
end
else end;
Si expongo todo esto, es porque dices que eres "nuevo en delphi" y puedes estar reinventando la rueda.
Saludos