The problem with getting anything like financial compensation is that, since SAA is not a European carrier, you have no claim under the EU regulation (the 261/2004 one, which everyone regularly travelling in or to Europe should have in his carry-on).
SAA are bound by the regulation only for flights to / from European destinations, so for JNB/VFA you are out of luck. I agree with gcuk that what you got a is probably as good as it gets (and considerably better than I have - anecdotally - understood sometimes happens).