使用DELPHI7和ACCESS做个查询程序,要做多表查询,并可导出结果。以前没接触过。 求指教
包含表:1、商品类别信息表类别号类别名01日化02服装2、销售信息表产品编号品名类别号店面号产品订价销售金额销售日期1001海飞丝010122232012-01-0110...
包含表:1、商品类别信息表 类别号 类别名
01 日化
02 服装
2、销售信息表 产品编号 品名 类别号 店面号 产品订价 销售金额 销售日期
1001 海飞丝 01 01 22 23 2012-01-01
1002 哥弟 02 01 201 220 2012-02-03
1003 大宝 01 01 8 10 2011-01-01
1002 哥弟2 02 02 200 222 2011-02-03
3、店面信息表 店面编号 店名 地址
01 1号
02 2号
查询要求:按店面、商品类别,求本期与上年同期销售数据(日期节点为输入)
查出结果:1号店
类别名 产品订价(本期)销售金额(本期)产品订价 销售金额(同期)
日化 22 23 8 10
服装 201 220
一分析起来就是要按给定的日期,给定的店面求不同类别商品的在指定日期的销售金额及订价的和。
二是要将结果导出为EXCEL
不知道要涉及到什么控件及SQL语句要怎么写才能实现。求指导。
展开
01 日化
02 服装
2、销售信息表 产品编号 品名 类别号 店面号 产品订价 销售金额 销售日期
1001 海飞丝 01 01 22 23 2012-01-01
1002 哥弟 02 01 201 220 2012-02-03
1003 大宝 01 01 8 10 2011-01-01
1002 哥弟2 02 02 200 222 2011-02-03
3、店面信息表 店面编号 店名 地址
01 1号
02 2号
查询要求:按店面、商品类别,求本期与上年同期销售数据(日期节点为输入)
查出结果:1号店
类别名 产品订价(本期)销售金额(本期)产品订价 销售金额(同期)
日化 22 23 8 10
服装 201 220
一分析起来就是要按给定的日期,给定的店面求不同类别商品的在指定日期的销售金额及订价的和。
二是要将结果导出为EXCEL
不知道要涉及到什么控件及SQL语句要怎么写才能实现。求指导。
展开
2个回答
展开全部
procedure QueryData(AStoreName: stirng; AStartDate, AEndDate: TDateTime);
var
BStartDate, BEndDate: TDateTime;
begin
BStartDate := incyear(AStartDate, -1);
BEndDate := incyear(AEndDate, -1);
with AdoQuery1 do
begin
Sql.Close;
Sql.Clear;
Sql.Add('select 类别名, 产品订价(本期), 销售金额(本期), ' +
' 产品订价(同期), 销售金额(同期) from ' +
' ((select 类别号, sum(产品订价) as 产品订价(本期), ' +
' sum(销售金额) as 销售金额(本期) from 销售信息表 ' +
' left join 店面信息表 on 店面号 = 店面编号 ' +
' where 店名 = AStoreName and ' +
' (销售日期 between AStartDate and AEndDate) group by 类别号)) tb1 ' +
' left join ' +
' (select 类别号, sum(产品订价) as 产品订价(本期), ' +
' sum(销售金额) as 销售金额(本期) from 销售信息表 ' +
' left join 店面信息表 on 店面号 = 店面编号 ' +
' where 店名 = AStoreName and ' +
' (销售日期 between BStartDate and BEndDate) group by 类别号)) tb2 ' +
' on tb1.类别号 = tb2.类别号) right join 商品类别信息表 ' +
' tb3 on tb1.类别号 = tb3.类别号')
Sql.Open;
end;
end;
导出到excel 你用dbgrideh
uses
DBGridEhImpExp
procedure ExportDataExcel;
var ExpClass:TDBGridEhExportClass;
Ext:String;
begin
if SaveDialog1.Execute then
begin
ExpClass := TDBGridEhExportAsXLS;
SaveDBGridEhToExportFile(ExpClass,dbgrideh1,
SaveDialog1.FileName,true);
end;
end;
var
BStartDate, BEndDate: TDateTime;
begin
BStartDate := incyear(AStartDate, -1);
BEndDate := incyear(AEndDate, -1);
with AdoQuery1 do
begin
Sql.Close;
Sql.Clear;
Sql.Add('select 类别名, 产品订价(本期), 销售金额(本期), ' +
' 产品订价(同期), 销售金额(同期) from ' +
' ((select 类别号, sum(产品订价) as 产品订价(本期), ' +
' sum(销售金额) as 销售金额(本期) from 销售信息表 ' +
' left join 店面信息表 on 店面号 = 店面编号 ' +
' where 店名 = AStoreName and ' +
' (销售日期 between AStartDate and AEndDate) group by 类别号)) tb1 ' +
' left join ' +
' (select 类别号, sum(产品订价) as 产品订价(本期), ' +
' sum(销售金额) as 销售金额(本期) from 销售信息表 ' +
' left join 店面信息表 on 店面号 = 店面编号 ' +
' where 店名 = AStoreName and ' +
' (销售日期 between BStartDate and BEndDate) group by 类别号)) tb2 ' +
' on tb1.类别号 = tb2.类别号) right join 商品类别信息表 ' +
' tb3 on tb1.类别号 = tb3.类别号')
Sql.Open;
end;
end;
导出到excel 你用dbgrideh
uses
DBGridEhImpExp
procedure ExportDataExcel;
var ExpClass:TDBGridEhExportClass;
Ext:String;
begin
if SaveDialog1.Execute then
begin
ExpClass := TDBGridEhExportAsXLS;
SaveDBGridEhToExportFile(ExpClass,dbgrideh1,
SaveDialog1.FileName,true);
end;
end;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先建表1,2,3在Access, 这个字段命名尽量用英文,这个程序规范我就不多说了.
cxgrid. 有导出excel之函数.
写个存储过程,传参数到cxgrid 即可,导资料到excel
create procedure pro_seekSales (
@storeID varchar(10),@styleID varchar(10) @date1 datetime,@date2 datetime)
As
begin
select t2.* from tbl_sales t2 left join tbl_style t1 on t1.styleID=t2.styleID left join tbl_store t3 on t2.storeID=t3.storeID
where t2.dates between @date1 and @date2 and t2.storeID= @storeID
and t2.styleID= @goodstyle
end
解决思路大致如上,细节的算法自己try try....coding嘛毕竟还是要自己动手嘀.
cxgrid. 有导出excel之函数.
写个存储过程,传参数到cxgrid 即可,导资料到excel
create procedure pro_seekSales (
@storeID varchar(10),@styleID varchar(10) @date1 datetime,@date2 datetime)
As
begin
select t2.* from tbl_sales t2 left join tbl_style t1 on t1.styleID=t2.styleID left join tbl_store t3 on t2.storeID=t3.storeID
where t2.dates between @date1 and @date2 and t2.storeID= @storeID
and t2.styleID= @goodstyle
end
解决思路大致如上,细节的算法自己try try....coding嘛毕竟还是要自己动手嘀.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询