MSysQueries中的数据是什么意思?

Bob*_*ort 5 ms-access ms-access-2000

我一直在使用VBA来检查我的Access 2000数据库中的所有查询,表单和模块,但它可能非常繁琐和缓慢.最近,我决定仔细研究Access中的系统表,特别是MSysQueries和MSysObjects.我可以使用这些表来更快地检查数据库中的对象吗?当然,这些表是只读的,所以我不能通过它们对数据库进行任何修改而不返回VBA.MSysQueries中的属性是什么意思?

Bob*_*ort 11

好吧,我在谷歌小组上发过这篇文章.我在自己的桌子上做了进一步的调查,想要分享一个我已经完成的工作所激发的信息表.

每个查询都可以占用表中的多行.

具有属性0的行是查询的开头.

具有属性1的行指示查询的类型.

  • 标志值1 = SELECT查询.
  • 标志值2 = SELECT ... INTO查询或生成表查询.Name1将具有创建的表的名称.
  • 标志值3 = INSERT查询; Name1将具有要插入的表的名称.
  • 标志值4 = UPDATE查询
  • 标志值5 = DELETE查询
  • 标志值6 =交叉表查询(TRANSFORM)
  • 标志值9 = UNION查询

具有属性2的行(可能有多个)是查询的每个形式参数.Flag列指示数据类型(即dbText的"10"),Name1列指示参数的名称.如果没有属性为2的行,则查询没有形式参数.

具有属性3的行表示存在UNION或DISTINCT关键字.

  • 标志值0 =没什么特别的
  • 标志值1 = UNION ALL
  • 标志值2 = SELECT DISTINCT
  • 标志值3 = UNION
  • 标志值8 = SELECT DISTINCTROW
  • 标志值9 =主字段和子字段上的查询

具有属性4的行指示查询是否来自外部数据库.如果属性4存在,Name1将包含源.

具有属性5的行(可能有多个)表示在查询中找到的每个表.如果查询是UNION查询,表达式字段对UNION关键字的分割和名称2字段具有一个系统生成的表的别名.对于查询中的所有其他表,Name1是表的名称,Name2是别名(如果有).

具有属性6的行(可能有多个)指示查询中的每个单个字段或表达式.如果查询没有属性6,则假定的行为是包含所有字段.Expression字段包含每个字段表达式或名称,Name1包含字段别名(如果有).

  • 标志值0 =字段或表达式的值
  • 标记值1 =该字段是交叉表查询中的列标题.
  • 标志值2 =该字段是交叉表查询中的行标题.

具有属性7的行(可能有多个)表示每个单独的连接"ON"表达式.Expression字段包含实际的连接表达式.Name1包含连接中的第一个表.Name2包含连接中的第二个表.

  • 标志值1 =内部连接
  • 标志值2 =左连接
  • 标志值3 =右加入

具有属性8的行包含Expression字段中的整个WHERE子句.如果没有where子句,则从查询中省略属性8.

具有属性9的行(可能有多个)表示查询的GROUP BY子句中的每个Group By表达式.表达式字段按表达式包含每个组.

  • 标志值0 =字段或表达式的值
  • 标记值1 =该字段是交叉表查询中的列标题.
  • 标志值2 =该字段是交叉表查询中的行标题.

具有属性11的行(可能有多个)指示查询的ORDER BY子句中的每个单个Order By表达式.表达式字段按表达式包含每个顺序.Name1具有"D"或"d"以指示排序按降序完成.

具有属性255的行是查询的结尾.

我不确定Order字段的作用,但我确实发现它不是Null,虽然它有时会有一个空字符串的值,但它并不总是具有该值.属性5,6,7和9上出现空字符串,但对于这些属性,它并不总是空字符串.