【问题标题】:Reset the Microsoft Access query column order to match the SQL after they've been re-ordered in Datasheet view?在数据表视图中重新排序后重置 Microsoft Access 查询列顺序以匹配 SQL?
【发布时间】:2021-07-24 03:13:58
【问题描述】:

在 Microsoft Access 查询的数据表视图中,如果通过拖动列重新排序,则它们不再遵循基础 Access SQL 中定义的顺序。如果在 SQL 中更改了列顺序,则数据表中的顺序不再遵循。即使订单被拖回以匹配 SQL,它仍然不会再次开始跟随 SQL。数据表视图中的列顺序基本上已经与 SQL 断开连接,并停留在“手动模式”。

如何重置,以便数据表视图中的列顺序再次开始遵循 SQL?

我在 StackOverflow 和 Google 上搜索过这个问题的答案,但没有找到。

注意:我非常精通 Access VBA,所以如果有人知道隐藏在查询的属性集合中的静态或瞬态属性,我可以使用它。谢谢。

【问题讨论】:

标签: vba ms-access


【解决方案1】:

对于QueryDef 中的每个字段,设置该字段的.Properties("ColumnOrder").Value = 0

这是立即窗口中的示例。我已手动将第一列移动到数据表上的最后一个位置,并使用该布局保存了查询。

? CurrentDb.QueryDefs("qryBase").Fields.Count
 3 

for i = 0 to 2 : ? CurrentDb.QueryDefs("qryBase").Fields(i).Properties("ColumnOrder").Value : next
 3 
 1 
 2 

ColumnOrder 更改为 0 会导致 Access 使用 querydef 的 SQL 来确定数据表视图的列顺序:

for i = 0 to 2 : CurrentDb.QueryDefs("qryBase").Fields(i).Properties("ColumnOrder").Value = 0 : next

for i = 0 to 2 : ? CurrentDb.QueryDefs("qryBase").Fields(i).Properties("ColumnOrder").Value : next
 0 
 0 
 0 

【讨论】:

  • 它可以工作,但是为什么 for-loop for i = 0 to (CurrentDb.QueryDefs("qryBase").Fields.Count -1) 不给我一个运行时错误'3270:找不到属性'我减去 1 与索引相同。
  • 我似乎记得ColumnOrder 是隐藏的和短暂的。这意味着它不能像object.ColumnOrder=1 那样直接访问。它只能通过属性集合作为.Properties("ColumnOrder") 访问。并且它不存在,除非以前写过。另外,我似乎记得没有内置的 VBA 函数来检查属性是否存在。您必须旋转自己的 for-each 循环以通过 .Properties 集合检查(每个属性的).Name 属性以查找 "ColumnOrder"(干净),或者使用 @987654332 崩溃到错误处理程序中@(乱七八糟)。
猜你喜欢
  • 2019-06-13
  • 2016-08-26
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多