微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VBA到常规SELECT查询与MS Access 2016中任何类型的ACTION查询之间的解密

如何解决VBA到常规SELECT查询与MS Access 2016中任何类型的ACTION查询之间的解密

如何解释简单的SELECT查询和操作查询

如果名称与表中的名称匹配,我有一个循环来编辑查询。该代码有效,但我希望它跳过任何操作查询,即UPDATE,DELETE,INSERT等。

我以为我可以简单地检查LEFT(qdf.sql,6)中的“ SELECT”,但是任何涉及选择其他查询的动作查询都将以“ SELECT”开头...

解决方法

实际上,每种类型的查询都有自己的整数值。通过此整数值,您可以定义查询的类型。这是一些样本。您将在下面的行中获得这些整数值

CurrentDb.QueryDefs("YourQuery").Type

 0   SELECT Query
 128 UNION Query
 32  DELETE Query
 48  UPDATE Query
 64  APPEND Query

如果要返回查询的操作First Word,请从查询SQL语句中提取第一个单词。遍历所有查询并获得第一个单词。尝试以下子项。

Private Sub Command1_Click()
Dim qSQL As String
Dim qAction As String
Dim qdf As DAO.QueryDef

    For Each qdf In CurrentDb.QueryDefs
        qSQL = qdf.SQL  'CurrentDb.QueryDefs("Query7").SQL
        qAction = Left(qSQL,InStr(1,qSQL," ") - 1)
        Debug.Print qAction
        Debug.Print "Type Integer Value= " & qdf.Type
    Next

End Sub

请注意: 如果在查询开始时定义了参数,则此子项将不起作用。然后,您必须使用QueryDef.Type属性来确定查询类型。

编辑: 使用Select Case语句定义每种查询类型。见下文。您还可以探索其他查询。

Private Sub Command1_Click()
Dim qdf As DAO.QueryDef

    For Each qdf In CurrentDb.QueryDefs
        Select Case qdf.Type
            Case dbQSelect
                Debug.Print qdf.Name; " is a SELECT Query."
            Case dbQDelete
                Debug.Print qdf.Name; " is a DELETE Query."
            Case dbQUpdate
                Debug.Print qdf.Name; " is a UPDATE Query."
            Case dbQAppend
                Debug.Print qdf.Name; " is a APPEND Query."
            Case dbQSetOperation
                Debug.Print qdf.Name; " is a UNION Query."
            Case Else
                Debug.Print "Something else."
        End Select
    Next

End Sub
,

您可以检查每个QueryDef对象的 Type 属性,并跳过那些您不想处理的对象:

QueryDef.Type property (DAO)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。