Access
 sql >> Baza danych >  >> RDS >> Access

Samouczek sterowania ListView-02

Wprowadzenie.

Kontynuacja z zeszłotygodniowego samouczka ActiveX ListView Control-01.

W tej sesji samouczka nauczymy się wyszukiwać i znajdować określone wartości wierszy i kolumn oraz wyświetlać je w kontrolce etykiety w formularzu. Jest to bardzo przydatne, gdy mamy dużą ilość danych w kontrolce ListView. Dowiemy się również, jak używać niektórych ustawień właściwości ListView.

Przede wszystkim zobaczymy, jak łatwo jest zmienić kolejność kolumn, tak jak robimy to w przypadku widoku arkusza danych programu Access w taki sposób, w jaki chcemy, aby znajdowały się w kontrolce ListView. Dodaliśmy niektóre pola tekstowe, pola kombi, przyciski poleceń i etykietę, aby ułatwić wybór parametrów wyszukiwania i wyświetlanie wyników wyszukiwania.

Wprowadziłem kilka zmian w danych demonstracyjnych z zeszłego tygodnia. Pierwsze wartości kolumn, które pobrałem z przykładowej bazy danych Northwind.accdb tabeli pracowników. Utworzono zapytanie, aby połączyć wartości LastName i FirstName z nazwą pola Student i EmployeeID używanymi jako klucz (X01, X02 ...).

Zanim przejdziemy do operacji wyszukiwania, sprawdzimy, jak zmienić rozmieszczenie kolumn metodą „przeciągnij i upuść”.

Uwaga: Jeśli nie przeszedłeś przez wcześniejszą stronę samouczka i chciałbyś kontynuować tę sesję, przejdź do strony samouczka 01 kontroli ListView i pobierz bazę danych demo z dołu tej strony.

Rozpakuj plik i otwórz bazę danych. Formularz demonstracyjny będzie w widoku normalnym.

  1. Otwórz swoją bazę danych, korzystając z formularza demonstracyjnego z ostatniej sesji lub utworzonego przez siebie formularza, otwórz go w widoku normalnym.

    Teraz spróbujemy przeciągnąć i przenieść kolumnę ze środka listy (powiedzmy kolumnę Waga) i upuścić ją do Wiek i zobacz, co się stanie. Oczekuje się, że kolumna Wiek przesunie się w prawo i wstawi kolumnę przychodzącą w jej miejsce.

  2. Przesuń wskaźnik myszy na nagłówek kolumny o nazwie Waga, kliknij i przytrzymaj lewy przycisk myszy. Po naciśnięciu lewego przycisku myszy nagłówek kolumny przesunie się nieco w dół.

  3. Teraz spróbuj przeciągnąć kolumnę w lewo i upuścić ją w kolumnie Wiek .

    Nic się nie stanie, ponieważ nie włączyliśmy tej funkcji w arkuszu właściwości i jest to jedyne ustawienie, które musimy zmienić, aby ta funkcja działała.

  4. Zmień formularz w widoku projektu.

  5. Kliknij prawym przyciskiem myszy kontrolkę ListView i zaznacz opcję Obiekt ListViewCtrl i wybierz Właściwości.

  6. Dostępna jest opcja „AllowColumnReorder ' po prawej stronie. Umieść znacznik wyboru, aby go zaznaczyć, a następnie kliknij Zastosuj przycisk, a następnie OK przycisk, aby zamknąć widok właściwości.

  7. Teraz spróbuj powtórzyć powyższe kroki 2 i 3 powyżej i zobacz, co się stanie.

    To jedyne ustawienie, którego potrzebujesz, aby włączyć tę funkcję w kontrolce ListView. Być może zastanawiasz się, co z przestawianiem rzędów?

    Ta funkcja wymaga zaprogramowania pewnych procedur zdarzeń, tak jak to zrobiliśmy wcześniej w zdarzeniach przeciągania i upuszczania kontrolki TreeView. Tę część zrobimy za jakiś czas.

  8. Możesz eksperymentować z dowolną kolumną, aby przenieść się w dowolne miejsce, w tym również z pierwszą kolumną.

Uwaga: Przed upuszczeniem kolumny źródłowej sprawdź, czy kolumna docelowa jest zakryta przez ramkę kolumny przychodzącej, zanim spróbujesz upuścić. W przeciwnym razie przychodząca kolumna może przesunąć się do następnej pozycji kolumny po prawej stronie.

Następnie dowiemy się, jak szybko znaleźć niektóre informacje z ListView, zakładając, że mamy w nim dużą ilość danych.

Dodaliśmy podprogram do modułu Tutorial-01, aby załadować Nazwy nagłówka kolumny do pola kombi na formularzu z czerwonym kolorem tła. Nazwa kolumny zostanie użyta do znalezienia wartości kolumny (wiek, wzrost, waga lub klasa) ucznia.

Nowy kod VBA dodany do modułu klasy formularza.

Poniższa nowa procedura VBA została dodana do zeszłotygodniowego modułu klasowego formularza samouczka:

txtColCombo tworzy listę etykiet nagłówków kolumn (nazw pól) w ComboBox. Jeden z tych szczegółów wiku, wzrostu, wagi ucznia lub Klasa można znaleźć wraz z nazwiskiem ucznia w ramach operacji wyszukiwania i znajdowania.

Private Sub txtColCombo()
'Column Header List Combo
Dim lvwColHead As MSComctlLib.ColumnHeader
Dim cboName As ComboBox

Set cboName = Me.txtCol
cboName.RowSourceType = "Value List"

For Each lvwColHead In lvwList.ColumnHeaders
    If lvwColHead.Index = 1 Then
        'Nothing
    Else
        cboName.AddItem lvwColHead.Text
    End If
Next
'cboName.DefaultValue = "=txtCol.Column(0, 0)"

Set lvwColHead = Nothing
Set cboName = Nothing
End Sub

Combobox nie zostanie załadowany z domyślną wartością nazwy nagłówka kolumny. Jeśli ta opcja jest wybrana, wartość kolumny Studenta jest wyświetlana w dużej etykiecie pod nazwą studenta. Jeśli pozostanie puste, operacja wyszukiwania znajdzie tylko nazwisko ucznia.

Metoda operacji wyszukiwania jest bardzo elastyczna i szybka. Mamy dwie metody na znalezienie rekordu.

Znajdź rekord, podając wyszukiwany tekst. Wyszukiwany tekst może pochodzić z dowolnej kolumny, zarówno w całości, jak iw części, kilka znaków od lewej. Ponieważ mamy dwie kategorie członków obiektów w wierszu w kontrolce ListView:ListItem - pierwsza kolumna i pozostałe kolumny to ListSubItems. Operacja wyszukiwania tekstu na tych obiektach jest wykonywana oddzielnie.

Grupa opcji z dwoma polami wyboru znajduje się obok pola tekstowego wyszukiwania tekstu w formularzu, aby wybrać opcje wyszukiwania i znajdowania. Pierwsza opcja jest wybrana domyślnie, a wyszukiwanie odbywa się w pierwszej kolumnie (ListItem ), aby wyszukać podany tekst.

Wybierz drugą opcję, aby wyszukać tekst w ListSubItem kolumny.

Uwaga: Ponowne rozmieszczenie kolumn nie zmieni obiektów, a jedynie ich pozycję wyświetlania. Przeciąganie ListSubItem kolumna i umieszczenie jej w pierwszej kolumnie nie zmieni się w ListItem obiekt.

Jeśli chcesz pobrać nieznaną wartość z określonej kolumny, wybierz nazwę kolumny z pola ComboBox podanego poniżej pierwszego pola tekstowego w formularzu dla wyszukiwanego tekstu. Na przykład nie znasz pomiaru wzrostu ucznia i chciałbyś się tego dowiedzieć, wybierz nazwę kolumny Wysokość z ComboBox.

Po ustawieniu powyższych wartości kliknij Znajdź element Przycisk polecenia, aby przejść do operacji wyszukiwania. Jeśli wyszukiwanie się powiodło, wynik zostanie wyświetlony w dużej kontrolce Etykieta pod przyciskiem polecenia.

Kliknij przycisk polecenia [Znajdź przedmiot]

Wywołuje SearchAndFind() Procedura.

Private Sub SearchAndFind()
'Find by Student Name
Dim lstItem As MSComctlLib.ListItem
Dim strFind As String
Dim strColName As String
Dim strColVal As String
Dim j As Integer
Dim intOpt As Integer
Dim msgText As String

Me.Refresh
intOpt = Me.Opts


strFind = Nz(Me![txtFind], "")
strColName = Nz(Me![txtCol], "")

Select Case intOpt
    Case 1
        Set lstItem = lvwList.FindItem(strFind, , , lvwPartial)
    
        If Not lstItem Is Nothing Then
            j = lstItem.Index
            'format the display text
            msgText = lvwList.ColumnHeaders.Item(1).Text
            msgText = msgText & " : " & lstItem.Text & vbCr & vbCrLf
        Else
            MsgBox "Text '" & strFind & "' Not Found!", vbOKOnly + vbCritical, "cmdFind_Click()"
            Exit Sub
        End If
    Case 2
        Set lstItem = lvwList.FindItem(strFind, lvwSubItem, , lvwPartial)
        If Not lstItem Is Nothing Then
       'format the display text
            j = lstItem.Index
            msgText = lvwList.ColumnHeaders.Item(1).Text
            msgText = msgText & ": " & lstItem.Text & vbCr & vbCrLf
        Else
            MsgBox strFind & " Not Found!", vbOK + vbCritical, "cmdFind_Click()"
            Exit Sub
        End If
End Select

        If Len(strColName) = 0 Then 'If column name is not selected
            GoTo nextStep
        Else
            'Get the column value
            strColVal = GetColVal(lstItem, strColName)
            msgText = msgText & String(8 - (Len(strColName)), " ") & _
            strColName & ": " & Nz(strColVal, "")
        End If
nextStep:

If Len(msgText) > 0 Then 'assign to form label
    lvwList.ListItems.Item(j).Selected = True
    lblMsg.caption = msgText
End If

End Sub

Na początku programu zarówno Imię ucznia i Nazwa kolumny ( 0opcjonalnie), są kopiowane z pól tekstowych do zmiennych strFind i strColName odpowiednio po sprawdzeniu poprawności.

Uwaga: Nazwa kolumny Właściwość pola kombi „nie ma na liście” jest ustawiona na Tak. Możesz wybrać prawidłową wartość z listy, wpisać ją lub pozostawić puste pole kombi. Jeśli wpiszesz inną wartość, której nie ma na liście, nie zostanie ona zaakceptowana.

W oparciu o wybraną opcję wyszukiwania (1 — ListItem lub 2 — ListSubItem) metoda skanowania jest kierowana do określonego obiektu(ów).

Użycie jednej z tych metod wyszukiwania spowoduje znalezienie obiektu ListItem lub wiersz zawierający wyszukiwany tekst. Wartość indeksu elementu ListItem jest zapisywana w zmiennej J do późniejszego wykorzystania w programie.

Uwaga: System automatycznie tworzy numery indeksu automatycznie w czasie wypełniania elementów kontrolnych ListView.

ListItem.Text wartość jest pobierana. Ta informacja jest połączona z pierwszym nagłówkiem ColumnHeader. Tekst (np. Student:Robert King) i dodany do ciągu Msgtext w celu wyświetlenia w kontrolce Etykieta w formularzu.

Jeśli kolumna Nazwa nagłówka jest zaznaczona w ComboBox, wtedy GetColVal() Funkcja jest wywoływana z obiektem ListItem i wartością tekstu nagłówka kolumny jako parametrami. Ta opcja jest dobra do pobierania z rekordu nieznanych informacji o Uczniu, takich jak wzrost ucznia.

Kod VBA funkcji GetColVal().

Private Function GetColVal(lvwItem As MSComctlLib.ListItem, ByVal colName As String) As String
Dim i As Integer
Dim strVal As String
    'first column is student name
    'check for column value from 2nd column onwards
    For i = 2 To lvwList.ColumnHeaders.Count
        If lvwList.ColumnHeaders(i).Text = colName Then 'if col name matches
            strVal = lvwItem.ListSubItems.Item(i - 1).Text 'get column value
            Exit For 'No further scanning required
        End If
    Next
GetColVal = strVal 'return the retrieved the value
End Function

Powyższa funkcja prosi o podanie dwóch parametrów. Pierwszym parametrem jest ListItem, w którym znajduje się nazwisko Studenta. Drugim parametrem jest nazwa kolumny. Wiek, wzrost, waga, klasa wybranego ucznia wartości są przechowywane w ListItem.ListSubItems Przedmioty. Funkcja przegląda lvwList.ColumnHeader wartości, aby znaleźć pasującą nazwę kolumny, po stwierdzeniu, że numer indeksu kolumny jest używany do pobierania wartości kolumny z obiektu ListSubItems i zwraca wartość do programu wywołującego.

Procedura zdarzenia [Znajdź według klawisza] Kliknij przycisk polecenia.

Dodaliśmy inną metodę, aby znaleźć nazwisko ucznia przy użyciu unikalnej wartości klucza ListItem jeśli jest używany podczas tworzenia listy ListItem. Mimo że jest to opcjonalne, lepiej jest dodać unikatową wartość ciągu klucza (powinna zaczynać się od znaku alfabetu), niż ją ignorować.

Na przykład, jeśli musimy znaleźć czyjeś informacje po numerze identyfikacyjnym, takim jak numer ubezpieczenia społecznego, numer dowodu osobistego, numer paszportu lub numer prawa jazdy itd., jedna z tych informacji może zostać wykorzystana jako wartość klucza elementu ListItem. Znalezienie rekordu o tej unikalnej wartości jest bardzo łatwe i szybsze niż powyższa metoda wyszukiwania według tekstu.

Procedura zdarzenia cmdKey_Click().

Calls FindByKey() Subroutine.
Private Sub FindByKey()
Dim colHeader As MSComctlLib.ColumnHeader
Dim lvItem As MSComctlLib.ListItem
Dim lvKeyVal As String
Dim lvColName As String
Dim txt As String
Dim msgText As String
Dim varcolVal As Variant

lvKeyVal = UCase(Nz(Me!txtKey, ""))
lvColName = Nz(Me!txtCol, "")

If len(lvKeyVal) > 0 then
On Error Resume Next 
Set lvItem = lvwList.ListItems.Item(lvKeyVal) 'get the item by Key
If Err > 0 Then
    Err.Clear
    MsgBox "Key Value: '" & lvKeyVal & "' Not Found!", vbOKOnly + vbCritical, "cmdKey_Click()"
    On Error GoTo 0
    Exit Sub
End If
Else
	MsgBox "Please Provide a Valid Key-Value!",vbOKOnly + vbCritical, "cmdKey_Click()"
    Exit Sub
End If

txt = lvItem.Text 'get the student name
'format message text
msgText = lvwList.ColumnHeaders.Item(1).Text & " : "
msgText = msgText & txt & vbCr & vbCrLf

If Len(lvColName) > 0 Then 'if column name is given
    varcolVal = GetColVal(lvItem, lvColName) 'get column val of student
    msgText = msgText & String(8 - Len(lvColName), " ") & lvColName & ": " & varcolVal ' add it to display
End If

lvItem.Selected = True 'highlight the item on form
Me.lblMsg.caption = msgText 'assign details to form Label
End Sub

Jak widać w powyższym podprogramie, mogliśmy bezpośrednio znaleźć ListItem gdzie jest imię i nazwisko Studenta, z wykorzystaniem pary klucz-wartość, za pomocą jednej instrukcji:Set lvItem =lvwList.ListItems.Item(xKeyVal).

Następna linia odczytuje tekst ListItem (lub nazwisko Studenta) do zmiennej txt . Następne dwie linie tworzą tekst wiadomości z imieniem ucznia w zmiennej ciągu msgText.

Następne Jeśli . . .Wtedy instrukcja sprawdza, czy w kontrolce pola kombi wprowadzono wartość nazwy kolumny. Jeśli zostanie znaleziony, wywołuje funkcję GetColVal() Funkcja z wymaganymi parametrami, aby znaleźć wartość kolumny i pobrać ją w varColVal Zmienna i powraca do programu wywołującego. Nazwa kolumny i jej pobrana wartość są dodawane do zmiennej ciągu msgText w celu wyświetlenia w kontrolce Etykieta w formularzu.

Następne stwierdzenie podkreśla rekordowy rząd ucznia jako wizualną wskazówkę, że szukany element znajduje się w rzędzie. Wartość msgText jest wyświetlana we właściwości Caption etykiety w formularzu.

Pełny kod VBA w module formularzy.

Option Compare Database
Option Explicit

Dim lvwList As MSComctlLib.ListView 'ListView Control
Dim lvwItem As MSComctlLib.ListItem '
Dim ObjImgList As MSComctlLib.ImageList
Const prfx As String = "K"

Private Sub Form_Load()
    Call LoadListView
    Call txtColCombo
End Sub

Private Function LoadListView()
'Populate the ListView control with Student Details
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim intCounter As Integer
Dim strKey As String

'Assign ListView Control on Form to lvwList Object
 Set lvwList = Me.ListView1.Object
 
With lvwList
    .AllowColumnReorder = True
    .Enabled = True
    .Font = "Verdana"
    .Font.Bold = True
    .Font.Size = 9
    .ForeColor = vbBlack
    .BackColor = vbWhite
 End With
 
 'Create Column Headers for ListView
 With lvwList
    .ColumnHeaders.Clear 'initialize header area
    
   'Syntax: .ColumnHeaders.Add Index, Key, Text, Width, Alignment, Icon
    .ColumnHeaders.Add , , "Student", 2500
    .ColumnHeaders.Add , , "Age", 1200
    .ColumnHeaders.Add , , "Height", 1200
    .ColumnHeaders.Add , , "weight", 1200
    .ColumnHeaders.Add , , "Class", 1200
    
 End With
 
 'Initialize ListView Control
  While lvwList.ListItems.Count > 0
        lvwList.ListItems.Remove (1)
  Wend

'Student Names and Ids are taken from Employees Table
'through the StudentQ Query.
Set db = CurrentDb
Set rst = db.OpenRecordset("StudentQ", dbOpenDynaset)

With lvwList
    Do While Not rst.EOF And Not rst.BOF
        intCounter = rst![EmployeeID]
        strKey = "X" & Format(intCounter, "00") 'Key Value sample: X01
        
    'Syntax: .ListItems.Add(Index, Key, Text, Icon, SmallIcon)
        Set lvwItem = .ListItems.Add(, strKey, rst![Student])
        
        With lvwItem
    'Syntax: .Add Index,Key,Text,Report Icon,TooltipText
            .ListSubItems.Add , strKey & CStr(intCounter), CStr(5 + intCounter)
            .ListSubItems.Add , strKey & CStr(intCounter + 1), CStr(135 + intCounter)
            .ListSubItems.Add , strKey & CStr(intCounter + 2), CStr(40 + intCounter)
            .ListSubItems.Add , strKey & CStr(intCounter + 3), ("Class:" & Format(intCounter, "00"))

       End With
        rst.MoveNext
    Loop
rst.Close
Set rst = Nothing
Set db = Nothing
Set lvwItem = Nothing
End With
lvwList.Refresh

End Function


Private Sub cmdClose_Click()
   DoCmd.Close acForm, Me.Name
End Sub

Private Sub cmdFind_Click()
Call SearchAndFind

End Sub

Private Sub cmdKey_Click()
Call FindByKey
End Sub

Private Function GetColVal(lvwItem As MSComctlLib.ListItem, ByVal colName As String) As String
Dim i As Integer
Dim strVal As String
    'first column is student name
    'check for column value from 2nd column onwards
    For i = 2 To lvwList.ColumnHeaders.Count
        If lvwList.ColumnHeaders(i).Text = colName Then 'if col name matches
            strVal = lvwItem.ListSubItems.Item(i - 1).Text 'get column value
            Exit For 'No further scanning required
        End If
    Next
GetColVal = strVal 'return the retrieved the value
End Function



Private Sub txtColCombo()
'Column Header List Combo
Dim lvwColHead As MSComctlLib.ColumnHeader
Dim cboName As ComboBox

Set cboName = Me.txtCol
cboName.RowSourceType = "Value List"

For Each lvwColHead In lvwList.ColumnHeaders
    If lvwColHead.Index = 1 Then
        'Nothing
    Else
        cboName.AddItem lvwColHead.Text
    End If
Next
'cboName.DefaultValue = "=txtCol.Column(0, 0)"

Set lvwColHead = Nothing
Set cboName = Nothing
End Sub


Public Sub SearchAndFind()
'Find by Student Name
Dim lstItem As MSComctlLib.ListItem
Dim strFind As String
Dim strColName As String
Dim strColVal As String
Dim j As Integer
Dim intOpt As Integer
Dim msgText As String

Me.Refresh
intOpt = Me.Opts

strFind = Nz(Me![txtFind], "")
strColName = Nz(Me![txtCol], "")

Select Case intOpt
    Case 1
        Set lstItem = lvwList.FindItem(strFind, , , lvwPartial)
        If Not lstItem Is Nothing Then
            j = lstItem.Index
            'format the display text
            msgText = lvwList.ColumnHeaders.Item(1).Text
            msgText = msgText & " : " & lstItem.Text & vbCr & vbCrLf
        Else
           MsgBox "Text '" & strFind & "' Not Found in the List!", vbOKOnly + vbCritical, "cmdFind_Click()"
        Exit Sub
        End If
    Case 2
        Set lstItem = lvwList.FindItem(strFind, lvwSubItem, , lvwPartial)
        If Not lstItem Is Nothing Then
       'format the display text
            j = lstItem.Index
            msgText = lvwList.ColumnHeaders.Item(1).Text
            msgText = msgText & ": " & lstItem.Text & vbCr & vbCrLf
        Else
            MsgBox strFind & " Not Found!", vbOK + vbCritical, "cmdFind_Click()"
            Exit Sub
        End If
End Select

        If Len(strColName) = 0 Then 'If column name is not selected
            GoTo nextStep
        Else
            'Get the column value
            strColVal = GetColVal(lstItem, strColName)
            msgText = msgText & String(8 - (Len(strColName)), " ") & _
            strColName & ": " & Nz(strColVal, "")
        End If
nextStep:

If Len(msgText) > 0 Then 'assign to form label
    lblMsg.caption = msgText
    lvwList.ListItems.Item(j).Selected = True
End If
End Sub

Public Sub FindByKey()
Dim colHeader As MSComctlLib.ColumnHeader
Dim lvItem As MSComctlLib.ListItem
Dim lvKeyVal As String
Dim lvColName As String
Dim txt As String
Dim msgText As String
Dim varcolVal As Variant


lvKeyVal = UCase(Nz(Me!txtKey, ""))
lvColName = Nz(Me!txtCol, "")

On Error Resume Next
If Len(lvKeyVal) > 0 Then
Set lvItem = lvwList.ListItems.Item(lvKeyVal) 'get the item by Key
    If Err > 0 Then
        Err.Clear
        MsgBox "Key Value: '" & lvKeyVal & "' Not Found!", vbOKOnly + vbCritical, "cmdKey_Click()"
       On Error GoTo 0
        Exit Sub
    End If
Else
    MsgBox "Please Provide a Valid Key-Value!", vbOKOnly + vbCritical, "cmdKey_Click()"
    Exit Sub
End If

txt = lvItem.Text 'get the student name
'format message text
msgText = lvwList.ColumnHeaders.Item(1).Text & " : "
msgText = msgText & txt & vbCr & vbCrLf

If Len(lvColName) > 0 Then 'if column name is given
    varcolVal = GetColVal(lvItem, lvColName) 'get column val of student
    msgText = msgText & String(8 - Len(lvColName), " ") & lvColName & ": " & varcolVal ' add it to display
End If

lvItem.Selected = True 'highlight the item on form
Me.lblMsg.caption = msgText 'assign details to form Label
End Sub

Pobierz demonstracyjną bazę danych z następującego linku:



  1. Samouczek sterowania Microsoft TreeView
  2. Tworzenie menu dostępu za pomocą TreeView Control
  3. Przypisywanie obrazów do węzłów TreeView
  4. Przypisywanie obrazów do węzłów TreeView-2
  5. Kontrolka TreeView Zaznacz Dodaj Usuń
  6. Dostęp do menu rozwijanego TreeView ImageCombo
  7. Ponownie rozmieszczaj węzły TreeView przez przeciąganie i upuszczanie
  8. Kontrola ListView z MS-Access TreeView
  9. Zdarzenia przeciągania i upuszczania sterowania ListView
  10. Kontrola TreeView z podformularzami

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wprowadzenie do zapytań specjalnych

  2. Nadszedł czas, abyśmy obdarzyli IDE Microsoft Access trochę miłości

  3. Jak zmienić nazwę tabeli w programie Microsoft Access

  4. Dziesięć sposobów, w jakie Twój projekt danych może się nie powieść

  5. Parametry ciągu połączenia dla Schema.ini