niedziela, 2 października 2011

Szybkie sprawdzenie czy czy istnieje tabela o podanej nazwie

ADODB daje nam szereg możliwości. Jedną z nich jest możliwość pobrania informacji o strukturze bazy do której się podłączyliśmy. Przypadkiem szczególnym takich baz są bazy plikowe czyli popularne pliki mdb i accdb. Przypadkiem jeszcze bardziej szczególnym zaś są pliki Excel-a które można traktować jak pliki bazodanowe.

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.

1 komentarz: