2013-06-28 60 views
1

我有一個保存應用程序設置的MDB。有時我們使用SQL命令更改這些設置。通常我們需要查看數據庫中的哪個表格保存我們正在尋找的設置,以便構建我們的SQL字符串。我們有時不知道該字段的名稱,但通常可以通過閱讀它們來告訴。這非常耗時。通過表格生成MDB中所有字段的列表

我試圖找到一種方法來生成一個列表(在Excel中,訪問,記事本,無論是讀取MDB並返回表的列表,以及每個表中的每個領域。(所以它的搜索)

事情是這樣的:

Table1 | Field1 
Table1 | Field2 
Table1 | Field3 
Table2 | Field1 
Table2 | Field2 
Table3 | Field1 
Table3 | Field2 
Table3 | Field3 
Table4 | Field1 
Table4 | Field2 
... 

有誰知道這樣做使用訪問的快捷方式,出類拔萃,甚至一些vb.net代碼(不是打開每個表和複製字段名等

我期待自動化,以防我們在未來添加字段即

回答

2

您可以通過遍歷CurrentDb.TableDefs來獲取表的列表。這裏有一個方法來接近它在VBA中,.NET將類似於:

sub goThroughTables() 

dim tdf as TableDef 
dim rs as DAO.Recordset 
dim fld as Field 
dim index as long 

index=1 


for each tdf in currentdb.tabledefs 
set rs=currentdb.openrecordset(tdf.name) 
for each fld in rs.Fields 
    writeToExcelSheet(tdf.name,fld.name,index) 
next 
next 

end sub 

其中writeToExcelSheet()是由index指定Excel工作表中寫入表名和字段名行的功能,這應該是通過ByRef,因此您可以更改writeToExcelSheet()中的值。

+0

我假設這VBA將進入訪問權限?這可能很明顯,但只是想我會檢查。 – NapkinBob

+0

它可以進入Access或Excel。如果你把它放在Excel中,而不是使用'CurrentDb',你將會有一個聲明爲'Dim myDb'的變量作爲DAO.Database'並且使用例如'set myDb = opendatabase(「c:\ thisFolder \ myDb)賦值。 ACCDB「)'。您需要添加對Microsoft Access數據庫引擎的引用。讓我知道如果你仍然卡住,我可以發佈修改後的代碼。 – sigil

3

不需要創建RecordSet,因爲TableDef已包含Fields集合,並且您可能希望忽略系統表。

以下(訪問VBA代碼)將信息打印到即時窗口;使用Ctrl-G來查看它(從VB編輯器)並複製並粘貼。或者,將數據發送到Access表或Excel。使用Debug.Print td.Name; " | "; fld.Name生成在OP中建議的顯示。

+0

這是一個更好的答案;我不知道'TableDef.Fields'屬性。 – sigil

+0

@sigil謝謝。還有**數據庫文件管理員**,這將產生更多的細節,但最初是作爲一個報告。在Access 2010中(可能也是2007年),我們可以單擊Options來顯着減少它生成的細節數量。我不記得這些選項是否在Access 2003中可用。 –

+0

我喜歡這個答案,但我不確定它是否適用於我,有一些細節我失敗了,因此沒有提供足夠的重要性,因此沒有提及。我使用的數據庫是Access 97格式,但我只能訪問v。2007&2010(我想我可以挖掘97,但我正在尋找更少的工作)。我想過升級數據庫,但我遇到了問題,並且我無法在訪問97 mdb中添加任何VBA。我喜歡這個答案的簡單性,但我想我可能不得不使用@barrowc的答案,因爲它基於Excel。還沒有嘗試過。 – NapkinBob

0

在VBA中,您可以使用ADO Connection對象及其OpenSchema方法。這使您可以將很多不同的屬性讀入Recordset,然後您可以將其複製到Excel工作表中。

什麼屬性可以列出的詳細信息是here。使用adSchemaColumns來列出它們來自的字段和表。

在Excel中,使用工具>參考來設置基準,爲「Microsoft ActiveX數據對象2.8庫」,然後試試這個代碼:

Sub show_column_info() 

Dim cn As ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim fld As ADODB.Field 
Dim i As Integer 

Set cn = New ADODB.Connection 

With cn 
    .Provider = "Microsoft.Jet.OLEDB.4.0" 
    .ConnectionString = "Data Source='C:\Temp\Example Database.mdb';" 
    .Open 

    Set rs = .OpenSchema(adSchemaColumns) 
End With 

i = 0 
With Worksheets("Sheet1") 
    .Cells.ClearContents 

    For Each fld In rs.Fields 
     i = i + 1 
     .Cells(1, i).Value = fld.Name 
    Next fld 

    .Cells(2, 1).CopyFromRecordset rs 

    .Cells.Columns.Autofit 
End With 

rs.Close 
cn.Close 

End Sub 
相關問題