2015-11-04 4 views
0

У меня есть база данных, над которой я работаю. Он состоит из разделенной базы данных, как передней, так и нескольких ссылок на бэкэнд-таблицы.Запустить запрос в фоновом режиме

Я работаю над докладом, который состоит из 15 различных подзаголовков. У меня есть форма, которая позволяет мне вводить дату начала и дату окончания отчета. Есть кнопка, которая генерирует окончательный отчет. Проблема в том, когда я хочу сгенерировать отчет, мне пришлось бы повторно запускать каждый из разных запросов таблицы make для каждого из под-отчетов. Проблема заключается в том, что для каждого запроса будет 2 предупреждения, один для удаления моей таблицы и другой для строк, добавленных в таблицу.

Я исследовал онлайн и нашел этот код для запуска команды 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 и застрял на проблемах отладки. Я удалил объект таблицы уже в моем db, но теперь я получаю следующую ошибку во время выполнения: «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

Смежные вопросы