Po podłączeniu do do tkiego pliku wystarczy uruchomić jedną metodę aby uzyskać pełen komplet informacji na temat tego zo znajduje się w środku a co najważniejsze nie musimy takiego pliku otwierać za pomocą Excel-a co mogło by być naprawdę czasochłonne.
Metoda o której mówię to OpenSchema, zaś parametr odpowiadający za pobranie informacji o tabelach to: adSchemaTables.
Przykładowy skrypt wykorzystujący ta metodę:
Function GetTablesFromDatabase(Plik As String, Tabela As String) As Boolean Dim aRs As ADODB.Recordset Dim aConn As ADODB.Connection Dim sConn As String Dim e As Long Dim ext As String e = InStrRev(Plik, ".") ext = Right(Plik, Len(Plik) - e) Select Case ext Case "xls" sConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Plik & "; Extended Properties =""Excel 8.0;HDR=Yes;IMEX=1"";" Case "xlsx" sConn = "Provider =Microsoft.ACE.OLEDB.12.0; Data Source =" & Plik & "; Extended Properties =""Excel 12.0 Xml;HDR=YES"";" Case "mdb" sConn = "Provider =Microsoft.Jet.OLEDB.4.0; Data Source =" & Plik & " ; User Id =admin; Password =;" Case "accdb" sConn = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" & Plik & ";" End Select On Error GoTo ERR_Handler: Set aConn = New ADODB.Connection With aConn .Mode = adModeShareDenyNone .CursorLocation = adUseServer .ConnectionString = sConn .Open Set aRs = aConn.OpenSchema(adSchemaTables) aRs.MoveFirst aRs.Filter = "TABLE_NAME='" & Tabela & "'" Do While Not aRs.EOF If aRs.Fields("TABLE_NAME").Value = Tabela Then GetTablesFromDatabase = True Exit Do End If aRs.MoveNext Loop .Close End With Exit Function ERR_Handler: MsgBox Err.Description If aConn.State > 0 Then aConn.Close End If End Function
Przykładowe wykorzystanie
Sub test() Debug.Print GetTablesFromDatabase("E:\Dane\user\Moje Dokumenty\zeszyt1.xls", "Arkusz1$") End Sub
Uzyskujemy w ten sposób informację o tym czy dany arkusz istnieje w bazie danych czy też nie.
W plikach accdb też może być hasło ;)
OdpowiedzUsuń