您的前 5 行(非空白)在您的示例中没有执行任何操作。这些行正在尝试打开连接,但稍后处理更新查询的代码未使用该连接。
您应该注意,您使用的 Round() 函数可能不会返回您期望的结果。 VBA 中的 Round() 函数使用“银行家舍入”或“舍入一半到偶数”逻辑。 Round(15.665,2) 和 Round(15.675,2) 都将返回 15.67。
您的最后一行尝试从更新语句中打开记录集。 update 语句不返回记录,因此没有可返回的记录集。如果要返回记录集,您可能需要使用“CurrentDB.OpenRecordset”之类的内容,而不是“Object.OpenRecordset”。
关于异步运行此查询,您可能无法获得您想要的结果。 MS Access 将在本地计算机上处理查询。如果使用 JET (MS Access) 数据库,我不知道异步运行查询的方法。我怀疑,即使有一个命令通过 VBA 代码异步运行查询,它仍然会在应用程序的上下文中运行并使其陷入困境。
如果您尝试让应用程序在查询运行时做出响应,我建议将更新移至单独的进程,例如 VBScript 文件。
将以下代码保存在名称类似于 UpdateActueel.vbs 的文件中
strQuery = "UPDATE ((((((tblSkuActueel LEFT JOIN qryStockSkuMetLaatsteDatumSubQuery ON tblSkuActueel.sku = qryStockSkuMetLaatsteDatumSubQuery.sku) LEFT JOIN " & _
"qrySkuCapNieuwste ON tblSkuActueel.sku = qrySkuCapNieuwste.sku) LEFT JOIN qrySkuListNieuwste ON tblSkuActueel.sku = qrySkuListNieuwste.sku) LEFT JOIN " & _
"qrySkuPPDNieuwste ON tblSkuActueel.sku = qrySkuPPDNieuwste.sku) INNER JOIN qrySkuApexNieuwsteMetBtw ON tblSkuActueel.sku = qrySkuApexNieuwsteMetBtw.sku) " & _
"LEFT JOIN qrySkuSpecialNieuwsteDS ON tblSkuActueel.sku = qrySkuSpecialNieuwsteDS.sku) LEFT JOIN qrySkuSpecialNieuwsteNB ON tblSkuActueel.sku = " & _
"qrySkuSpecialNieuwsteNB.sku SET tblSkuActueel.stock = qryStockSkuMetLaatsteDatumSubQuery.aantal, tblSkuActueel.apex = qrySkuApexNieuwsteMetBtw.apex, " & _
"tblSkuActueel.cap = qrySkuCapNieuwste.cap, tblSkuActueel.listprice = qrySkuListNieuwste.listprice, tblSkuActueel.ppd = qrySkuPPDNieuwste.ppd, " & _
"tblSkuActueel.procent = qrySkuApexNieuwsteMetBtw.procent, tblSkuActueel.apin = Round(qrySkuApexNieuwsteMetBtw.apex*qrySkuApexNieuwsteMetBtw.procent,2), " & _
"tblSkuActueel.BtwId = qrySkuApexNieuwsteMetBtw.btwid, tblSkuActueel.specialpricenb = [qryskuspecialnieuwstenb].[specialprice], " & _
"tblSkuActueel.specialpriceds = [qryskuspecialnieuwsteds].[specialprice]"
Set DB = GetObject("F:\Databank\webshop_ingrid.mde")
DB.Execute strQuery
在 VBA 代码中,使用以下行运行脚本。
Shell "wscript ""C:\<Path to file>\UpdateActueel.vbs"""