Microsoft Access'te virgülle sınırlandırılmış dize olarak birden çok seçim Listesi Kutusu'nda seçili öğelerin nasıl alındığını

Not

Office 365 ProPlus, Microsoft 365 Kurumsal Uygulamaları olarak yeniden adlandırılıyor. Bu değişiklik hakkında daha fazla bilgi için, bu blog yazısını okuyun.

Bu makale, bir Microsoft Access veritabanı (.mdb) dosyası veya bir Microsoft Access veritabanı (.accdb) dosyası ve bir Microsoft Access projesi (.adp) dosyası için geçerlidir.

Orta: Temel makro, kodlama ve birlikte çalışabilirlik becerileri gerektirir.

Özet

Bu makalede, seçili öğelerin birden çok seçim listesi kutusundan nasıl alınıp sonra da microsoft access'te virgülle sınırlı dize olarak nasıl depolanır.

Daha Fazla Bilgi

Microsoft Access'te, liste kutusunun bir formdaki veya rapordaki MultiSelect özelliğinin değeri, liste kutusunun tek bir seçim listesi kutusu mu yoksa birden çok seçim listesi kutusu mu olduğunu belirler. Birden çok seçim listesi kutusunda, aynı anda birden çok liste öğesi seçebilirsiniz.

Seçili öğeyi liste kutusundan almak için liste kutusunun Değer özelliğini kullanabilirsiniz. Ancak, birden çok seçim listesi kutusu kullandığınızda ve Değer özelliğini kullanarak seçili öğeleri almaya çalıştığınızda, Değer özelliği Null döndürür.

Seçili öğeleri birden çok seçim listesi kutusunda alabilir ve ardından seçili öğeleri programlı bir şekilde virgülle sınırlandırılmış dize olarak depolayabilirsiniz. Bunu yapmak için şu adımları uygulayın:

  1. Microsoft Access'i başlatın.

  2. Northwind örnek veritabanını açın.

  3. Veritabanı penceresinin Nesneler bölümünde Formlar'ıtıklatın.

    Not Access 2007'de, Oluştur sekmesindeki Formlar grubunda Form Tasarımı'nı tıklatın.

  4. Sağ bölmede, Tasarım görünümünde form oluştur'uçift tıklatın.

    Not Access 2007'de bu adımı atlayın.

  5. Forma aşağıdaki denetimleri ekleyin ve denetimlerin özelliklerini belirtildiği gibi ayarlayın:

    List Box
    ----------------------------------------------------
    Name : NamesList
    Row Source Type : Table/Query
    Row Source : SELECT First Name FROM Employees
    Multi Select : Extended
    Width : 3.5"
    Height : 0.75"
    
    Text Box
    -----------------------
    Name : mySelections
    Width : 3.5"
    Height : 0.25"
    
    Command Button
    ----------------------------------
    Name : testmultiselect
    Caption : Display Selected Items
    Width : 1.375"
    Height : 0.3"
    
    Command Button
    ----------------------
    Name : ClrList
    Caption : Clear List
    Width : 1.375"
    Height : 0.3"
    
  6. Görünüm menüsünde Kod'utıklatın.

    Not Access 2007'de, Tasarım sekmesindeki Araçlar grubunda Kodu Görüntüle'yi tıklatın.

  7. Visual Basic Düzenleyicisi'ne aşağıdaki kodu yapıştırın:

Option Compare Database
Option Explicit

Private Sub Form_Current()
    Dim oItem As Variant
    Dim bFound As Boolean
    Dim sTemp As String
    Dim sValue As String
    Dim sChar As String
    Dim iCount As Integer
    Dim iListItemsCount As Integer

sTemp = Nz(Me!mySelections.Value, " ")
    iListItemsCount = 0
    bFound = False
    iCount = 0

Call clearListBox

For iCount = 1 To Len(sTemp) + 1
    sChar = Mid(sTemp, iCount, 1)
        If StrComp(sChar, ",") = 0 Or iCount = Len(sTemp) + 1 Then
            bFound = False
            Do
                If StrComp(Trim(Me!NamesList.ItemData(iListItemsCount)), Trim(sValue)) = 0 Then
                    Me!NamesList.Selected(iListItemsCount) = True
                    bFound = True
                End If
                iListItemsCount = iListItemsCount + 1
            Loop Until bFound = True Or iListItemsCount = Me!NamesList.ListCount
            sValue = ""
        Else
            sValue = sValue & sChar
        End If
    Next iCount
End Sub

Private Sub clearListBox()
    Dim iCount As Integer

For iCount = 0 To Me!NamesList.ListCount
        Me!NamesList.Selected(iCount) = False
    Next iCount
End Sub

Private Sub testmultiselect_Click()
    Dim oItem As Variant
    Dim sTemp As String
    Dim iCount As Integer

iCount = 0

If Me!NamesList.ItemsSelected.Count <> 0 Then
        For Each oItem In Me!NamesList.ItemsSelected
            If iCount = 0 Then
                sTemp = sTemp & Me!NamesList.ItemData(oItem)
                iCount = iCount + 1
            Else
                sTemp = sTemp & "," & Me!NamesList.ItemData(oItem)
                iCount = iCount + 1
            End If
        Next oItem
    Else
        MsgBox "Nothing was selected from the list", vbInformation
        Exit Sub  'Nothing was selected
    End If

Me!mySelections.Value = sTemp
End Sub

Private Sub clrList_Click()
    Call clearListBox
    Me!mySelections.Value = Null
End Sub

  1. Visual Basic Düzenleyicisini kapatın.

  2. Formu Form1 olarak kaydedin.

  3. Formu kapatın.

  4. Form1 formunu Form görünümünde açın:

    1. Veritabanı Penceresinin Nesneler bölümünde Formlar'ıtıklatın.

      Not Access 2007'de, gezinti bölmesinde Formlar grubunu tıklatın.

    2. Sağ bölmede, Form1'isağ tıklatın ve sonra Aç'ıtıklatın.

      Not Access 2007'de Form1'isağ tıklatın ve sonra Aç'ıtıklatın.

  5. Liste kutusunda birden çok öğe seçin. Bunu yapmak için liste kutusundaki bir öğeyi tıklatın, CTRL tuşunu basılı tutun ve ardından liste kutusunda daha fazla öğeyi tıklatın.

  6. Seçili Öğeleri Görüntüle'yitıklatın.

Birden çok seçim listesi kutusundan seçilen öğeler metin kutusunda virgülle sınırlandırılmış dize olarak görüntülenir.

Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; örtülü veya açık garanti vermez. Buna zımni garantiler, satılabilirlik veya belirli bir amaca uygunluk da dahildir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler.