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 FunctionPrzykładowe wykorzystanie
Sub test()
Debug.Print GetTablesFromDatabase("E:\Dane\user\Moje Dokumenty\zeszyt1.xls", "Arkusz1$")
End SubUzyskujemy 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ń