首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在QueryDef中重新定义SQL?我有可以通过删除和重新创建QueryDef来工作的代码,但是我不能让覆盖工作

如何在QueryDef中重新定义SQL?我有可以通过删除和重新创建QueryDef来工作的代码,但是我不能让覆盖工作
EN

Stack Overflow用户
提问于 2019-12-11 01:07:00
回答 4查看 427关注 0票数 0

我被告知(并同意)最好替换现有querydef中的SQL,而不是每次查询需要更改时删除并重新定义querydef。但我的代码似乎只能以第二种方式工作。下面是我的代码,它可以工作:

代码语言:javascript
运行
复制
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;"

下面是我不能使用的代码

代码语言:javascript
运行
复制
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,那么我“应该”能够重用相同的查询。

我知道你们都想提供一个答案,但请让它成为我提出的问题的答案。

EN

Stack Overflow用户

发布于 2019-12-11 18:23:45

如果可以使用子查询,则可以使用临时查询,而不是麻烦地检查QueryDef是否已经存在,只需组合SELECT和INSERT- QueryDef来使用临时QueryDef

不幸的是,您不能在子查询中使用Transform,因此这段代码会导致Runtime-Error 3129 Invalid SQL statement

代码语言:javascript
运行
复制
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 With
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59272287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档