Many people always ask me, how to use it, when do you use it. Slaidly asked them, can only talk about the previous applications, discovering is not very easy to understand, today I found an example, or very well explained. We have a function of fast downloading data. procedure TDataSwitch.DownTable (ASQLStr, ATableName: string); var tmpDataSet: TDataSet; tmpDestDataSet: TDataSet; begin SystemSetup.ServerAccess.OpenSQL (ASQLStr, tmpDataSet); SystemSetup.ClientAccess.OpenSQL ( 'select * from' ATableName '_temp' , TMPDESTDATASET; TRY ..... While Not, TMPDataSet, TMPDestDataTable (TmpDataSet.next; end; // while finally tmpdataset.free; tmpdestDataSet.Free; end; end // We want to External can know the progress of performing fast release. What should I do in general? / / Either pass a commission method, or send a message from this internal to the outside. These methods are really troublesome, and it is really uncomfortable after writing the code. We offer an iProcess interface. IProcess = Interface procedure ProcessChange (AMax, APos: Integer); end; code change procedure TDataSwitch.DownTable (ASQLStr, ATableName: string; AProcess: IProcess); var tmpDataSet: TDataSet; tmpDestDataSet: TDataSet; begin SystemSetup.ServerAccess.OpenSQL ( ASQLStr, tmpDataSet); SystemSetup.ClientAccess.OpenSQL ( 'select * from' ATableName '_temp', tmpDestDataSet); try ..... while not tmpDataSet.Eof do begin NewRecordToTable (tmpDataSet, tmpDestDataSet); // Add a new IF APROCESS <> NIL THEN APDATSET.RECNOT, TMPDATASET.RECNO; TMPDataSet.Next; End; // While Finally TmpDataSet.Free; tmpdestDataSet.Free; end; end; // Who wants to know progress, as long as It is good to implement the iProcess interface, we can also make the form to achieve.