Would you tell us why the call to Refresh? TClientDataSet (CDS) usually does not require that.
Besides, was the SQLQuery open or closed when you opened the CDS? It must be closed so the DatasetProvider (DSP) will open it, retrieve all the rows and close it back.
If the DSP finds the dataset already open, it will only navigate along the records, build the record pack (named as Data) and send it to the CDS. The dataset will be left alone, whitout being closed.