这些表来自哪里?访问VBA

时间:2013-05-03 13:07:29

标签: vba ms-access-2007 access-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

3 个答案:

答案 0 :(得分:2)

这些可能是隐藏的表格。

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

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

答案 1 :(得分:1)

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

请回复你的发现,我对结果非常好奇。

答案 2 :(得分:0)

我想我会添加这个答案以涵盖MS Access 2003.要查看隐藏的对象,请执行以下操作:

  1. 工具
  2. 选项
  3. 选择“视图”标签
  4. 在“显示”选项下,选中“隐藏对象”选项
  5. 您现在应该能够在数据库中看到隐藏的表等。