如何解决VBA到常规SELECT查询与MS Access 2016中任何类型的ACTION查询之间的解密
如果名称与表中的名称匹配,我有一个循环来编辑查询。该代码有效,但我希望它跳过任何操作查询,即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 属性,并跳过那些您不想处理的对象:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。