Delphi 6 BUG,是个高手的进来看看~~~~~~~~~~~~~~~~~~~~~~~~急急急急急急急急急急急急急急急急急急急急急急(100分)

  • 主题发起人 主题发起人 我来也
  • 开始时间 开始时间

我来也

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi 6中的问题。
用ADOConnection连接数据库。
用一个ADOQuery做Master;
用另一个ADOQuery做Detail;
中间用DataSource连接
在Detail的SQL中写入语句如下:
SELECT MB_XMMX.CPDM,MB_HS.XMMC,
SUM(MB_HS.SL) AS CL
,(SUM(MB_HS.SL)/412393) AS CPBZ
,(SUM(MB_HS.SL)/537940) AS CPL
,(CASE SUM(MB_HS.SL) WHEN 0 THEN 0 ELSE 1.1442*SUM(MB_HS.JE)/SUM(MB_HS.SL) END) AS DWCB
,(1.1442*SUM(MB_HS.JE)) AS CBJE
,(CASE SUM(MB_HS.SL) WHEN 0 THEN 0 ELSE SUM(MB_HS.JE)/SUM(MB_HS.SL) END) AS QSXSDJ
,SUM(MB_HS.JE) AS QSXSJE
FROM MB_HS
INNER JOIN FCBMMC ON FCBMMC.FCMC=MB_HS.FCMC
INNER JOIN MB_CJ ON MB_CJ.FCDM=FCBMMC.FCDM
AND MB_CJ.CJMC=MB_HS.CJMC
INNER JOIN MB_GX ON MB_GX.FCDM=FCBMMC.FCDM
AND MB_GX.CJBM=MB_CJ.CJBM
AND MB_GX.GXMC=MB_HS.GXMC


INNER JOIN MB_KM ON MB_KM.KMMC=MB_HS.KMMC
INNER JOIN MB_XM ON MB_XM.XMMC=MB_HS.XMMC
INNER JOIN MB_XMLX ON MB_XMLX.XMLXBM=MB_XM.XMLX
INNER JOIN MB_XMMX ON MB_XMMX.FCDM=FCBMMC.FCDM
AND MB_XMMX.CJBM=MB_CJ.CJBM
AND MB_XMMX.GXBM=MB_GX.GXBM
AND MB_XMMX.KMBM=MB_KM.KMBM
AND MB_XMMX.XMBM=MB_XM.XMBM
WHERE
MB_GX.GXBM<>'000'
AND MB_HS.KMMC='产成品'
AND MB_XMLX.XMLXMC='主产品'
AND MB_HS.JLDWMC='公斤'
AND MB_HS.RQ=:RQ
AND MB_HS.FCMC=:FCMC
AND MB_HS.CJMC=:CJMC
GROUP BY MB_XMMX.CPDM,MB_HS.XMMC
UNION ALL
SELECT MB_XMMX.CPDM,MB_HS.XMMC,
SUM(MB_HS.SL) AS CL
,(SUM(MB_HS.SL)/412393) AS CPBZ
,(SUM(MB_HS.SL)/537940) AS CPL
,(CASE SUM(MB_HS.SL) WHEN 0 THEN 0 ELSE 1.1442*SUM(MB_HS.JE)/SUM(MB_HS.SL) END) AS DWCB
,(1.1442*SUM(MB_HS.JE)) AS CBJE
,(CASE SUM(MB_HS.SL) WHEN 0 THEN 0 ELSE SUM(MB_HS.JE)/SUM(MB_HS.SL) END) AS QSXSDJ
,SUM(MB_HS.JE) AS QSXSJE
FROM MB_HS
INNER JOIN FCBMMC ON FCBMMC.FCMC=MB_HS.FCMC
INNER JOIN MB_CJ ON MB_CJ.FCDM=FCBMMC.FCDM
AND MB_CJ.CJMC=MB_HS.CJMC
INNER JOIN MB_GX ON MB_GX.FCDM=FCBMMC.FCDM
AND MB_GX.CJBM=MB_CJ.CJBM
AND MB_GX.GXMC=MB_HS.GXMC


INNER JOIN MB_KM ON MB_KM.KMMC=MB_HS.KMMC
INNER JOIN MB_XM ON MB_XM.XMMC=MB_HS.XMMC
INNER JOIN MB_XMLX ON MB_XMLX.XMLXBM=MB_XM.XMLX
INNER JOIN MB_XMMX ON MB_XMMX.FCDM=FCBMMC.FCDM
AND MB_XMMX.CJBM=MB_CJ.CJBM
AND MB_XMMX.GXBM=MB_GX.GXBM
AND MB_XMMX.KMBM=MB_KM.KMBM
AND MB_XMMX.XMBM=MB_XM.XMBM
WHERE
MB_GX.GXBM<>'000'
AND MB_HS.KMMC='产成品'
AND MB_XMLX.XMLXMC='膘油类'
AND MB_HS.JLDWMC='公斤'
AND MB_HS.RQ=:RQ
AND MB_HS.FCMC=:FCMC
AND MB_HS.CJMC=:CJMC
GROUP BY MB_XMMX.CPDM,MB_HS.XMMC
UNION ALL
SELECT MB_XMMX.CPDM,MB_HS.XMMC,
SUM(MB_HS.SL) AS CL
,(SUM(MB_HS.SL)/412393) AS CPBZ
,(SUM(MB_HS.SL)/537940) AS CPL
,(CASE SUM(MB_HS.SL) WHEN 0 THEN 0 ELSE 1.1442*SUM(MB_HS.JE)/SUM(MB_HS.SL) END) AS DWCB
,(1.1442*SUM(MB_HS.JE)) AS CBJE
,(CASE SUM(MB_HS.SL) WHEN 0 THEN 0 ELSE SUM(MB_HS.JE)/SUM(MB_HS.SL) END) AS QSXSDJ
,SUM(MB_HS.JE) AS QSXSJE
FROM MB_HS
INNER JOIN FCBMMC ON FCBMMC.FCMC=MB_HS.FCMC
INNER JOIN MB_CJ ON MB_CJ.FCDM=FCBMMC.FCDM
AND MB_CJ.CJMC=MB_HS.CJMC
INNER JOIN MB_GX ON MB_GX.FCDM=FCBMMC.FCDM
AND MB_GX.CJBM=MB_CJ.CJBM
AND MB_GX.GXMC=MB_HS.GXMC


INNER JOIN MB_KM ON MB_KM.KMMC=MB_HS.KMMC
INNER JOIN MB_XM ON MB_XM.XMMC=MB_HS.XMMC
INNER JOIN MB_XMLX ON MB_XMLX.XMLXBM=MB_XM.XMLX
INNER JOIN MB_XMMX ON MB_XMMX.FCDM=FCBMMC.FCDM
AND MB_XMMX.CJBM=MB_CJ.CJBM
AND MB_XMMX.GXBM=MB_GX.GXBM
AND MB_XMMX.KMBM=MB_KM.KMBM
AND MB_XMMX.XMBM=MB_XM.XMBM
WHERE
MB_GX.GXBM<>'000'
AND MB_HS.KMMC='产成品'
AND MB_XMLX.XMLXMC='分割类'
AND MB_HS.JLDWMC='公斤'
AND MB_HS.RQ=:RQ
AND MB_HS.FCMC=:FCMC
AND MB_HS.CJMC=:CJMC
GROUP BY MB_XMMX.CPDM,MB_HS.XMMC

单击“确认”,Delphi自动退出。
各位高手,救救我吧!

 
是你的SQL语句太长。建议你用多个视图来实现这个查询。
如果你是用本地数据库,比如ACCESS,你可以ACCESS里测试一下你这段代码。
如果你是SQL SERVER。你用查询分析器分析一下。
特别是本地数据库,对一个查询的语句长度有限制
 
我试过了,用第一个查询是可以的。只要一连接多个查询就不行了,另外在SQL Server的查询分析器
里也是可以的(所有查询都算上)。
 
如果是你的查询有问题,当在ADOQUERY组件的SQL的弹出窗口中填入SQL语句,点确定后并
不会提示错误或出错退出,而会在运行或把ADOQUERY的ACTIVE设为ENABLE的时候提示出错

而会让你所提的问题出现的最大可能,就是查询语句过长。
如果用SQL SERVER建视图或存储过程,它可容纳的SQL语句很大(具体的大小你可看它T-SQL
的帮助)
而DELPHI的编辑工具就不行。它的限制大小要比SQL SERVER的编辑工具来得小。
建议你用这些语句建一个视图来访问看看,也许能解决问题:)
 
如果不是SQL的问题,就是delphi自己的问题了。
在数据库中解决这个问题吧。
 
看来是sql太长了
 
我没看你的SQL,但我想是你的Params中有未关联的
 
同志们,我是说Delphi6会自动退出的。有没有办法解决呀!
 
解决方法就是把这段语句放到视图中,然后调用这个视图来做你的从表不就可以了?
 
这个问题好象是DELPHI的BUG
我也见到过,但是我是在改字体时,就退出。重新安装系统就可以解决你的问题。
 
重装系统没有用呀!

有没有人知道解决的办法?分数随你要好了?
 
写到存储过程中,再由delphi调用呢?
 
delphi不能接受这样长的参数,这是DELPHI的一个BUG,现建立视图或者用存储过程实现啊
 
呵呵~~~

用分区视图,或存储过程!!!
没必须一定要这样的!!
 
我的上帝,我也遇到過這樣的問題呀!
后來我只好把它們分開來一個一個 的做才解決!
 
后退
顶部