Mi sugerencia con los mensajes anteriores es
prescindir de la cláusula "INTO OUTFILE", y traerte la consulta como normalmente lo harías si quisieras, por ejemplo, mostrar el listado en un DBGrid. Entonces, ya abierta esa consulta (y con Open, en lugar de ExecSQL), llamar a la función SaveToCSV o alguna similar a las del hilo referido.
Basándome en tu código original, quedaría más o menos así:
Código Delphi
[-]
query2.Close;
query2.SQL.Clear;
query2.SQL.add(' select numreferencia, clvarticulo, descripcion, fecharecepcion, cantidad');
query2.SQL.add(' FROM '+TBL+' where (fecha between '+quotedstr(fecha1)+' and '+quotedstr(fecha2)+')');
query2.Open;
SaveToCSV (query2, 'C:\' + Edit2.Text + '.csv', '"', ',');
Temo que la cláusula
INTO OUTFILE (que para mi es una cosa desconocida porque no trabajo con MySQL) siempre te creará el archivo en donde se encuentre el servidor o la base de datos, no localmente. Por ello la alternativa de cargar una consulta "normal" y luego exportarla con alguna función de utilería como SaveToCSV (incluso es posible que existan otras que exporten directamente a Excel).
Saludos.
Al.