mysql - 如何在 QueryDef 中重新定义 SQL?我有通过删除并重新创建 QueryDef 来工作的代码,但我无法让覆盖工作

标签 mysql sql vba ms-access ms-access-2016

我被告知(并且同意)最好替换现有 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..

请回答如何使第二 block 中的代码真正执行指定的SQL语句并构建所需的表。

我知道如果删除它,我必须重新进行查询。呃。 我知道如果我能让 Set 语句用所需的 sql 正确覆盖以前的 sql,我“应该”能够重新使用相同的查询。
我知道你们都想提供答案,但请回答我所提出的问题。

最佳答案

如果不删除该对象,则可以回收该对象:

' On Error Resume Next
Set QD = db.QueryDefs("qryX")
QD.SQL = mySQL
DoCmd.RunSQL "SELECT * INTO tblDocsCrossTabX FROM qryX;"

关于mysql - 如何在 QueryDef 中重新定义 SQL?我有通过删除并重新创建 QueryDef 来工作的代码,但我无法让覆盖工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59272287/

相关文章:

mysql - 计算MySQL中两个日期时间之间的差异

php - 在PHP中获取特定用户的数据

Mysql邻接表模型,我的查询结果不是我想要的

vba - 从 Visual Foxpro COM 服务器向 VBA 返回对象时出错

excel - 使用 'Table.ListRows.Add' 将整行插入到表边界之外

mysql - 错误 : mysqladmin: refresh failed; error: 'Unknown error'

sql - 如何检索所有用户的最后一篇文章

sql - SQL 中的列变量数组

vba - 如何获取Excel工作簿中定义的宏

sql - 将值转换为单行