【问题标题】:Is it possible to direct the placement/order new of fields when modifying an Ms Access database?修改 Ms Access 数据库时是否可以指导新字段的放置/顺序?
【发布时间】:2013-02-06 03:30:06
【问题描述】:

我需要通过代码修改 MS Access 数据库的架构——但我希望能够指导表中字段的顺序或放置。

例如 - 如果 TableOne 有 3 个字段 - Field10、Field20 和 Field30。我希望能够在 Field10 和 Field20 之间添加说 Field15 - 而不仅仅是将其附加到现有字段的末尾。

也许我遗漏了一些东西,但似乎 ADO、ADOX ADOD 等都只是将新字段附加到末尾。我知道这应该是可能的,因为您可以在 MS Access 中执行它并且它可以工作。

【问题讨论】:

  • 您是否考虑过不担心表中字段的位置,并在需要特定订单时使用查询返回数据?通过在表中获得“正确”字段的顺序并没有太多好处,除非它是性能顺序,这在 MS Access 中似乎不太可能。你不妨看看stackoverflow.com/questions/894522/…
  • 感谢您的回复和链接。在回过头来查看我的较低代码之后——这是从定义了我所有的数据库、表、字段、编辑的数据库中机器生成的——我意识到 99% 的时间——我是通过 SQL 控制字段顺序。我确实有一个使用 Select * 的函数,我正在更改它。

标签: ms-access ado dao


【解决方案1】:

您可以使用VBA 修改DAO.TableDef,并在追加之前指定新字段的OrdinalPosition 属性。查看您是否可以从“即时”窗口构建此示例会话:

set db = currentdb
for each f in db.tabledefs("DiscardMe").fields : _
? f.name, f.ordinalposition : _
next
ID             0 
empid          1 
dtpunched      2 
fake_yesno     3 

set newfield = db.tabledefs("DiscardMe").createfield("fld2", dbtext)
newfield.ordinalposition = 1
db.tabledefs("DiscardMe").fields.append newfield

但请注意,该表现在包含 2 个字段,OrdinalPosition = 1。

for each f in db.tabledefs("DiscardMe").fields : _
? f.name, f.ordinalposition : _
next
ID             0 
empid          1 
dtpunched      2 
fake_yesno     3 
fld2           1 

Access 帮助主题解释了“同一集合中的两个或多个 Field 对象可以具有相同的 OrdinalPosition 属性值,在这种情况下它们将按字母顺序排列。” 所以查询,SELECT TOP 1 DiscardMe.* FROM DiscardMe; ,给我这个:

ID empid fld2 dtpunched fake_yesno
 1   100       4/3/2012          0

通过一些改进,这种方法可能会得到你想要的。但是,我避免依赖列的序数位置。如果他们应该改变,我不希望我的代码破坏。

【讨论】:

  • 谢谢您-我已经同意最好不要像您建议的那样依赖序数位置。而是在我的代码中通过 Sql 控制顺序。感谢您的回复。
猜你喜欢
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多