ASP错误' 80004005'使用具有左连接的子查询执行MA Access多行查询时

时间:2015-07-16 16:25:30

标签: ms-access asp-classic subquery ms-access-2010

当我使用子查询和左连接执行大型Access查询时,错误发生在传统的ASP页面上。请注意,相同的ASP代码可以在同一个网页以及其他ASP页面中与许多其他查询(较小的一个只有一个左连接)一起使用,因此错误必须与我的查询本身有关。意见,我只是不知道ASP为什么会抛出错误而且无法正常工作。

在线上生成错误 - >设置rst = connn.Execute(sqlstr)错误指向此行并说出"错误' 80004005'"并没有说别的。相同的查询(%替换为*)在MS Access中运行绝对没有任何错误。 ASP页面的代码如下,在页面上打印时查询(或在MS Access中),我在这里包含换行符,以便于阅读:

Dim Connn
Dim rst
Set connn = Server.CreateObject("ADODB.Connection")
connn.Open ("Provider=Microsoft.ACE.OLEDB.12.0; Data          
Source=C:\inetpub\wwwroot\Database1.accdb")

Dim sqlstr

sqlstr = "SELECT Left(cdate(mid(KPISource.ddate,5,2) & '/' & right(KPISource.ddate,2) & '/' & left(KPISource.ddate,4)), 10) AS [Period ended], CR.[Current Ratio], AT.[A/R Turnover Ratio], AT.DSO, GM.Margin, ICR.[Interest Coverage Ratio], ETR.[Effective Tax Rate], DE.[Debt Equity Ratio]"
sqlstr = sqlstr & " FROM (((((KPISource LEFT JOIN (SELECT ddate, Round((Avg(val) / (Select Avg(val) From KPISource where account = 'LiabilitiesCurrent' and sic=3290)), 3) AS [Current Ratio] FROM KPISource WHERE account='AssetsCurrent' and sic=3290 GROUP BY ddate)  AS CR ON KPISource.ddate=CR.ddate)" 
sqlstr = sqlstr & " LEFT JOIN (SELECT ddate, Format((Avg(val) / (select avg(val) from KPISource where sic=3290 and (account Like 'AccountsReceivablesNetCurrent%' or account Like 'ReceivablesNetCurrent%'))), 'Fixed') AS [A/R Turnover Ratio],"
sqlstr = sqlstr & " IIF(Format([A/R Turnover Ratio], 'Fixed')='0.00','0.00',Format((365 / [A/R Turnover Ratio]), 'Fixed')) AS DSO FROM KPISource WHERE sic=3290 and (accou.....etc...
Set rst = connn.Execute(sqlstr) 

在页面上打印或MS Access中的完整查询在下面(在ASP页面中,我已将*替换为%):

SELECT Left(cdate(mid(KPISource.ddate,5,2) & '/' & right(KPISource.ddate,2) & '/' & left(KPISource.ddate,4)), 10) AS [Period ended], CR.[Current Ratio], AT.[A/R Turnover Ratio], AT.DSO, GM.Margin, ICR.[Interest Coverage Ratio], ETR.[Effective Tax Rate], DE.[Debt Equity Ratio]
FROM 

(((((KPISource LEFT JOIN (SELECT ddate, Round((Avg(val) / (Select Avg(val) From KPISource where account = 'LiabilitiesCurrent' and sic=3290)), 3) AS [Current Ratio] FROM KPISource WHERE account='AssetsCurrent' and sic=3290 GROUP BY ddate)  AS CR ON KPISource.ddate=CR.ddate) 

LEFT JOIN (SELECT ddate, Format((Avg(val) / (select avg(val) from KPISource where sic=3290 and (account Like 'AccountsReceivablesNetCurrent*' or account Like 'ReceivablesNetCurrent*'))), 'Fixed') AS [A/R Turnover Ratio], IIF(Format([A/R Turnover Ratio], 'Fixed')='0.00','0.00',Format((365 / [A/R Turnover Ratio]), 'Fixed')) AS DSO FROM KPISource WHERE sic=3290 and (account='Revenues' or account='SalesRevenueNet' or account='SalesRevenueGoodsNet') GROUP BY ddate)  AS [AT] ON KPISource.ddate=AT.ddate) 

LEFT JOIN (SELECT ddate, Format((Avg(val) / (select avg(val) from KPISource Where sic=3290 and account='Revenues' or account='SalesRevenueNet' or account='SalesRevenueGoodsNet')), 'Percent') AS Margin FROM KPISource WHERE account='GrossProfit' and sic=3290 GROUP BY ddate)  AS GM ON KPISource.ddate=GM.ddate) 

LEFT JOIN (SELECT ddate, Format((Avg(val) / (select Avg(val) from KPISource WHERE account='InterestExpense' and sic=3290)), 'Percent') AS [Interest Coverage Ratio] FROM KPISource WHERE sic=3290 and (account='IncomeLossFromContinuingOperationsBeforeIncomeTaxesMinorityInterestAndIncomeLossFromEquityMethodInvestments' or account='IncomeLossFromContinuingOperationsBeforeInterestExpenseInterestIncomeIncomeTaxesExtraordinaryItemsNoncontrollingInterestsNet' or account='EarningsBeforeInterestAndTaxes') GROUP BY ddate)  AS ICR ON KPISource.ddate=ICR.ddate) 

LEFT JOIN (SELECT ddate, Format((Avg(val) / (select avg(val) from KPISource Where sic=3290 and (account='IncomeLossFromContinuingOperationsBeforeIncomeTaxesMinorityInterestAndIncomeLossFromEquityMethodInvestments' or account='IncomeLossFromContinuingOperationsBeforeInterestExpenseInterestIncomeIncomeTaxesExtraordinaryItemsNoncontrollingInterestsNet' or account='EarningsBeforeInterestAndTaxes'))), 'Percent') AS [Effective Tax Rate] FROM KPISource WHERE account='IncomeTaxExpenseBenefit' and sic=3290 GROUP BY ddate)  AS ETR ON KPISource.ddate=ETR.ddate) 

LEFT JOIN (SELECT ddate, Format((Avg(val) / (select avg(val) from KPISource where sic=3290 and Not (account Like '*LiabilitiesAnd*') and (account Like '*StockholdersEquity*' or account Like '*Shareholders*'))), 'Percent') AS [Debt Equity Ratio] FROM KPISource WHERE sic=3290 and Not (account Like '*Repayments*' or account Like '*Proceeds*' or account Like '*Payments*' or account Like '*Forgiveness*') and (account Like '*Debt*' or account Like '*NotesPayable*' or account Like '*LeaseObligations*' or account Like '*LinesOfCredit*' or account Like '*Borrowings*' or account Like '*Loans*') GROUP BY ddate)  AS DE ON KPISource.ddate=DE.ddate

WHERE (CR.[Current Ratio]) Is Not Null and (AT.[A/R Turnover Ratio]) Is Not Null and GM.Margin Is Not Null and (ICR.[Interest Coverage Ratio]) Is Not Null
GROUP BY KPISource.ddate, CR.[Current Ratio], AT.[A/R Turnover Ratio], AT.DSO, GM.Margin, ICR.[Interest Coverage Ratio], ETR.[Effective Tax Rate], DE.[Debt Equity Ratio];

我在代码中哪里出错了?任何帮助都非常感谢。另外,作为旁注,我将响应缓冲限制增加到64 MB,并在IIS服务器上将队列超时和会话超时设置为2分钟,并重新启动它,仍然没有结果。

1 个答案:

答案 0 :(得分:0)

我终于得到了它的工作,但没有理由它的工作原理。我所做的就是:根据HansUp的建议,我尝试只用一个左连接执行查询,它有效。然后我添加了第二个左连接,它工作,然后我添加了第三个&等到最后一个。现在它有效!

我没有改变任何东西或纠正任何事情。我只是在上面做了它现在有效。不确定ASP解析或ADo是否需要一些时间等但是它有效,所以只是想让任何人知道谁可能已经审查了这个问题。

相关问题