我正在尝试从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。
答案 0 :(得分:1)
如果您在代码中使用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]; "
但是,由于您要创建表格,因此需要添加目标。通过在select和from
之间添加INTO
子句
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
答案 1 :(得分:0)
DoCmd.RunSQL
无法与SELECT
次查询一起使用,您需要执行INSERT
,UPDATE
或DELETE
一种选择是在数据库中创建一个与查询输出匹配的表并执行INSERT ... SELECT ...
。然后,您可以向用户显示该表。
这种方法的问题是每次再次运行查询之前都需要删除表内容。
答案 2 :(得分:0)
您可以使用嵌套查询来创建表。我无法嵌套sql,但如果您将查询保存为deal_time
,那么您可以使用docmd.runSQL "select * into mytable from deal_time"