我收到“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导致错误?
答案 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?