Как создать временную таблицу из запроса SELECT в Access VBA? - PullRequest
0 голосов
/ 12 января 2012

Я пытаюсь получить некоторые результаты (только для просмотра) из запроса в небольшом функциональном методе в Access VBA.Запрос выглядит так:

sqlstr = "TRANSFORM Count([Deal Data ECM].[Disclosed Fees (Y/N)]) AS [CountOfDisclosed Fees (Y/N)]" & _
"SELECT [Deal Data ECM].[Deal Type]" & _
"FROM [Deal Data ECM]" & _
"WHERE ((([Deal Data ECM].[Disclosed Fees (Y/N)]) = 'Y'))" & _
"GROUP BY [Deal Data ECM].[Deal Type]" & _
"PIVOT [Deal Data ECM].[Deal Region];"

Ничего из этого не работает:

DoCmd.OpenQuery sqlstr
CurrentDb.OpenRecordset sqlstr
DoCmd.RunSQL sqlstr

Как мне заставить его работать?Для этой простой задачи должен быть легкий путь.Я использую Access 2003.

Ответы [ 3 ]

1 голос
/ 12 января 2012

Если вы взглянули на строку, которую вы создали, используя Debug.Print sqlstr в коде или ?sqlstr из командного окна, вы увидите

TRANSFORM Count([Deal Data ECM].[Disclosed Fees (Y/N)]) AS [CountOfDisclosed Fees (Y/N)]SELECT [Deal Data ECM].[Deal Type]FROM [Deal Data ECM]WHERE ((([Deal Data ECM].[Disclosed Fees (Y/N)]) = 'Y'))GROUP BY [Deal Data ECM].[Deal Type]PIVOT [Deal Data ECM].[Deal Region];

Тогда вы можете заметить, что между одним предложением нет пробелови следующее.

добавление возвратов там, где есть пробелы, немного усложняет просмотр

TRANSFORM Count([Deal Data ECM].[Disclosed Fees (Y/N)]) 
    AS [CountOfDisclosed Fees (Y/N)]SELECT 
    [Deal Data ECM].[Deal Type]FROM
   [Deal Data ECM]WHERE
   ((([Deal Data ECM].[Disclosed Fees (Y/N)]) = 'Y'))GROUP 
   BY [Deal Data ECM].[Deal Type]PIVOT
   [Deal Data ECM].[Deal Region];

Попробуйте добавить пробел перед каждым окончанием "

sqlstr = "TRANSFORM Count([Deal Data ECM].[Disclosed Fees (Y/N)]) AS [CountOfDisclosed Fees (Y/N)] " & _
"SELECT [Deal Data ECM].[Deal Type] " & _
"FROM [Deal Data ECM] " & _
"WHERE ((([Deal Data ECM].[Disclosed Fees (Y/N)]) = 'Y')) " & _
"GROUP BY [Deal Data ECM].[Deal Type] " & _
"PIVOT [Deal Data ECM].[Deal Region]; "

Однако, поскольку вы хотите создать таблицу, вам нужно добавить цель.Добавляя предложение INTO между select и from

sqlstr = "TRANSFORM Count([Deal Data ECM].[Disclosed Fees (Y/N)]) AS [CountOfDisclosed Fees (Y/N)] " & _
"SELECT [Deal Data ECM].[Deal Type] " & _
"INTO YourNewTable " & _
"FROM [Deal Data ECM] " & _
"WHERE ((([Deal Data ECM].[Disclosed Fees (Y/N)]) = 'Y')) " & _
"GROUP BY [Deal Data ECM].[Deal Type] " & _
"PIVOT [Deal Data ECM].[Deal Region]; "

Примечание: Каждый раз, когда вы выполняете это, вы удаляете старую таблицу.Также обратите внимание, что вы должны использовать DoCmd.RunSQL

0 голосов
/ 30 января 2012

Вы можете использовать вложенный запрос для создания таблицы.Я не смог вложить sql, но если вы сохраните ваш запрос, скажем, deal_time, тогда вы можете использовать docmd.runSQL "select * into mytable from deal_time"

0 голосов
/ 12 января 2012

DoCmd.RunSQL нельзя использовать с SELECT запросами, вам необходимо выполнить INSERT, UPDATE или DELETE

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

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

...