2016-09-08 65 views
5

我希望能夠通過VBA查看我的訪問數據庫的laccdb文件的內容,以便我可以使用它來警告用戶(通過按鈕)數據庫中的其他人。通過VBA獲取laccdb文件的內容

我特別不想使用第三方工具。我曾嘗試使用:

Set ts = fso.OpenTextFile(strFile, ForReading) 
strContents = ts.ReadAll 

如果只有1個用戶在數據庫中,這工作正常。但對於多個用戶就得到由想必非ASCII字符混淆和一個條目後,進入這樣的事情:

complete gibberish

有沒有人有什麼建議?這很好,如果我只用記事本打開++文件...


代碼最終用於如下(我並不需要稱號,並已刪除了部分代碼沒有被使用):

Sub ShowUserRosterMultipleUsers() 
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset 

cn.Provider = "Microsoft.ACE.OLEDB.12.0" 
cn.Open "Data Source=" & CurrentDb.Name 

Set rs = cn.OpenSchema(adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}") 
While Not rs.EOF 
    Debug.Print rs.Fields(0) 
    rs.MoveNext 
Wend 

End Sub 

回答

6

我發現這裏面應該幫助,它不是實際讀取LDB文件,但它有您需要的信息(資料來源:https://support.microsoft.com/en-us/kb/198755):

Sub ShowUserRosterMultipleUsers() 
    Dim cn As New ADODB.Connection 
    Dim cn2 As New ADODB.Connection 
    Dim rs As New ADODB.Recordset 
    Dim i, j As Long 

    cn.Provider = "Microsoft.Jet.OLEDB.4.0" 
    cn.Open "Data Source=c:\Northwind.mdb" 

    cn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _ 
    & "Data Source=c:\Northwind.mdb" 

    ' The user roster is exposed as a provider-specific schema rowset 
    ' in the Jet 4 OLE DB provider. You have to use a GUID to 
    ' reference the schema, as provider-specific schemas are not 
    ' listed in ADO's type library for schema rowsets 

    Set rs = cn.OpenSchema(adSchemaProviderSpecific, _ 
    , "{947bb102-5d43-11d1-bdbf-00c04fb92675}") 

    'Output the list of all users in the current database. 

    Debug.Print rs.Fields(0).Name, "", rs.Fields(1).Name, _ 
    "", rs.Fields(2).Name, rs.Fields(3).Name 

    While Not rs.EOF 
     Debug.Print rs.Fields(0), rs.Fields(1), _ 
     rs.Fields(2), rs.Fields(3) 
     rs.MoveNext 
    Wend 

End Sub 
+0

這看起來像一個很好的起點。我試圖找出哪個版本的Jet必須更改爲4.0將不支持accdb文件。任何想法? –

+3

我已將它更改爲'Microsoft.ACE.OLEDB.12.0',並使用了''Data Source =「&CurrentDb.Properties(0).Value',它看起來像一個魅力!格拉西亞斯。 –

+1

俏皮。 @TimEdwards:'CurrentDb.Name'比'CurrentDb.Properties(0).Value'更具可讀性。:) – Andre