2016-09-08 39 views
5

Chcę móc wyświetlić zawartość pliku laccdb mojej bazy danych dostępu przez VBA, dzięki czemu mogę go użyć, aby ostrzec użytkowników (za pomocą przycisku), kto jeszcze jest w bazie danych.Pobierz zawartość pliku laccdb przez VBA

W szczególności nie chcę używać narzędzia innej firmy. Próbowałem użyć:

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

Działa to dobrze, jeśli tylko 1 użytkownik jest w bazie danych. Ale dla wielu użytkowników to pogubi przez przypuszczalnie znaków spoza ASCII i idzie do tego rodzaju rzeczy po jednym wpisie:

complete gibberish

Czy ktoś ma jakieś sugestie? To dobrze, jeśli po prostu otworzyć plik w Notepad ++ ...


Kod ostatecznie używany jest następujący (nie muszę tytuł i usunięciu kodu nie jest używany):

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 

Odpowiedz

6

znalazłem to co powinno pomóc, to nie jest faktycznie czyta plik LDB, ale ma to, czego potrzeba informacji (źródło: 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

który wygląda jak dobry punkt wyjścia. Próbuję ustalić, którą wersję Jet muszę zmienić na 4.0, która nie obsługuje plików accdb. Dowolny pomysł? –

+3

Zmieniłem go na 'Microsoft.ACE.OLEDB.12.0' i użyłem' "Data Source =" & CurrentDb.Properties (0) .Value' i wygląda na to, że działa jak urok! Gracias. –

+1

Nifty. @TimEdwards: 'CurrentDb.Name' jest nieco bardziej czytelny niż' CurrentDb.Properties (0) .Value' :) – Andre

Powiązane problemy