其中有张仓库明细日报表的查询,是通过两张临时表用query控件辗转返回最终数据的,
在我这台电脑上可以看到正确的结果,但在公司局域网里的所有其它
电脑上安装运行后(注意:是全部电脑),这张报表里却有几列代表当日进、出仓数
的字段却返回空值,由此导致报表显示这几列为空,我已查过不关报表设计的事,
而是query控件返回了空的数据所致。
以下是我设计的数据表
---------------------------------------------------------------------------------------
布仓出入库表 Clothstoreinfo
---------------------------------------------------------------------------------------
字段名 意 义 类型 长度 允许空值 关 联
---------------------------------------------------------------------------------------
Date 日期 Date 8 No 主索引
Client 客户 Char 10 Yes
Gauzebranch 纱支 Char 20 Yes
Clothno 布号 Char 10 Yes 副索引
Pieceamount 匹数 Int 5 No
Deliveramount 交胚数(入库磅数)Float 9 Yes
Delivername 交货人姓名 Char 8 Yes
Stockamount 库存磅数 Float 9 Yes
Outstoreamount 出库磅数 Float 9 Yes
Remark 备注 Memo 100 Yes
State 状态 Int 1 No 副索引
Monthend 月结否 Int 1 No 副索引
---------------------------------------------------------------------------------------- State说明:1=布仓入库;2=布仓出库;
------------------------------------------------------------------------------------------
18、布仓日报表月结库 Clothmonthend
-------------------------------------------------------------------------------------------
字段名 意 义 类型 长度 允许空值 关 联
-------------------------------------------------------------------------------------------
Year 年份 Int 4 No 主索引
Month 月份 Int 2 No 副索引
Client 客户 Char 8 Yes
Inamount 本月进仓磅数 Float 10 Yes
Outamount 本月出仓磅数 Float 10 Yes
Stockamount 本月结存磅数 Float 10 Yes
--------------------------------------------------------------------------------------------
库存以客户client及布号clothno来划分(相同的累计)
报表查询日期d=date->Text,最终数据用query控件返回,再传递给报表。
--------------------------------------------------------------------------------------------
报表格式如下:
--------------------------------------------------------------------------------------------
客 户 | 布 号 | 上月结存 | 当日进仓 | 本月进仓累计 | 当日出仓 | 本月出仓累计 | 本月结存
client |clothno | laststock|enteronday| totalenter | outonday | totalout | currentstock
---------------------------------------------------------------------------------------------
以下是SQL查询语句:
//第一张临时表#tempmxcloth
sql=" SELECT client,clothno,";
sql+="laststock=null, enteronday=null,";
sql+="totalenter=sum(deliveramount),";
sql+="outonday=null, totalout=null, currentstock=null";
sql+=" INTO #tempmxcloth";
sql+=" FROM clothstoreinfo";
sql+=" WHERE date BETWEEN '"+IntToStr(year)+"-"+IntToStr(month)+"-01'";
sql+=" AND '"+DateToStr(d)+" 23:59:59'";
sql+=" AND (state=1 OR state=2)";
sql+=" GROUP BY client,clothno";
sql+=" ORDER BY client,clothno";
Query(sql);
//第二张临时表#mxcloth
sql=" SELECT client,clothno,";
sql+="laststock,";
sql+="enteronday=(SELECT SUM(deliveramount) FROM clothstoreinfo";
sql+=" WHERE date BETWEEN '"+DateToStr(d)+"' AND '"+DateToStr(d)+" 23:59:59'";
sql+=" AND state=1 AND clothstoreinfo.clothno=#tempmxcloth.clothno),";
sql+="totalenter,";
sql+="outonday=(SELECT SUM(outstoreamount) FROM clothstoreinfo";
sql+=" WHERE date BETWEEN '"+DateToStr(d)+"' AND '"+DateToStr(d)+" 23:59:59'";
sql+=" AND state=2 AND clothstoreinfo.clothno=#tempmxcloth.clothno),";
sql+="totalout=(SELECT SUM(outstoreamount) FROM clothstoreinfo";
sql+=" WHERE date BETWEEN '"+IntToStr(year)+"-"+IntToStr(month)+"-01'";
sql+=" AND '"+DateToStr(d)+" 23:59:59'";
sql+=" AND state=2 AND clothstoreinfo.clothno=#tempmxcloth.clothno),";
sql+="currentstock";
sql+=" INTO #mxcloth";
sql+=" FROM #tempmxcloth";
sql+=" ORDER BY client,clothno";
Query(sql);
sql="SELECT * FROM #mxcloth";
sql+=" ORDER BY client,clothno";
Query(sql); //这是最终的报表查询数据
其中字段laststock,currentstock另外计算。
但我发现在我的机子上正常的数据,在公司所有其它电脑上,有两列即
当日进仓enteronday,当日出仓outonday返回的是空值,即这两列没有数据,
但事实上是有的,在我的机子上运行也能看见。
到底是什么原因呢?我都快急疯了!不好意思,程序是用C++builder编的,
但它与Delphi是一样的。所以也就跑来这里了。
请各位高手帮帮忙吧,这已是我能给的最高分了。
5 个解决方案
#1
是日期格式的问题吧,到控制面版里改一下日期格式试试
#2
DateToStr(d)
改为
formatdatetime('yyyy-mm-dd',d);
改为
formatdatetime('yyyy-mm-dd',d);
#3
格式化日期数据FormatDateTime('YYYY-MM-DD',d);
或FormatDateTime('YYYY-MM-DD HH:NN:SS',d);
但要注意日期的加减一的问题,如果用到系统日期,可以写语句:
longdateformat := 'yyyy-mm-dd';
shortdateformat := 'yyyy-mm-dd';
将系统日期加长;
或FormatDateTime('YYYY-MM-DD HH:NN:SS',d);
但要注意日期的加减一的问题,如果用到系统日期,可以写语句:
longdateformat := 'yyyy-mm-dd';
shortdateformat := 'yyyy-mm-dd';
将系统日期加长;
#4
但为什么在我的机子上可以正常查询呢?
#5
可能你机器上的短日期格式已格式化为长日期了
#1
是日期格式的问题吧,到控制面版里改一下日期格式试试
#2
DateToStr(d)
改为
formatdatetime('yyyy-mm-dd',d);
改为
formatdatetime('yyyy-mm-dd',d);
#3
格式化日期数据FormatDateTime('YYYY-MM-DD',d);
或FormatDateTime('YYYY-MM-DD HH:NN:SS',d);
但要注意日期的加减一的问题,如果用到系统日期,可以写语句:
longdateformat := 'yyyy-mm-dd';
shortdateformat := 'yyyy-mm-dd';
将系统日期加长;
或FormatDateTime('YYYY-MM-DD HH:NN:SS',d);
但要注意日期的加减一的问题,如果用到系统日期,可以写语句:
longdateformat := 'yyyy-mm-dd';
shortdateformat := 'yyyy-mm-dd';
将系统日期加长;
#4
但为什么在我的机子上可以正常查询呢?
#5
可能你机器上的短日期格式已格式化为长日期了