2015-11-04 65 views
0

我有一个正在处理的数据库。它由拆分数据库组成,包括正面和多个到后端表的链接。在后台运行查询

我正在制作一份由15个不同的子报告组成的报告。我有一个表格允许我输入报告的开始日期和结束日期。有一个按钮可以生成最终报告。问题是,当我想要生成报告时,我将不得不为每个子报告重新运行每个不同的生成表查询。与此相关的问题是每个查询会有两个警告,一个是删除我的表,另一个是添加到表中的行。

我在线研究,发现这个代码运行Execute命令将删除所有的警告。我是新来的VB,但我想我会试一试,我得到以下运行时错误“3078:MS Access数据库引擎找不到输入表或查询”。我查了查询名称,它匹配,所以我不知道为什么我得到这个错误。我只试过了15个查询中的一个,所以我可以确定它的工作原理。一旦我得到这个工作,我的另一个问题是将所有这些组合成模块中的15个执行命令工作?

Private Sub PS_Report_Date_AfterUpdate() 

Dim dbs As DAO.Database 
Dim lngRowsAffected As Long 
Dim lngRowsDeleted As Long 
Dim sql$ 

sql = "[qry_Maui_Division_KWH_Produced]" 

Set dbs = CurrentDb 

' Execute runs both saved queries and SQL strings 
dbs.Execute sql, dbFailOnError 

' Get the number of rows affected by the Action query. 
' You can display this to the user, store it in a table, or trigger an action 
' if an unexpected number (e.g. 0 rows when you expect > 0). 
lngRowsAffected = dbs.RecordsAffected 

dbs.Execute "DELETE FROM tbl_Maui_Division_KWH_Produced WHERE Bad", dbFailOnError 
lngRowsDeleted = dbs.RecordsAffected  
End Sub 

SQL代码:

SELECT 
tbl_MPP_DailyGenerationReport.DateLog, 
[MPP_Daily_Gross_Gen_kWh]+[Total_Gross_kWh] AS Maui_Gross_kWh_Produced, 
[Total_Aux]+[Total_Aux_kWh] AS Maui_Gross_Aux_kWh_Produced, [MPP_Daily_Gross_Gen_kWh]-[Total_Aux]+[Total_Net_kWh] AS Maui_Net_kWh_Produced, 
Round(([Total_MBTU_Burned]*1000000)/([MPP_Daily_Gross_Gen_kWh]+[Total_Gross_kWh]),0) AS Maui_Gross_BTU_kWh, 
Round([Total_MBTU_Burned]*1000000/([MPP_Daily_Gross_Gen_kWh]-[Total_Aux]+[Total_Net_kWh]),0) AS Maui_Net_BTU_kWh, 
Round(([MPP_Daily_Gross_Gen_kWh]+[Total_Gross_kWh])/[Total_Barrels_Burned],0) AS Maui_Gross_kWh_BBL, 
Round(([MPP_Daily_Gross_Gen_kWh]-[Total_Aux]+[Total_Net_kWh])/[Total_Barrels_Burned],0) AS Maui_Net_kWh_BBL 

INTO tbl_Maui_Division_KWH_Produced 

FROM ((tbl_MPP_DailyGenerationReport 
INNER JOIN tbl_KPP_DailyGenerationReport 
ON tbl_MPP_DailyGenerationReport.DateLog = tbl_KPP_DailyGenerationReport.DateLog) 
INNER JOIN tbl_MPP_Aux_DailyGenerationReport 
ON tbl_MPP_DailyGenerationReport.DateLog = tbl_MPP_Aux_DailyGenerationReport.DateLog) 
INNER JOIN qry_Maui_Total_Fuel_Burned 
ON tbl_MPP_DailyGenerationReport.DateLog = qry_Maui_Total_Fuel_Burned.DateLog 
WHERE (((tbl_MPP_DailyGenerationReport.DateLog)=[Forms]![Power Supply Reports]![PS_Report_Date]));​ 
+0

是什么'qry_Maui_Division_KWH_Produced'吗?你可以发布它的SQL吗?你直接运行它(没有vba)吗? – Andre

+0

我刚刚证实,它没有vba工作。它创建一行数据并将其放入一个表格中,然后引用该表格。我把sql代码放在帖子中。 – lunar8nrg

+0

好吧,我添加了Option Explicit,并且陷入了调试问题。我已经删除了我的数据库中的表对象,但是现在当我执行代码时,出现以下运行时错误“3061:太少参数。预期1”:dbs.Execute sql,dbFailOnError。从我的局部变量看,所有的参数看起来都已经到位。任何想法,为什么我仍然得到一个错误? – lunar8nrg

回答

1

这将运行您的查询,而无需警告:

Private Sub PS_Report_Date_AfterUpdate() 
    DoCmd.SetWarnings False 
    DoCmd.OpenQuery "qry_Maui_Division_KWH_Produced" 
    DoCmd.RunSQL "DELETE FROM tbl_Maui_Division_KWH_Produced WHERE Bad" 
    DoCmd.SetWarnings True 
End Sub 
+0

谢谢@neuralgroove 这为我工作,除了现在我得到“输入参数值:坏”。我假设这是用于数据中的任何错误,你知道我可以摆脱这种提示吗? – lunar8nrg

+0

我要说一些有关该查询的内容,WHERE子句正在寻找一个条件(比如WHERE Field1 ='bad'或者其他什么东西)而没有看到你的数据集我不确定这个条件是什么 – neuralgroove

+0

我对那个WHERE的理解子句是它有一个坏数据点或一个“空”数据点,那么你会从表中删除它。在此期间,我从VBA代码中移除了它,但将来有没有办法查看空值并输出N/A而不是从表中删除它? – lunar8nrg