这个问题怎么做呀SQL,本人在线的(50分)

  • 主题发起人 主题发起人 zytzjx
  • 开始时间 开始时间
strSQL := 'update stock set stock.总的数量 = stock.总的数量 - b.num '
+'select 货品编号, sum(货品数量) as num from sell as b where stock.货品编号 = b.货品编号 and b.status=''N''';
我现在改成这个样子还是出错,为什么呀,我的题意没有说清楚吗
那我再说清楚点吧,没有办法,现在说的就是我的实际的东西了。(跟这没关的字段我就不说了)
我有一个销售表Sell中有"货品编号","货品数量",还有一个"status"字段,如果东西卖了,就要从库存表
中把卖的数量减去,库存表stock中有"货品编号","总的数量"两个字段,就是把总的数量这个字段中的内容修改一下。
sell表中的status是表示是已经销售的还是现在将要销售的,如果是='N'的,就是的将要成交的。等于'P'就表明是以前
销售的。还有就是当然要货品编号一样才能减的。不能瞎减的。[:D]
不知道说明白了没有?本人在线的。
 
update stock
set stock.总的数量 = stock.总的数量 -
( select num from sell
where stock.编号 = sell.编号 and status = 'N')
 
本人想增加分,高手多指点
 
你最后执行的是 Open 还是 execSql
应该是 execSql
 
zhgnet: 用上你的,出现如下错误。
操作必须使用一个可更新的查询。
strSQL := 'update stock ' +
' set stock.总的数量 = stock.总的数量 - ' +
' ( select sum(货品数量) from sell ' +
' where stock.货品编号 = sell.货品编号 and status = ''N'')';
 
是ExecSQL 的
strSQL := 'update stock ' +
' set stock.总的数量 = stock.总的数量 - ' +
' ( select sum(货品数量) from sell ' +
' where stock.货品编号 = sell.货品编号 and status = ''N'')';
try
Query := TADOQuery.Create(nil);
with Query do
begin
Connection := ADOCon;
Close;
SQL.Clear;
SQL.Add(strSQL);
ExecSQL;
Close;
Free;
end;
finally
end;
 
各位我用了一种最笨的方法实现了,不过大家还是可以提出好的方法。因为我要敢时间的。
procedure TDataM.UpDateStock;
var
Query : TADOQuery;
QuerySell : TADOQuery;
strSQL : string;
begin
try
strSQL := 'select 货品编号, 货品数量 from Sell where status = ''N''';
QuerySell := TADOQuery.Create(nil);
QuerySell.Connection := ADOCon;
OpenSQL(QuerySell,strSQL);
try
Query := TADOQuery.Create(nil);
Query.Connection := ADOCon;
strSQL := 'Update stock set 总的数量 = 总的数量 - :CountNum where 货品编号 = :hpNO';
QuerySell.First;
while not QuerySell.Eof do
begin
Query.Close;
Query.SQL.Clear;
Query.SQL.Add(strSQL);
Query.Parameters.ParamByName('CountNum').Value :=QuerySell.FieldByName('货品数量').AsInteger;

Query.Parameters.ParamByName('hpNO').Value := QuerySell.FieldByName('货品编号').AsString;
Query.ExecSQL;
QuerySell.Next;
end;
Query.Close;
Query.Free;
finally
end;
QuerySell.Close;
QuerySell.Free;
finally
end;

end;
如果要是有好的方法,我就加分,如果没有,上面的兄弟也很辛苦,就平均分一下分了吧,三天之后加分吧
 
updata stock set stock.count=stock.count-b.num from sell as a where
stock.no=b.no and stock.status='N'
我經常是這樣用的,難道有錯嗎
你先到后台執行,如果可以,說明你前台寫法有問題
 
UPDATE A SET A.总的数量 = A.总的数量 - B.NUM
FROM STOCK A INNER JOIN (SELECT 货品编号,SUM(NUM) AS NUM
FROM SELL WHERE STATUS = 'N' GROUP BY 货品编号) B
ON A.货品编号 = B.货品编号

这样试试,按思路应该是没错的!
 
多人接受答案了。
 
后退
顶部