Constant object cannot be passed as var parameter

Доброго времени суток.В строке кода 
path[kgr+1]:=ExtractFilePath(Application.ExeName)+'data\excel\'+delete(AsgrTable.FieldByName('Cat').AsString,length(AsgrTable.FieldByName('Cat').AsString),1)+'.xls';
компилятор видит ошибкуconstant object cannot be passed as var parameterне могу разобраться, что и откуда, но опытным путем выяснил, что загвоздка во фрагменте 
delete(AsgrTable.FieldByName('Cat').AsString,length(AsgrTable.FieldByName('Cat').AsString),1)
пробовал подставлять вместо вышеуказанных параметров переменные, куда заносил эти параметры, не помогает.прошу Вашей помощи.спасибо за Ваше потраченное время.
4 ответа

С подставленными переменными должно работать. А конкретно дело в первом параметре.


Для начала отформатируем код:
path[kgr+1] :=   ExtractFilePath(Application.ExeName) +  'data\excel\' +   delete(AsgrTable.FieldByName('Cat').AsString, length(AsgrTable.FieldByName('Cat').AsString), 1) +  '.xls';
Ошибки:1. Delete - это процедура, и никакого значения не возвращает, поэтому в приведённом виде использоваться не может.2. В процедуру Delete должна передваться строка по ссылке. Именно эта строка и будет модифицироваться. Вы же пытаетесь передать туда свойство. Свойство может передаваться только по значению.P.S. На самом деле передавать свойство по ссылке можно, если оно читается напрямую из поля, а не через функцию чтения, но это скорее всего паразитное явление, оставленное по недосмотру, возможно, не во всех версиях, пользоваться которым не следует ни в коем случае.


14SatanA88, когда я говорил что должно работать, я конечно же имел в виду второй фрагмент


Всем огромное спасибо, вынес процедуру delete отдельно, для результата выделил переменную, подставил в ту строку, все заработало. Я догадывался, что delete не вернет мне в той строке нужного результата, но хотел сократить код.