求助delphi+sql sever数据库中的聚合语句 ( 积分: 100 )

  • 主题发起人 主题发起人 wey191
  • 开始时间 开始时间
W

wey191

Unregistered / Unconfirmed
GUEST, unregistred user!
是这样要汇总一种入库类型为“1a”的“合计”金额,我的代码是这样写的:
with ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select sum(hj)as zje from rkjl where rklx="1a" ');
但运行时总提示“将varchar值'1a'转换为数据类型为'int'的列时发生语法错误”
但数据表中 rklx 的类型不是数值类型,不知道是怎么回事,请高手指教。
 
sql.Add('select sum(hj)as zje from rkjl where rklx=''1a'' '
不是双引号是两个单引号
 
单引号无法通过编译
 
两个单引号可以通过编译,但还是提示同样的错误。
 
const
aa = 'select sum(hj)as zje from rkjl where rklx=%0:s '

sql.Add(Format(aa, [QuotedStr('1a')]))
 
十分感谢两位的回答,可问题依然存在,还是上面的提示错误。
 
‘1a’ 如果是变量的话就如下就OK了:
sql.Add('select sum(hj)as zje from rkjl where rklx='''+1a+''' ');
‘1a’ 如果是常量的话就如下就OK
sql.Add('select sum(hj)as zje from rkjl where rklx=''1a'' ');
 
1a 是常量,是varchar类型,还是不行。
 
定义一个变量
var
la : string;
begin
la := 入库类型的某一个值;
with ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select sum(hj)as zje from rkjl where rklx="1a" ');
open;
end;
 
请问LZ,你的rklx是定义为什么类型的.
 
rklx为字符串类型,合计的是数值类型。“1a”为一种入库类型的字符串标记。
 
sql.Add('select 1 from rkjl where rklx="1a" ');

这样会不会报错呢
 
在进行查询时不会出错例如:sql.Add('select * from rkjl where rklx="1a" ');查询的结果都是正确的,但在聚合汇总时就出错了如:sql.Add('select sum(hj)as zje from rkjl where rklx="1a" ');提示:“将varchar值'1a'转换为数据类型为'int'的列时发生语法错误”问题是要汇总的数值是"hj"字段,而"rklx"字段只是一个汇总查询的条件,为什要转换"rklx"的字段类型呢?
 
你用sql的事件跟踪器跟踪下你传入的sql语句,看和预期是否一致。
 
是不是因为类型 问题,可以试下SUM (CAST HJ INT) 再求总
 
是不是hj中有為空的啊
 
问题解决了,是因为这此求和查询前还有一个求和的查询,因为查询条件rklx的值的标记是数字没有加“''”所以自动把varchar类型转换成了int类型,再次用varchar类型"1a"为查询条件时出错。
 

Similar threads

回复
0
查看
995
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部