2016-09-08 7 views
5

Я хочу, чтобы иметь возможность просматривать содержимое файла laccdb моей базы данных доступа через VBA, чтобы я мог использовать его, чтобы предупреждать пользователей (через кнопку), кто еще находится в базе данных.Получить содержимое файла laccdb через VBA

Я специально не хочу использовать сторонний инструмент. Я пробовал использовать:

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' и, похоже, работает как шарм! Gracias. –

+1

Nifty. @TimEdwards: 'CurrentDb.Name' немного читаем, чем' CurrentDb.Properties (0) .Value' :) – Andre