2011-04-10 65 views
3

我从10到11自动截断分配的字符串到字段的长度?

迁移dbExpress驱动程序时,遇到了一个问题,我有以下代码来执行在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

你可以发出命令SET ANSI_WARNINGS OFF

但是这并不是真正值得推荐的,因为SQL Server中的功能 需要启用ANSI_WARNINGS。

所以最好自己截断数据,即

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

+1

是疗法任何理由你使用复制(),而不是LeftStr()? – Simon 2011-04-10 08:37:25

+1

@Simon,不,没有理由:) – 2011-04-10 08:48:37

+2

LeftStr只添加到D6中,我想很多人学会了使用Copy并且仍然坚持使用它。 – 2011-04-10 09:23:18