2013-05-03 49 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. 在顯示選項,選中「隱藏對象」選項

你應該現在可以在數據庫中看到隱藏的表格等。