Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询在delphi中未完成_Delphi_Sql Server 2005_Delphi 2010 - Fatal编程技术网

SQL查询在delphi中未完成

SQL查询在delphi中未完成,delphi,sql-server-2005,delphi-2010,Delphi,Sql Server 2005,Delphi 2010,Im使用SQL Server 2005和Delphi 2010 我有一个表ventas,id_venta PK=id_sale,销售总额,更多值,estado=stateactive/inactive和cumulative 该表记录了一家商店所有商品的销售额,我需要逐行记录总销售额的累计和。如果一天中有多个班次,我将使用状态字段指定班次中的销售额。我正在使用此查询: Declare @id integer; set @id=(Select min(id_venta) from ventas w

Im使用SQL Server 2005和Delphi 2010

我有一个表ventas,id_venta PK=id_sale,销售总额,更多值,estado=stateactive/inactive和cumulative

该表记录了一家商店所有商品的销售额,我需要逐行记录总销售额的累计和。如果一天中有多个班次,我将使用状态字段指定班次中的销售额。我正在使用此查询:

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 
当我在SQL上运行这个查询时,它确实满足了我的要求,但是当我在delphi上运行它时,它只给出了大约151行431行的计算结果,而没有完成

这是我的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;
要完成Delphi中的查询,我必须做什么

编辑:

奇怪的事情刚刚发生,我试着用conect.Q_equivalencias.Open;代替conect.Q_equivalencias.ExecSQL;当然,创建游标处理程序会给我带来一个错误 但是它完成了查询,所有的行都被更新了,这是为什么

尝试了很多东西,但我在delphi上的查询似乎只更新了152行…

可能添加了一组NOCOUNT;在开始查询时,可能会解决此问题

也就是说,我会使用单个UPDATE语句,或者更好的是使用视图或计算列,而不是这样一个奇怪的查询。我不确定查询是否真的执行了您真正希望它执行的操作,但下面的一条语句应该执行相同的操作:

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'
    );

您正在使用哪些db组件?TQuery、TDataSource、ODBC连接,我有更多的insert、update、select查询,但这是唯一一个给我带来问题的,查询本身执行SQL Management Studio Express中必须执行的操作,但在Delphi 2010中没有完成。我看到了一个类似的问题,与查询所用的时间长度有关,如果它占用了一定的时间,它将无法确定地挂起。那是几年前的事了,我不记得我们是怎么解决的了。查询是有效的,至少在SQL中是有效的,而不是在Delphi中,但我并不擅长SQL,所以与这个查询相比,它是一个奇怪的查询。。。你的很好用,谢谢。