2015-11-04 127 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