我在Delphi中有一个使用dbexpress tsqlquery的查询,看起来是这样的
ActiveSQL.sql.add('SELECT * FROM MYTABLE where MYFIELD=(:AMYFIELD) ');
ActiveSQL.ParamByName('AMYFIELD').AsString := 'Some random string that is to long for the field';
ActiveSQL.Open;
如果我运行它,当它执行open命令时,我会得到以下异常
类中包含消息的tdbxerror
'算术异常,数字
溢出或字符串截断。
这是由于a myfield中的字符串比tables字段长度长,myfield是varchar(10),如果我将其修剪为较短的字符串,它会正常工作,并且如果我像这样直接将字符串添加到SQL中
ActiveSQL.sql.add('SELECT * FROM MYTABLE where MYFIELD="Some random string that is to long for the field" ');
它工作正常,也就是说,不抱怨截断,现在如果这是一个插入/更新,我想知道截断,但因为它只是用于搜索,我想停止它。
是否有任何方法可以告诉dbexpress截断字符串是可以的?或者有什么可行的办法
我想避免添加
L_输入:=copy(L_输入,0,fieldlength-1);
因为看起来很混乱,这会使代码维护更加困难。
我正在通过Interbase驱动程序使用Delphi2007和Firebird 2,如果这有帮助的话?
更新:
@
Erick Sasse
看起来是你的权利,我在Firebird常见问题网站上找到了错误消息
http://www.firebirdfaq.org/faq79/
@
inzKulozik
leftstr工作得很好,虽然我不能得到activesql.parambyname(“amyfield”).size来工作,但是这对我来说仍然很混乱,而且很难维护。
我还看到了一个向SQL添加SUBSTR的方法:类似于
select * from mytable where myname = substr(:MYNAME,0,10)
再次看起来很难维护,理想情况下我想要一个Firebird/DBExpress配置设置来解决这个问题,但是在我找到一个Firebird/DBExpress配置设置之前,我会使用inzkulozik的解决方案,希望表结构不会发生太大的变化。