2013-05-03 67 views
0

我已创建一个过程,将所有表的名称存储在数组内的外部数据库中。这样做的原因是,最终我将用它作为确定哪些表需要重新链接的参考点。这些桌子从哪里来?访问VBA

下面的代码返回共13表

For Each tb In db.TableDefs 

    If Left(tb.Name, 4) <> "MSys" Then 
     'Store these accepted table names in an array 
     astrTableNames(intArryPosition) = tb.Name 
     intArryPosition = intArryPosition + 1 
    End If 

Next tb 

和在阵列中存储自己的名字。下面是结果的列表,当我打印数组:

1: DispenseStaging 
2: DispenseSummary_All 
3: DrugBrand 
4: NDC 
5: Programs 
6: StateCodes 
7: StoreInfo 
8: tblCompany 
9: tblGetProgramDispense 
10: Users 
11: Users1 
12: Version 
13: Zipcodes 

这里的问题 - 当我打开数据库 - 它只有4桌。没有更多 - 没有引用链接或任何东西。

那么这些表格究竟是从哪里来的呢?这是否意味着他们曾经在那里,但后来被删除,但参考依然存在?

谢谢

P.S.这是我用来打印阵列的步骤:

'Procedure to print the contents of a string array 
Public Sub PrintArrayContents(ArryStrg() As String) 

    Dim i As Integer 

    For i = LBound(ArryStrg) To UBound(ArryStrg) 
     Debug.Print i & ": "; ArryStrg(i) 
    Next i 

End Sub 

回答

2

这些可能是隐藏的表格。

通过转到Navigation窗格,然后右键单击All Access Objects并选择Navigation options,可以在Access 2007中显示它们。

这将打开一个对话框让您显示隐藏的对象。

+0

接受这一个 - 还有一个问题,如果您选择“所有访问对象?”,为什么对象被隐藏?你会认为他们会出现 – Katana24 2013-05-03 13:38:15

+1

啊,奥卡姆的剃刀再次! – 2013-05-03 13:45:12

+0

最简单的答案通常是正确的 - 呃? – Katana24 2013-05-03 13:57:47

1

这些表可以是在UI上无法显示的垃圾或链接表,因为链接已损坏或垃圾和链接表同时存在。
在数据库上尝试一个“紧凑和修复”(备份数据库文件优先!)并重新执行您的函数以查看您是否得到相同的结果集。如果你这样做,阅读表属性'来试图找出表所属的位置以及它们是什么(链接表或基表)。检查LastUpdated,Updatable,SourceTableName,也许RecordCount属性获取关于怪人的一些信息:)
如果你仍然不能看到发生了什么,首先,阅读系统表来找出“额外表”元数据例如MSysObjects告诉你可以提供帮助的obj.type),其次,尝试对这些表执行查询,值或返回的错误可能会告诉你这些人属于哪里。
我怀疑,但它是可能的(因为它的访问:P),一些表只是“隐藏”。您可以在导航窗格中打开/关闭“显示隐藏表格”。

请回到你的发现,我很好奇结果。

+0

好的答案 - 非常完整,我认为:P – Katana24 2013-05-03 13:37:13

+0

确实如此。我假设你知道访问的“超级功能”:) – 2013-05-03 13:46:22

0

只是想我会添加此答案涵盖MS Access 2003。要查看隐藏对象,请执行下列操作:

  1. 工具
  2. 选项
  3. 选择视图选项卡
  4. 在显示选项,选中“隐藏对象”选项

你应该现在可以在数据库中看到隐藏的表格等。