Caroline,
You might want to try this as well
ThisForm.SetAll("Enabled", .F., "cmd")
doevents
* do the long running thing
The doevents forces VFP into the event handler which should give time for the disabling to appear before the SQL kicks off.
The .Refresh() method only updates the displayed value in the control from its .ControlSource, since your buttons aren't bound there's not anything to refresh.
>>
>>ThisForm.SetAll("Enabled", .F., "cmd")
>>THISFORM.DRAW()
>>