先看客户端里的SQL代码SELECT
  DPTNO    = B.DPTNO,
  DPTNAME  = B.DPTNAME,
  BEGCS    = sum(A.BEGCS),
  DOC012CS = sum(A.DOC012CS),
  DOC04CS  = sum(A.DOC04CS),
  DOCINCS  = sum(A.DOCINCS),
  DOC03NET = SUM(A.DOC03NET),
  DOC03CS  = sum(A.DOC03CS),
  DOC21NET = SUM(A.DOC21NET),
  DOC21CS  = sum(A.DOC21CS),
  DOC231CS = sum(A.DOC231CS),
  DOC232CS = sum(A.DOC232CS),
  DOC29CS  = sum(A.DOC29CS),
  DOCOUTCS = sum(A.DOCOUTCS),
  ENDCS    = sum(A.ENDCS),
  MGNAMT   = SUM(DOC21NET)+SUM(DOC03NET) - SUM(DOC21CS) - SUM(DOC231CS) - SUM(DOC232CS)-SUM(DOC03CS) - SUM(DOC29CS),
  MGNRAT   =CASE WHEN (SUM(DOC21NET)+SUM(DOC03NET) - SUM(DOC21CS) - SUM(DOC231CS)
              - SUM(DOC232CS)-SUM(DOC03CS) - SUM(DOC29CS))=0 OR SUM(DOC21NET)=0 THEN 0
             ELSE (SUM(DOC21NET)+SUM(DOC03NET) - SUM(DOC21CS) - SUM(DOC231CS) - SUM(DOC232CS)-SUM(DOC03CS)
             - SUM(DOC29CS))/SUM(DOC21NET)*100 END,
  ZZL      =CASE WHEN SUM(DOC21NET)=0 OR SUM(ENDCS)=0 THEN 0 else SUM(DOC21NET)/SUM(ENDCS) * 100 END ,bdat=:BDAT,edat=:EDAT
FROM
(
  SELECT
  DPTID    = DBO.FINDPARENTDPT(DPTID,:NUM),
  BEGCS    = A.BEGCS,
  DOC012CS = A.DOC012CS,
  DOC04CS  = A.DOC04CS,
  DOCINCS  = A.DOCINCS,
  DOC03NET = A.DOC03NET,
  DOC03CS  = A.DOC03CS,
  DOC21NET = A.DOC21NET,
  DOC21CS  = A.DOC21CS,
  DOC231CS = A.DOC231CS,
  DOC232CS = A.DOC232CS,
  DOC29CS  = A.DOC29CS,
  DOCOUTCS = A.DOCOUTCS,
  ENDCS    = A.ENDCS
  FROM DBO.GETSYL(:BDAT,:EDAT) A,BASPLUMAIN B,BASPLUPRC C
  WHERE  A.PLUID=B.PLUID AND B.PLUID=C.PLUID AND [ISRAT]
) A,BASDEPT B
WHERE A.DPTID=B.ID AND [DPTNO]
GROUP BY DPTNO,DPTNAME
ORDER BY DPTNO
下面是可以在查询分析器里出结果的SQLSELECT
  DPTNO    = B.DPTNO,
  DPTNAME  = B.DPTNAME,
  BEGCS    = sum(A.BEGCS),
  DOC012CS = sum(A.DOC012CS),
  DOC04CS  = sum(A.DOC04CS),
  DOCINCS  = sum(A.DOCINCS),
  DOC03NET = SUM(A.DOC03NET),
  DOC03CS  = sum(A.DOC03CS),
  DOC21NET = SUM(A.DOC21NET),
  DOC21CS  = sum(A.DOC21CS),
  DOC231CS = sum(A.DOC231CS),
  DOC232CS = sum(A.DOC232CS),
  DOC29CS  = sum(A.DOC29CS),
  DOCOUTCS = sum(A.DOCOUTCS),
  ENDCS    = sum(A.ENDCS),
  MGNAMT   = SUM(DOC21NET)+SUM(DOC03NET) - SUM(DOC21CS) - SUM(DOC231CS) - SUM(DOC232CS)-SUM(DOC03CS) - SUM(DOC29CS),
  MGNRAT   =CASE WHEN (SUM(DOC21NET)+SUM(DOC03NET) - SUM(DOC21CS) - SUM(DOC231CS)
              - SUM(DOC232CS)-SUM(DOC03CS) - SUM(DOC29CS))=0 OR SUM(DOC21NET)=0 THEN 0
             ELSE (SUM(DOC21NET)+SUM(DOC03NET) - SUM(DOC21CS) - SUM(DOC231CS) - SUM(DOC232CS)-SUM(DOC03CS)
             - SUM(DOC29CS))/SUM(DOC21NET)*100 END,
  ZZL      =CASE WHEN SUM(DOC21NET)=0 OR SUM(ENDCS)=0 THEN 0 else SUM(DOC21NET)/SUM(ENDCS) * 100 END ,bdat='2012-01-01',edat='2012-01-31'
FROM
(
  SELECT
  DPTID    = DBO.FINDPARENTDPT(DPTID,1),
  BEGCS    = A.BEGCS,
  DOC012CS = A.DOC012CS,
  DOC04CS  = A.DOC04CS,
  DOCINCS  = A.DOCINCS,
  DOC03NET = A.DOC03NET,
  DOC03CS  = A.DOC03CS,
  DOC21NET = A.DOC21NET,
  DOC21CS  = A.DOC21CS,
  DOC231CS = A.DOC231CS,
  DOC232CS = A.DOC232CS,
  DOC29CS  = A.DOC29CS,
  DOCOUTCS = A.DOCOUTCS,
  ENDCS    = A.ENDCS
  FROM DBO.GETSYL('2012-01-01','2012-01-31') A,BASPLUMAIN B,BASPLUPRC C
  WHERE  A.PLUID=B.PLUID AND B.PLUID=C.PLUID AND ADDTX=17
) A,BASDEPT B
WHERE A.DPTID=B.ID AND 1 = 1
GROUP BY DPTNO,DPTNAME
ORDER BY DPTNO
我也不知道为啥会这样, 难道是环境配置有问题?如果是环境问题,那么,应当从哪几个方面入手?

解决方案 »

  1.   

    1.确保代码在查询分析器和客户端是一样的.
    2.确保客户端能连接你服务器的SQL SERVER.
      

  2.   

    你这个是什么数据库?是MS-SQL SERVER 吗?我怎么看着不像呢?
    FROM DBO.GETSYL(:BDAT,:EDAT) A,BASPLUMAIN B,BASPLUPRC C
      WHERE  A.PLUID=B.PLUID AND B.PLUID=C.PLUID AND [ISRAT]
    ) A,BASDEPT B
    WHERE A.DPTID=B.ID AND [DPTNO]
    GROUP BY DPTNO,DPTNAME
    ORDER BY DPTNO
    这段代码中的[ISRAT] 和 [DPTNO] 是什么东西? 
    在MS-SQL SERVER 条件是colname >4这种,你这个是直接放到这,看不懂。 
      

  3.   

    如果:BDAT,:EDAT,[ISRAT],[DPTNO]都是变量,
    那客户端传进去的值 和 查询分析器里使用的参数值都一样吗?
      

  4.   

    数据库是 SQLServer 2000 :BDAT,:EDAT 是日期型变量 和查询分析器里使用的参数都是一样的. 
      

  5.   

    代码在查询分析器里和在客户端是相同的, 但是恶心的是.
    客户端就是不出数据
    并且报错
    fastDataSet1_ADO: cannot perform this operation on a cloased dataset.
    汗....问题是,以前是好的,在服务器重做之后就出现这样的问题.
    哎.....