Hallo,
bei einem Deiner letzten Statements stand das Order by doppelt
main.qryproducts.SQL.Add('order by fam_db.name asc, fam_db.menge asc');
main.qryproducts.SQL.Add('ORDER_BY fam_db.name, (cast(menge as integer)) ASC');
Ausserdem hattest du +37 statt dem % genommen.
Die Statements sind also auch so verschieden gewesen.
So wie du es jetzt hast, ist es zumindestens etwas besser lesbar, aber Parameter sind noch besser (Stichwort:
Sql-Injection)