我被告知(并同意)最好替换现有querydef中的SQL,而不是每次查询需要更改时删除并重新定义querydef。但我的代码似乎只能以第二种方式工作。下面是我的代码,它可以工作:
Dim db As Database
Set db = CurrentDb
Dim QD As QueryDef
Dim mySql As String
mySql = ""
mySql = "TRANSFORM COUNT(tblDocs.Document) AS CountOfDocument " & _
"SELECT tblDocs.[Contractor Dept], " & _
"COUNT(tblDocs.Document) AS [Total Of Document] " & _
"FROM tblDocs " & _
"GROUP BY tblDocs.[Contractor Dept] " & _
"PIVOT tblDocs.[Engineering Status Code]"
On Error Resume Next
db.QueryDefs.Delete "qryX" 'Remove temporary query if exists
Set QD = db.CreateQueryDef("qryX", mySql) 'create temporary query
DoCmd.RunSQL "SELECT * INTO tblDocsCrossTabX FROM qryX;"下面是我不能使用的代码
Dim db As Database
Set db = CurrentDb
Dim QD As QueryDef
Dim mySql As String
mySql = " "
Set QD = db.CreateQueryDef(("qryX"), mySql)
mySql = "TRANSFORM COUNT(tblDocs.Document) AS CountOfDocument " & _
"SELECT tblDocs.[Contractor Dept], " & _
"COUNT(tblDocs.Document) AS [Total Of Document] " & _
"FROM tblDocs " & _
"GROUP BY tblDocs.[Contractor Dept] " & _
"PIVOT tblDocs.[Engineering Status Code]"
QD.SQL = mySQL 'overwrite query SQL
DoCmd.RunSQL "SELECT * INTO tblDocsCrossTabX FROM qryX;"奇怪的是,第二个版本没有向我抛出任何错误,但它根本不会生成交叉表。
编辑:也许我说得不够清楚。问题是第二组代码会这样做。不。执行。这个。SQL。如果它执行了代码,我很乐意一遍又一遍地重写和使用相同的临时查询,但它确实做到了。不。执行。这个。SQL..
请回答如何使第二个块中的代码实际执行指定的SQL语句并构建所需的表。
我知道如果我删除了一个查询,我必须重新生成它。是啊。我知道,如果我能让Set语句正确地用所需的sql覆盖以前的sql,那么我“应该”能够重用相同的查询。
我知道你们都想提供一个答案,但请让它成为我提出的问题的答案。
发布于 2019-12-11 18:23:45
如果可以使用子查询,则可以使用临时查询,而不是麻烦地检查QueryDef是否已经存在,只需组合SELECT和INSERT- QueryDef来使用临时QueryDef
不幸的是,您不能在子查询中使用Transform,因此这段代码会导致Runtime-Error 3129 Invalid SQL statement。
Sql = "SELECT * INTO tblDocsCrossTabX FROM (TRANSFORM COUNT(tblDocs.Document) AS CountOfDocument " & _
"SELECT tblDocs.[Contractor Dept], " & _
"COUNT(tblDocs.Document) AS [Total Of Document] " & _
"FROM tblDocs " & _
"GROUP BY tblDocs.[Contractor Dept] " & _
"PIVOT tblDocs.[Engineering Status Code])"
With CurrentDb.CreateQueryDef(vbNullString) 'or db.CreateQueryDef("") creates a not named and therefore temporary QueryDef
.SQL = Sql
.Execute dbFailOnError
End Withhttps://stackoverflow.com/questions/59272287
复制相似问题