这样的存储过程该如何写?两个多小时啦,还是没人回答,难道高手都不在了吗?只不过是个存储过程的编写嘛! (在线等待) (50分)

  • 主题发起人 主题发起人 delphi26
  • 开始时间 开始时间
D

delphi26

Unregistered / Unconfirmed
GUEST, unregistred user!
我在写一存销存软件,在汇总各商品库存时我采用下面的方法:
前提:
假如有下面数据表:
采购进货表
采购退货表
领料表
产品入库表
产品出货表
产品退货表
每个表都有下面字段:
商品编号,商品名称,规格型号,单位,数量,单价
我现在要汇总出下面表:库存表
商品编号,商品名称,规格型号,单位,库存量,平均单价
我采用下面方法
procedure tform1.bitbtn1click(sender:tobject)
begin
//建立采购进货表汇总临时表
With Dm.Adoquery1 do
begin
Close;
Sql.Clear;
Sql.Add('Create Table ##jinhuo(商品编号 Varchar(20),商品名称 Varchar(50),规格型号 Varchar(50),单位 Varchar(10),');
Sql.Add('规格型号 Varchar(30),数量 Decimal(10,5),');
Sql.Add('平均单价 Decimal(10,3))');
ExecSql;
end;
//建立采购退货表汇总临时表
With Dm.Adoquery1 do
begin
Close;
Sql.Clear;
Sql.Add('Create Table ##tuihuo(商品编号 Varchar(20),商品名称 Varchar(50),规格型号 Varchar(50),单位 Varchar(10),');
Sql.Add('规格型号 Varchar(30),数量 Decimal(10,5),');
Sql.Add('平均单价 Decimal(10,3))');
ExecSql;
end;
//及建立其它临时表(如领料临时表,产品入库临时表等)
.........

//汇总采购进货表
With Dm.Aq_OnceQuery do
begin
Close;
Sql.Clear;
Sql.Add('Insert Into ##tuihuo(商品编号,商品名称,规格型号,单位,数量,平均单位) ');
Sql.Add('Select 商品编号,商品名称,规格型号,单位,单位,Sum(数量) As 数量,Avg(单价) As 平均单价 ');
Sql.Add('from 采购进货明细 Group by 商品编号,商品名称,规格型号,单位');
ExecSql;
end;
//汇总采购退货表
With Dm.Aq_OnceQuery do
begin
Close;
Sql.Clear;
Sql.Add('Insert Into ##tuihuo(商品编号,商品名称,规格型号,单位,数量,平均单位) ');
Sql.Add('Select 商品编号,商品名称,规格型号,单位,单位,Sum(数量) As 数量,Avg(单价) As 平均单价 ');
Sql.Add('from 采购退货明细 Group by 商品编号,商品名称,规格型号,单位');
ExecSql;
end;
//汇总其它数据表(如领料表,产品入库表,产品出货表等)
//最后,由各临时表汇总库存量
With Aq_StockPile do
begin
Close;
Sql.Clear;
Sql.Add('Select 商品编号,商品名称,型号规格,单位,Sum(a) As 库存量 from (');
Sql.Add('Select 商品编号,商品名称,型号规格,单位,数量 as a from ##Jinhuo ');
Sql.Add('Union All Select 商品编号,商品名称,型号规格,单位,0-数量 as a from ##tuihuo ');
Sql.Add('Union All Select 商品编号,商品名称,型号规格,单位,(0-数量) as a from ##linliao ');
Sql.Add('Union All Select 商品编号,商品名称,型号规格,单位,数量 as a from ##tuiliao ');
Sql.Add('Union All Select 商品编号,商品名称,型号规格,单位,(0-数量) as a from ##baofei) Sumtable ');
Sql.Add('Group by 商品编号,商品名称,型号规格,单位');
Open;
end;
//删除各临时表(如删除采购进货表临时表)
With Dm.Aq_OnceQuery do
begin
Close;
Sql.Clear;
Sql.Add('Drop Table ##Jinhuo');
ExecSql;
end;

.........

Messagebox(0,'汇总完毕!','提示',Mb_IconInformation+Mb_Ok);
end;
这中间还有很多代码我省略啦,不过,大根意思是上面这样,我是DELPHI初学者,我想把上面代码写成存储过程来执行,这个问题对于我来说很难,但对于你们各位来说,也可能非常简单,还请各位大侠指点一下,谢谢!
 
各位高手好!有空请参观本人站点(下载110)
http://www.down110.com
欢迎提出建议,大家一起进步!Email:web@down110.com
 
看中文的表名好怪,嘿嘿

写存储过程不是Delphi的问题,是数据库的工作,你只要在的数据库总把这段代码
放在一起组织成一个块就是存储过程了,具体和什么数据库有关
你在Delphi调用就行了...
自己学习吧
 
我在我的程序里其实也不是用中文表名及字段名的,贴上来后为了让大家看得懂我的意思,所以改成中文名啦,我来没写过MSSQL的存储过程,各位能否帮忙把我上面的代码写成过存过储让我参考一下,或者给点MSSQL过储过程的学习资料看看也行.
 
存储过程就是sql语句的批处理,你把上面那些sql语句放在一起就行了
Create Proc pp
AS
Create Table ##jinhuo(商品编号 Varchar(20),商品名称 Varchar(50),规格型号 Varchar(50),单位 Varchar(10),规格型号 Varchar(30),数量 Decimal(10,5),平均单价 Decimal(10,3))
...
Select 商品编号,商品名称,型号规格,单位,Sum(a) As 库存量 from (
Select 商品编号,商品名称,型号规格,单位,数量 as a from ##Jinhuo
Union All Select 商品编号,商品名称,型号规格,单位,0-数量 as a from ##tuihuo
Union All Select 商品编号,商品名称,型号规格,单位,(0-数量) as a from ##linliao
Union All Select 商品编号,商品名称,型号规格,单位,数量 as a from ##tuiliao
Union All Select 商品编号,商品名称,型号规格,单位,(0-数量) as a from ##baofei) Sumtable
Drop Table ##Jinhuo
..
Drop Table ...
Go

然后在delphi中调用:
Close;
Sql.Clear;
Sql.Add('Exec pp');
ExecSql;//或者Open
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
605
import
I
后退
顶部