【问题标题】:Run query in the background在后台运行查询
【发布时间】:2015-11-04 22:18:00
【问题描述】:

我有一个正在处理的数据库。它由拆分数据库、前端和后端表的多个链接组成。

我正在编写一份由 15 个不同的子报告组成的报告。我有一个表格,允许我输入报告的开始日期和结束日期。有一个按钮可以生成最终报告。问题是当我想生成报告时,我必须为每个子报告重新运行每个不同的生成表查询。这样做的问题是每个查询都会有 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]));​

【问题讨论】:

  • qry_Maui_Division_KWH_Produced 是做什么的?你能发布它的SQL吗?你确定直接运行(不用vba)就可以吗?
  • 我刚刚验证它在没有 vba 的情况下也可以工作。它创建一行数据并将其放入一个表格中,然后在报告中引用该表格。我把sql代码放在贴子上。
  • 好的,我添加了 Option Explicit 并且卡在调试问题上。我已经在我的数据库中删除了表对象,但现在我在执行代码时收到以下运行时错误“3061:参数太少。预期为 1”:dbs.Execute sql,dbFailOnError。通过查看我的局部变量,所有参数看起来都已到位。关于为什么我仍然收到错误的任何想法?
  • 我想我离得更近了一点。我引用了带有方括号的查询语法:sql="[qry_Maui_Division_KWH_Produced]"。但是现在我的错误是“3078:..找不到输入表或查询...”我已经确保查询的名称相同但仍然无法正常工作。我保存的查询是生成表查询。这有不同的语法吗?
  • @HansUp 是的,我可以分享。分享它的最佳方式是什么? Github?

标签: ms-access vba ms-access-2010


【解决方案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

【讨论】:

  • 谢谢@neuralgroove 这对我有用,除了现在我得到一个“输入参数值:坏”。我假设这用于数据中的任何错误,你知道我怎样才能摆脱这个提示吗?
  • 我要说一些关于那个查询的事情,WHERE 子句正在寻找一个条件(比如 WHERE Field1='bad' 什么的)没有看到你的数据集我不确定条件是什么对于
  • 我对 WHERE 子句的理解是,如果它有一个错误的数据点或一个“空”数据点,那么您将从表中删除它。同时,我将它从我的 VBA 代码中删除了,但是对于将来有没有办法我可以查看空值并输出 N/A 而不是从表中删除它?
  • 查询表时,您可以使用 iif(ISNULL(value),"N/A",value) 或者您可以运行更新查询将这些字段更新为 N/A..UPDATE tbl_Maui_Division_KWH_Produced SET FieldName="N/A" WHERE FieldName IS NULLUPDATE tbl_Maui_Division_KWH_Produced SET FieldName="N/A" WHERE FieldName=""
猜你喜欢
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多