关于query查询的问题,怎么没人能解答呀?

时间:2022-10-22 08:07:12
我在做好一个仓库系统后,安装在其它电脑上出现了意想不到的事情,
其中有张仓库明细日报表的查询,是通过两张临时表用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);

#3


格式化日期数据FormatDateTime('YYYY-MM-DD',d); 
或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);

#3


格式化日期数据FormatDateTime('YYYY-MM-DD',d); 
或FormatDateTime('YYYY-MM-DD HH:NN:SS',d); 
但要注意日期的加减一的问题,如果用到系统日期,可以写语句:
  longdateformat := 'yyyy-mm-dd';
  shortdateformat := 'yyyy-mm-dd';

将系统日期加长;

#4


但为什么在我的机子上可以正常查询呢?

#5


可能你机器上的短日期格式已格式化为长日期了