我在程序中执行SQL语句,在SQL Server中结果是正确的,但是在返回结果集中却不对,不知道为什么? ( 积分: 100 )

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

wlandll

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中执行SQL语句,在SQL Server中结果是正确的,但是在返回结果集中却不对,不知道为什么?
var
sSQL:String;
begin
sSQL:='select Quantity*Price Amount from D_Order ';
 with ClientDataSet1 do
begin
Close;
CommandText:=sSQL;
Open;
end;
end;

执行完成后,返回值不稳定,一会是0,一会是435435.43543等非常大的数值。反正就是会跳来跳去。
而我将SQL语句在SQL Server查询分析器中执行时是正确的数值。

经测试,发现,只要有计算的返回值,都有这个问题。
这是DELPHI的BUG吗?或者是我的用法不对,我用ClientDataSet取返回值。
当我将计算的数值以字符串方式回传时,返回值是正确的。
sSQL:='select Cast(Quantity*Price as varchar(20)) Amount from D_Order ';这样返回的是字符串,但数值却是正确的。

虽然转换一下数值正确了,但是因为是字符串,我没法格式化它。大家帮帮忙。
开发环境是Delphi6,打了D6_upd2_ent.exe补丁,2000/Xp下都有这个问题
数据库是SQL Serve2000
 
我在程序中执行SQL语句,在SQL Server中结果是正确的,但是在返回结果集中却不对,不知道为什么?
var
sSQL:String;
begin
sSQL:='select Quantity*Price Amount from D_Order ';
 with ClientDataSet1 do
begin
Close;
CommandText:=sSQL;
Open;
end;
end;

执行完成后,返回值不稳定,一会是0,一会是435435.43543等非常大的数值。反正就是会跳来跳去。
而我将SQL语句在SQL Server查询分析器中执行时是正确的数值。

经测试,发现,只要有计算的返回值,都有这个问题。
这是DELPHI的BUG吗?或者是我的用法不对,我用ClientDataSet取返回值。
当我将计算的数值以字符串方式回传时,返回值是正确的。
sSQL:='select Cast(Quantity*Price as varchar(20)) Amount from D_Order ';这样返回的是字符串,但数值却是正确的。

虽然转换一下数值正确了,但是因为是字符串,我没法格式化它。大家帮帮忙。
开发环境是Delphi6,打了D6_upd2_ent.exe补丁,2000/Xp下都有这个问题
数据库是SQL Serve2000
 
with adoquery1 do
begin
close;
sql.text:='select Quantity*Price p from D_Order ';
open;
end
showmessage(adoquery1['p']);
 
suninrain:你是给返回字段 加旧别名,我也加过,没用
 
sql语句的问题
select Quantity*Price from D_Order
给Quantity*Price 定义一个列名就可以了
 
用存储过程呢?避免直接在程序中写SQL语句吧
 
也许用存储过程没这个问题,只是代码已经全部写完了,现在改代价太大。时间也来不及。
还请高手帮帮忙!
 
with adoquery1 do
begin
close;
sql.text:='select Quantity*Price as p from D_Order ';
open;
end
 
你在DELPHI中查询结果的返回值是怎么赋值的,是不是超过赋值类型的范围了
 
Quantity和Price在数据库中定义为 numeric(19,2)
在程序中没有赋值,我只是把结果集显示在Grid中。
 
是你用的ClientDataSet的问题,由于经过了DataSetProvide中转,产生了误差,按理说不应该,可Delphi的这个控件就是有这个问题,我经常遇到。改换成普通ADOQuery查询就没问题了。
 
接受答案了.
 
后退
顶部