Ваши первые 5 (непустые) строки ничего не делают в вашем примере.Эти строки пытаются открыть соединение, но ваш более поздний код, который имеет дело с запросом на обновление, не использует это соединение.
Вы должны знать, что используемая вами функция Round () может не возвращать то, чтовы ожидаете.Функция Round () в VBA использует логику «округления банкиров» или «округление от половины до четного».И Round (15.665,2), и Round (15.675,2) вернут 15,67.
Ваша последняя строка пытается открыть набор записей из вашего оператора обновлений.Оператор обновления не возвращает записи, поэтому нет набора записей для возврата.Если бы он возвращал набор записей, вы бы хотели использовать что-то вроде «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"""