Vorschlag: Statt direkt den Suchbegriff in das Makro einzubinden, besser Makro mit Parameter und diesen dann setzen. Ich vermute, dass bei ParamByName keine Ersetzung von & geschieht.
Code:
var mypara:= ':suchbegriff' ;
var dwhere2 := ' and ((k.FIRMA containing '+mypara+') or ( k.ZUSATZ containing '+mypara+' ) or ( k.ZUSATZ2 containing '+mypara+' ))';
qrKunden.MacroByName('dwhere').AsRaw := dwhere2;
qrKunden.ParamByName('suchbegriff ').AsString := dwhere;