使用TSQLQuery& Trapping Traception Exception PARAMS

时间:2009-10-21 18:20:52

标签: sql sql-server delphi tsql exception

我收到“SQL Server错误:算术异常,数字溢出或字符串截断”错误

这是下面的代码

AQuery:= TSQLQuery.Create(nil);
with AQuery do
begin
SQLConnection:- AConnection;
 SQL.Text:= 'Insert into.....';
 ParamByName('...').asString:= 'PCT';
 .
 .
 .

 try
  ExecSQL;
 finally
  AQuery.Free;
 end;
end;

我有很多ParamByName行,我无法弄清楚哪一行抛出异常。我只知道它在ExecSQL系列上的抛出。我怎么知道哪个paramByName导致错误?

4 个答案:

答案 0 :(得分:2)

获得表格的元数据后,请检查字符串字段的最大长度。调试时,检查为parambynames提供的字符串的长度。还要检查数字字段的类型,并确保不超过最大值。 (我有一个字符串,这个字符串的长度超过了表中的varchars长度,并且在我尝试设置为太高值的smallint数据库字段时出现此问题)

答案 1 :(得分:1)

在param替换后获取SQL文本,并在SQL Server管理工作室中将其作为查询运行 你可以从那里调试它。

答案 2 :(得分:0)

您正在尝试将字符串值插入到不足以容纳值的字段中。根据表中字段的长度检查要插入的值的长度。

答案 3 :(得分:0)

正如其他人所说,几乎可以肯定的是,你正在将一个太大的字符串推入你的一个领域。它也可能发生在数值上,但最有可能是一个字符串。

我建议你暂时更改每个ParamByName('')。AsString:=带有文本常量的blah行,例如;

ParamByName('surname').AsString:='Smith';
ParamByName('firstname').AsString:='John';

等,看看你是否收到错误。如果它没有错误,那么你的问题很可能是你的一个字符串参数太长。检查表模式并调试放入参数的实际字符串。

根据您对此的访问(和体验)的多少,您可能会发现打开SQL Server日志记录更有帮助,以便在获取处理时可以查看您的查询(以及这些参数的内容) SQL服务器。这将向您显示实际为服务器提供的字符串和数值。 您使用的是哪个版本/版本的SQL Server?