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 |
dla pola kombi też działa, sprawdziłem, wystarczy je tak samo nazwać.
oczywiście, chociaż nazwałbym wtedy kontrolkę raczej KombiTabela
A nie lepiej jako źródło dla pola Combi/listy podać SQL:”SELECT MSysObjects.Name FROM MSysObjects WHERE (((Left([MSysObjects]![Name],4)”MSys”)=-1) AND ((MSysObjects.Type)=1 Or (MSysObjects.Type)=4) Or (MSysObjects.Type)=6)) ORDER BY MSysObjects.Name;
TYPE 1 oznacza tabele lokalne, 4 podlinkowane ODBC, 6 podlinkowane
Dla Kwerend jest to 5
odwołania do tabel systemowych są całkiem fajne, ale w kolejnych wersjach może się w nich coś zmienić…
Ładowanie strony trwa bardzo długo…