There are least 2 bugs in TSQLQuery regarding this topic. Both have to do with the TCustomSQLQuery.RefreshRecord procedure.
1)
When you have a TDataset.Insert on a ftAutoInc field, AND you set the field-value yourself, AND there is a RefreshSQL statement, it will always crap out with the message that there is no result set ("Refresh SQL resulted in empty result set").
You could argue that that is normal behavior but then the ftAutoInc field should have been set to readonly (it is in Delphi/IBX I think).
So... consider the ftAutoInc field as non-writable, if you have a RefeshSQL statement.
2)
Second problem is the TEXT field.
There are some problems in TCustomSQLQuery.RefreshRecord when dealing with memo-fields (TBlobField).
With the refresh there is always a TCustomBufDataset.CreateBlobStream done (to write the refreshed record to the buffer).
For assigning a TStringField this is no problem, there is no check if the TDataset.State is in [dsEdit,dsInsert].
For a TBlobField there is a check (in CreateBlobStream). So a TMemoField can never be "refreshed" if the TDataset.State is not in [dsEdit,dsInsert] (which it isn't after posting and refreshing the record buffer).
Conclusion... don't have TSQLQuery.RefreshSQL set when dealing with TEXT fields.