Ms access MSysQueries中的数据是什么意思?
我一直在使用VBA检查Access 2000数据库中的所有查询、表单和模块,但这可能会非常繁琐和缓慢。最近,我决定仔细研究Access中的系统表,特别是MSysQueries和MSysObjects。我可以使用这些表更快地检查数据库中的对象吗?当然,这些表是只读的,因此如果不返回VBA,我无法通过它们对数据库进行任何修改。MSysQueries中的属性是什么意思?嗯,我是在谷歌群组上遇到的。我在自己的表格上做了进一步的调查,并想分享一个我根据已经完成的工作而创建的信息表格 每个查询可以占用表中的多行 属性为0的行是查询的开始 属性为1的行表示查询的类型Ms access MSysQueries中的数据是什么意思?,ms-access,ms-access-2000,Ms Access,Ms Access 2000,我一直在使用VBA检查Access 2000数据库中的所有查询、表单和模块,但这可能会非常繁琐和缓慢。最近,我决定仔细研究Access中的系统表,特别是MSysQueries和MSysObjects。我可以使用这些表更快地检查数据库中的对象吗?当然,这些表是只读的,因此如果不返回VBA,我无法通过它们对数据库进行任何修改。MSysQueries中的属性是什么意思?嗯,我是在谷歌群组上遇到的。我在自己的表格上做了进一步的调查,并想分享一个我根据已经完成的工作而创建的信息表格 每个查询可以占用表中的
- 标志值1=选择查询
- 标志值2=选择。。。进入查询,或生成表查询。Name1将具有所创建表的名称
- 标志值3=插入查询;Name1将具有要插入的表的名称
- 标志值4=更新查询
- 标志值5=删除查询
- 标志值6=交叉表查询(转换)
- 标志值9=联合查询
- 标志值0=无特殊情况
- 标志值1=联合所有
- 标志值2=选择不同
- 标志值3=联合
- 标志值8=选择DISTINCTROW
- 标志值9=对主字段和子字段的查询
- 标志值0=字段或表达式的值
- 标志值1=该字段是交叉表查询中的列标题
- 标志值2=该字段是交叉表查询中的行标题
- 标志值1=内部联接
- 标志值2=左连接
- 标志值3=右连接
- 标志值0=字段或表达式的值
- 标志值1=该字段是交叉表查询中的列标题
- 标志值2=该字段是交叉表查询中的行标题
我不太确定Order字段的作用,但我确实发现它不是Null,尽管它有时有一个空字符串的值,但它并不总是有那个值。空字符串出现在属性5、6、7和9上,但这些属性并不总是空字符串。感谢@Bobort的出色解释,我能够创建一个查询,列出当前数据库中的所有查询,以及它们的输入表/查询、查询类型和目标表(用于操作查询)。
我想我可以在这里分享
SELECT MSysObjects.Name AS queryName,
Mid("SelectMakTblAppendUpdateDeleteXtab 777777PassThUnion ",([msysqueries]![Flag]-1)*6+1,6) AS queryType,
src.Name1 AS [Input],
MSysQueries.Name1 AS Target
FROM (MSysQueries INNER JOIN MSysObjects ON MSysQueries.ObjectId = MSysObjects.Id)
LEFT JOIN (select * from MSysQueries WHERE Attribute = 5 ) AS src
ON MSysQueries.ObjectId = src.ObjectId
WHERE (((MSysObjects.Name)>"~z") AND ((MSysQueries.Attribute) =1))
ORDER BY MSysObjects.Name, src.Name1;
要使用,只需在SQL视图中创建一个查询并粘贴上述代码。进一步了解Bobort和iDevlop的答案: 属性为1的行表示查询的类型
- 标志值7=DDL查询(例如
)创建表…
- 标志值9=传递查询
- 标志值1=所有值,或UNION All(如果是UNION查询)
- 标志值4=带有OWNERACCESS选项
- 标志值16=顶部N
- 标志值48=顶部N百分比
- 表达式包含FROM源,如果是联合查询,则包含SELECT语句
Order
字段是一个包含4字节数组的大端二进制值(二进制字段可以使用VBA添加,但不能使用UI添加,除非从系统表中的二进制字段复制和粘贴)
Sub EnumOrder()
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset( _
" SELECT * FROM MSysQueries " & _
" WHERE Attribute = 6 " & _
"ORDER BY ObjectId Asc, [Order] Asc")
With rst
Do While Not .EOF
Debug.Print .Fields("ObjectId"), .Fields("Order")(3)
.MoveNext
Loop
.Close
End With
End Sub