SQL查询没有在delphi中完成

时间:2012-09-06 17:56:26

标签: delphi sql-server-2005 delphi-2010

我正在使用SQL Server 2005和Delphi 2010

我有ventas表({1}}(PK)= id_sale,id_venta(销售),(更多值),total =州(有效/不活动)和estado

该表记录了商店所有商品的销售情况,我需要逐行注册累计总和。如果当天有多个班次,我使用州字段来指定班次中的销售额。我正在使用此查询:

cumulative

当我在SQL上运行它时,这个查询确实是我想要的,但是当我在delphi上执行它时,它只给出了大约151行431的结果,而不是完成。

这是我的delphi代码:

Declare @id integer; 
set @id=(Select min(id_venta) from ventas where estado='activo');

while(select @id)<=(Select max(id_venta) from ventas) 
  begin 
    update ventas set acumulado=(select sum(total) from ventas 
    where id_venta<=@id and estado='activo') where id_venta=@id
    select @id=@id+1 
  end 

我需要做什么才能完成Delphi中的查询?

编辑:

发生了奇怪的事情,我尝试conect.Q_equivalencias.Active:=false; conect.Q_equivalencias.SQL.Clear; conect.Q_equivalencias.SQL.Add('Declare @id integer; set @id=(Select min(id_venta) from ventas where estado='+char(39)+'activo'+char(39)+' );'); conect.Q_equivalencias.SQL.Add('while(select @id)<=(Select max(id_venta) from ventas) begin'); conect.Q_equivalencias.SQL.Add('update ventas set acumulado=(select sum(total) from ventas '); conect.Q_equivalencias.SQL.Add('where id_venta<=@id and estado='+char(39)+'activo'+char(39)+') where id_venta=@id'); conect.Q_equivalencias.SQL.Add('select @id=@id+1 end'); conect.Q_equivalencias.ExecSQL; conect.Q_equivalencias.Open; conect.Q_equivalencias.ExecSQL;,{I} error creating cursor handler 但它完成了查询,所有行都更新了,为什么呢?

试了很多东西,似乎我对delphi的查询只更新了152行......

1 个答案:

答案 0 :(得分:2)

在查询开头添加SET NOCOUNT ON;可能会解决问题。

那就是说,我会使用单个UPDATE语句(甚至更好的VIEW或计算列)而不是这样的奇怪查询。我不确定查询是否实际执行了您真正希望它执行的操作,但以下单个语句应该是等效的:

UPDATE ventas
    SET acumulado=(
        SELECT SUM(v.total)
        FROM ventas v
        WHERE v.id_venta<=ventas.id_venta AND estado='activo'
    ) WHERE id_venta>=(
        SELECT MIN(id_venta)
        FROM ventas
        WHERE estado='activo'
    );