Akademia VBA

Czyli jak uzyskać władzę nad światem … danych

ADOX

Kategorie: Access VBA,Excel VBA,SQL Server,Uniwersalne VBA — dariuszkolasa-dk o 17:34, 15 Gru 2019

Bardzo stara i bardzo fajna biblioteka do obsługi struktury bazy. Na liście referencji nazywa się Microsoft ADO Ext. XX for DDL and Security. Potrzebna jest też biblioteka ADO do nawiązania połączenia. Kluczowy jest ADOX.Catalog, który pozwala na iterowanie po tabelach, polach itp.
Poniższy kod wymaga tzw. connection string (stała CN_STR), których przykłady są w artykule o ADO – i wszystkie bazy są nasze

Sub Lista_Tabel_Kolumn()
    Dim cn As New ADODB.Connection
    Dim cat As New ADOX.Catalog
    Dim tb As ADOX.Table
    Dim k As ADOX.Column
 
    cn.ConnectionString = CN_STR 'dodaj swoje ustawienia!
    cn.Open
 
    Set cat.ActiveConnection = cn
 
    For Each tb In cat.Tables
        For Each k In tb.Columns
            Debug.Print tb.Name, k.Name
        Next
    Next
End Sub

Jak załadować nazwy tabel do listy na formularzu

Kategorie: Access VBA — Dariusz Kolasa o 16:25, 22 Cze 2010

Czasem chcemy aby użytkownik mógł wygodnie wskazać nazwę tabeli, np aby użyć jej jako parametru metody transport arkusza. Aby poniższy kod zadział:

  • Na formularzu musi znajdować się kontrolka typu Pole listy.
  • Musi się nazywać ListaTabel.
  • Procedura musi być umieszczona w module formularza.

Procedura zostanie wywołana automatycznie na starcie dzięki wywołaniu jej na zdarzeniu Load formularza. Bardzo podobnie możemy załadować nazwy kwerend. Dodatkowo procedura nie wyświetla tabel systemowych (ich nazwy zaczynają się na „MSys”)

Private Sub Form_Load()
    LadujListeTabel
End Sub
 
Sub LadujListeTabel()
    Dim db As DAO.Database
    Dim tb As DAO.TableDef
 
    ListaTabel.RowSourceType = "Value List"
    ListaTabel.RowSource = ""
 
    Set db = CurrentDb
    For Each tb In db.TableDefs
        If Left(tb.Name, 4) <> "MSys" Then
            ListaTabel.AddItem tb.Name
        End If
    Next
 
    Set db = Nothing
    Set tb = Nothing
 
End Sub