Ms access 通过Access VBA代码保存查询

Ms access 通过Access VBA代码保存查询,ms-access,vba,Ms Access,Vba,我需要通过VBA代码实际创建SQL查询。 我知道如何在VBA中执行查询,但我需要将其保存在菜单中。如果可以,我会贴一张照片。我试着让你想象一下 在MS Access的主屏幕中,左侧有一个栏 为了说明这一点,领事用葡萄牙语提出了质疑 如果你不明白我的意思,请原谅我没有解释。我很乐意再次解释。我想您需要: If Not IsNull(DLookup("Type", "MSYSObjects", "Name='MyNewQuery'")) Then MsgBox "An object alre

我需要通过VBA代码实际创建SQL查询。 我知道如何在VBA中执行查询,但我需要将其保存在菜单中。如果可以,我会贴一张照片。我试着让你想象一下

在MS Access的主屏幕中,左侧有一个栏

为了说明这一点,领事用葡萄牙语提出了质疑

如果你不明白我的意思,请原谅我没有解释。我很乐意再次解释。

我想您需要:

If Not IsNull(DLookup("Type", "MSYSObjects", "Name='MyNewQuery'")) Then
    MsgBox "An object already exists with this name"
Else
    CurrentDb.CreateQueryDef "MyNewQuery", "SELECT * FROM Table1"
End If
重新编辑评论

Sub UpdateQuery(QueryName, SQL)
    ''Using a query name and sql string, if the query does not exist, ...
    If IsNull(DLookup("Name", "MsysObjects", "Name='" & QueryName & "'")) Then
        ''create it, ...
        CurrentDb.CreateQueryDef QueryName, SQL
    Else
        ''Other wise, update the sql.
        CurrentDb.QueryDefs(QueryName).SQL = SQL
    End If

End Sub
请注意,删除不存在的查询将导致错误

 DoCmd.DeleteObject acQuery, "NewQuery"
我想你想要:

If Not IsNull(DLookup("Type", "MSYSObjects", "Name='MyNewQuery'")) Then
    MsgBox "An object already exists with this name"
Else
    CurrentDb.CreateQueryDef "MyNewQuery", "SELECT * FROM Table1"
End If
重新编辑评论

Sub UpdateQuery(QueryName, SQL)
    ''Using a query name and sql string, if the query does not exist, ...
    If IsNull(DLookup("Name", "MsysObjects", "Name='" & QueryName & "'")) Then
        ''create it, ...
        CurrentDb.CreateQueryDef QueryName, SQL
    Else
        ''Other wise, update the sql.
        CurrentDb.QueryDefs(QueryName).SQL = SQL
    End If

End Sub
请注意,删除不存在的查询将导致错误

 DoCmd.DeleteObject acQuery, "NewQuery"

有点奏效了。验证对象存在性的语句未运行。它直接通过它,并给我一个错误,该对象已经存在。问题在于此错误产生的崩溃。如果可以的话,给我另一条线索。一次崩溃表明你的数据库已经损坏,我担心。要确保这是问题所在,可以使用新数据库进行检查。在那之后,值得一看不,那不是我的意思。这是由于无法处理已存在的查询错误而导致的代码崩溃。If Not IsNull行不工作。不过还是要谢谢你。。。这对我的代码很有帮助。@Patrick我很惊讶。我在发帖前做了非常仔细的测试。错误是什么?如果已经存在同名的查询或表,您会意识到无法创建查询。表单等是另一种情况吗?如果已经存在具有该名称的查询,则类型将为5,您可以使用新的sql更新sql,但不能创建查询。无论如何,有没有办法销毁查询?这有点奏效。验证对象存在性的语句未运行。它直接通过它,并给我一个错误,该对象已经存在。问题在于此错误产生的崩溃。如果可以的话,给我另一条线索。一次崩溃表明你的数据库已经损坏,我担心。要确保这是问题所在,可以使用新数据库进行检查。在那之后,值得一看不,那不是我的意思。这是由于无法处理已存在的查询错误而导致的代码崩溃。If Not IsNull行不工作。不过还是要谢谢你。。。这对我的代码很有帮助。@Patrick我很惊讶。我在发帖前做了非常仔细的测试。错误是什么?如果已经存在同名的查询或表,您会意识到无法创建查询。表单等是另一种情况吗?如果已存在具有该名称的查询,则类型将为5,您可以使用新sql更新sql,但不能创建查询。无论如何,是否有方法销毁查询?