Как уже говорили другие, почти наверняка вы помещаете слишком большую строку в одно из ваших полей. Это также может произойти с числовыми значениями, но, скорее всего, это будет строка.
Я бы посоветовал вам временно изменить каждое из ваших ParamByName (''). AsString: = бла строки с текстовой константой, например;
ParamByName('surname').AsString:='Smith';
ParamByName('firstname').AsString:='John';
и т. Д., И посмотрите, получите ли вы ошибку. Если он проходит без ошибок, то, скорее всего, ваша проблема в том, что один из ваших строковых параметров слишком длинный. Проверьте схему таблицы и отладьте фактические строки, которые вы вводите в параметры.
В зависимости от того, какой доступ (и опыт) у вас есть к этому, может оказаться более полезным включить ведение журнала SQL Server, чтобы вы могли видеть ваши запросы (и содержимое этих параметров), когда обработка обрабатывается SQL-сервер. Это покажет вам, какие именно строковые и числовые значения фактически передаются на сервер.
Какую версию / редакцию SQL Server вы используете?