Автоматически обрезать присвоенную строку до длины поля? - PullRequest
3 голосов
/ 10 апреля 2011

Я столкнулся с проблемой при переносе драйвера dbexpress с 10 на 11.

У меня есть следующие коды для выполнения оператора обновления в SQL Server:

sql.add('UPDATE mytable SET myfield=:AFIELD');
ParamByName('AFIELD').AsString := 'Some random string that is too long for the field';
Open;

Это вызовет SQLОшибка исключения и остановки выполнения. строка или двоичные данные будут усечены

Это вызвано тем, что длина строки в myfield превышает длину поля таблицы, myfield - Varchar (10)

РанееКоды работали нормально, и строка, попадающая в поле, автоматически усекается до 10 символов.

Мне было интересно, можете ли вы предоставить какие-либо подсказки о настройке соединения для работы автоматического усечения.Или любые обходные пути.Спасибо, куча! ~~~

1 Ответ

1 голос
/ 10 апреля 2011

Вы можете выполнить команду SET ANSI_WARNINGS OFF.

Но это не очень рекомендуется, поскольку в SQL Server есть функции, требующие включения ANSI_WARNINGS.

Так что лучше усечьсами данные, т.е.

ParamByName('AFIELD').AsString := Copy(VeryLongString, 1, 10);

...