DOCmd не может найти строку, содержащую SQL - PullRequest
0 голосов
/ 21 мая 2018

Имеется следующий код:

Dim SKbyYrByMo As String
SKbyYrByMo = "TRANSFORM Sum([1ACTMasterQuery].Extension) AS SumOfExtension" & _
" SELECT [1ACTMasterQuery].Year, [1ACTMasterQuery].Sku, Sum([1ACTMasterQuery].Extension) AS [Total Of Extension]" & _
" FROM 1ACTMasterQuery" & _
" GROUP BY [1ACTMasterQuery].Year, [1ACTMasterQuery].Sku" & _
" PIVOT [1ACTMasterQuery].MonthNo"

DoCmd.TransferSpreadsheet _
acExport, _
acSpreadsheetTypeExcel12Xml, _
"SKbyYrByMo", _
"C:\Users\John\Desktop\RSExcel.xlsx", _
True

Если я изменю имя запроса на одно в списке запросов ACCESS, оно будет работать нормально.Но когда я использую SKbyYrByMo, я получаю сообщение

'Ядро базы данных Microsoft не может найти объект' SKbyYrByMo '.

1 Ответ

0 голосов
/ 21 мая 2018

Необходимо создать запрос / представление, а затем указать DoCmd.TransferSpreadsheet на этот вновь созданный объект в качестве параметра «таблица»:

SKbyYrByMo = "TRANSFORM Sum([1ACTMasterQuery].Extension) AS SumOfExtension" & _
" SELECT [1ACTMasterQuery].Year, [1ACTMasterQuery].Sku, Sum([1ACTMasterQuery].Extension) AS [Total Of Extension]" & _
" FROM 1ACTMasterQuery" & _
" GROUP BY [1ACTMasterQuery].Year, [1ACTMasterQuery].Sku" & _
" PIVOT [1ACTMasterQuery].MonthNo"

'Create the view/query
CurrentDB.CreateQueryDef "SKbyYrByMo", SKbyYrByMo

'Now you can reference that:
DoCmd.TransferSpreadsheet _
acExport, _
acSpreadsheetTypeExcel12Xml, _
"SKbyYrByMo", _
"C:\Users\John\Desktop\RSExcel.xlsx", _
True

'And Delete the query:
CurrentDb.QueryDefs.Delete "SKbyYrByMo"

Причина этого заключается в том, что третий параметр вTransferSpreadsheet метод принимает строку, которая является «TableName» :

Строковое выражение, которое является именем таблицы Microsoft Access, в которую вы хотите импортировать текстовые данные, экспортировать текстданные или ссылки на текстовые данные или запрос Microsoft Access, результаты которого вы хотите экспортировать в текстовый файл.

Если вы не создадите запрос, все, что у вас есть, - это SQL впеременная, которая является строкой (не имя таблицы).Таким образом, мы создаем querydef и затем передаем имя этого querydef в метод TransferSpreadsheet, затем сдуваем querydef, так как нам не нужно, чтобы этот объект зависал в базе данных.

Было бы хорошо, есливместо этого этот метод принял строку sql ...

...