Access tablosundan veri süzme / Listview de listeleme ve Seçim yapma

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
405
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba,

Excelde userform ve diğer nesneleri kullanarak yaptığım bazı uygulamaları Listview ve Access e yansıtmaya çalışıyorum. Şöyleki, Excelin sayfalarını veri tabanı gibi kullanmaktaydım ve süzme, listeleme işlemlerinde özellikle listbox kullanmaktaydım.

Yapmaya çalıştığım şey;
Excel sayfalasının yerine veri tabanı olarak Access kullanmaya çalışacağım ve buna yeni başladım.
Listbox yerine listview kullanmaya çalışacağım ( listboxa 10 sütundan fazla alamamadan dolayı)

Bu mesajımda iki sorum olacak;

Birincisi;

Aşağıdaki kodları listboxta veri süzme için kullanmaktayım. Bu kodlarda excel sayfası yerine access tablosunu, listbox yerine listviewi kullanmak istiyorum. Acaba kodlar buna göre uyarlanabilir mi. Ya da daha geniş bir soru olarak, listbox üzerinde yaptığım uygulamaların aynısını listview üzerinde yapma şansım varmı.

Kod:
Sub Firma_Ara()

Set s1 = Sheets("Cari")
ListBox3.ColumnCount = 2
ListBox3.ColumnWidths = "150;80"
Dim a As Long, i As Long
    ReDim dizial(1 To 2, 1 To 1)
    If TextBox1.Text = "" Then Exit Sub
    ListBox3.Clear
    For i = 2 To s1.Cells(Rows.Count, 3).End(3).Row
        If UCase(Replace(Replace(s1.Cells(i, "C"), "ı", "I"), "i", "İ")) Like _
        UCase(Replace(Replace(TextBox1.Text, "ı", "I"), "i", "İ")) & "*" Then
       '"*" & UCase(Replace(Replace(TextBox1.Text, "ı", "I"), "i", "İ")) & "*" Then
      
            a = a + 1
            ReDim Preserve dizial(1 To 2, 1 To a)
            dizial(1, a) = s1.Cells(i, "C")
            dizial(2, a) = s1.Cells(i, "D")
          
            
        End If
    Next i
    ListBox3.Column = dizial
    Erase dizial
    a = Empty
    i = Empty
 
End Sub
İkinci soru olarak,

Aynı uygulama içinde aşağıdaki kodlar ile listbox1 üzerinde double click ve enter ile seçim yapabiliyorum. Listview1 üzerinde aynı uygulamayı yapmaya çalıştım. Double click ile seçim yapıp textboxlara veri yükleyebiliyorum ancak enter ile seçim yapmaya kod bulamadım. Enter ile seçim yapıp textboxların dolması için nasıl bir satır aralığı olmalıdır.
Kod:
Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then       ' enter tuşu
    Kontrol = True
    TextBox1 = ListBox1.Column(0)
    TextBox5 = ListBox1.Column(0)
    TextBox2 = ListBox1.Column(1)
    TextBox3 = ListBox1.Column(2)
    TextBox4 = ListBox1.Column(3)
    
    Me.ListBox1.Visible = False
    TextBox5.SetFocus
End If
End Sub

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

    Kontrol = True
    TextBox1 = ListBox1.Column(0)
    TextBox5 = ListBox1.Column(0)
    TextBox2 = ListBox1.Column(1)
    TextBox3 = ListBox1.Column(2)
    TextBox4 = ListBox1.Column(3)
    
    Me.ListBox1.Visible = False
    TextBox5.SetFocus
    
End Sub
Son olarak şöylesibir sorum olacak, Listview de visible = false ve visible = true kullandığımız zaman listview in userform üzerindeki yeri değişiyor. Sol üst köşeye sıfırlanıyor sanırım. userform üzerinde yerini nasıl sabitleyebilirim.

Üzerinde çalıştığım dosyaları eklemeye çalışacağım.

access accdb uzantılı ve kitap adı Proje, tablo adı deneme
 

Ekli dosyalar

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Access ten listboxa veri alırken 10 sütun sınırlaması olmayacaktır.
Listbox kullanabilirsiniz.Listwievden daha hızlı veri alabilirsiniz.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
405
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Access ten listboxa veri alırken 10 sütun sınırlaması olmayacaktır.
Listbox kullanabilirsiniz.Listwievden daha hızlı veri alabilirsiniz.
Sayın Orion, ben listbox ile yapmaya çalıştığım uygulamada aşağıdaki kod ile filtreleme yapıyorum. Bunun 10 sütun ile sınırlandığını sanmıştım, eksik bilgim varmış. Bu durumda listbox daha uygun ve mantıklı. Teşekkürler uyarınız için.

Kod:
Sub Firma_Ara()

Set s1 = Sheets("Cari")
ListBox3.ColumnCount = 2
ListBox3.ColumnWidths = "150;80"
Dim a As Long, i As Long
    ReDim dizial(1 To 2, 1 To 1)
    If TextBox1.Text = "" Then Exit Sub
    ListBox3.Clear
    For i = 2 To s1.Cells(Rows.Count, 3).End(3).Row
        If UCase(Replace(Replace(s1.Cells(i, "C"), "ı", "I"), "i", "İ")) Like _
        UCase(Replace(Replace(TextBox1.Text, "ı", "I"), "i", "İ")) & "*" Then
       '"*" & UCase(Replace(Replace(TextBox1.Text, "ı", "I"), "i", "İ")) & "*" Then
      
            a = a + 1
            ReDim Preserve dizial(1 To 2, 1 To a)
            dizial(1, a) = s1.Cells(i, "C")
            dizial(2, a) = s1.Cells(i, "D")
          
            
        End If
    Next i
    ListBox3.Column = dizial
    Erase dizial
    a = Empty
    i = Empty
 
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,454
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ek bilgi;

Eğer ListBox nesnesine verileri AddItem yöntemiyle yüklerseniz 10 sütun sınırlaması vardır. Bunun dışında dizi ya da RowSource metodu ile veri yüklerseniz bu sınırlama söz konusu değildir.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
405
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Ek bilgi;

Eğer ListBox nesnesine verileri AddItem yöntemiyle yüklerseniz 10 sütun sınırlaması vardır. Bunun dışında dizi ya da RowSource metodu ile veri yüklerseniz bu sınırlama söz konusu değildir.

Teşekkürler Korhan bey,

AddItem kullanıldığında 10 sütun sınırlaması olduğunu öğrenmiştim. Ancak nedense Listboxla ilgili şu tanımlamalar yapılırken yine en fazla 10 sütuna kadar izin verildiği gibi saçma bir düşünce oluşmuş bende;

ListBox3.ColumnCount = 2 Bu şekilde ifade edildiğinde en fazla 10 sütun olabildiğini düşünmekteydim
ListBox3.ColumnWidths = "150;80"


Sayın orion ile beraber yaptığınız hatırlatma ve bilgi için teşekkürler,
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
405
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba tekrardan,

Yapılan uyarılardan sonra, açmış olduğum konu ile ilgili olarak ListView yerine Listbox kullanmaya çalışıyorum.
Konu ile ilgili olarak aşağıda Cari adlı excel sayfası üzerinde yapabildiğim kodları Access deki Cari adlı tablo üzerinde yapmaya çalışıyorum. İlgili kodlar access için nasıl revize edilebilir.

Kod:
Sub Firma_Ara_Unvan()

Set s1 = Sheets("Cari")
ListBox1.ColumnCount = 3
ListBox1.ColumnWidths = "60;0;60"
Dim a As Long, i As Long
    ReDim dizial(1 To 3, 1 To 1)
    If TextBox21.Text = "" Then Exit Sub
    ListBox1.Clear
    For i = 2 To s1.Cells(Rows.Count, 2).End(3).Row
        If UCase(Replace(Replace(s1.Cells(i, "B"), "ı", "I"), "i", "İ")) Like _
        UCase(Replace(Replace(TextBox21.Text, "ı", "I"), "i", "İ")) & "*" Then
       '"*" & UCase(Replace(Replace(TextBox1.Text, "ı", "I"), "i", "İ")) & "*" Then
      
            a = a + 1
            ReDim Preserve dizial(1 To 3, 1 To a)
            dizial(1, a) = s1.Cells(i, "B")
            dizial(2, a) = s1.Cells(i, "C")
            dizial(3, a) = s1.Cells(i, "D")

          
            
        End If
    Next i
    ListBox1.Column = dizial
    Erase dizial
    a = Empty
    i = Empty
 
End Sub
Yukardaki kodlar ile, textboxa değer girdikçe cari sayfasındaki ünvan bilgileri filtreleniyor. Bunun access revizesi nasıl,

Access için kendimce uyarlamaya çalıştığım kodlar aşağıda olduğu gibi

Kod:
Private Sub Firma_Ara_Axxess()
ListBox1.ColumnCount = 3
ListBox1.ColumnWidths = "150;60;60;"

    Dim a As Long, i As Long
    Dim yol As String, dosya As String
    Dim baglan As New ADODB.Connection, ks As New ADODB.Recordset
    yol = ThisWorkbook.Path & "\"
    dosya = "Proje.accdb"
    Set baglan = New ADODB.Connection
    Set ks = New ADODB.Recordset
    baglan.Open "provider=microsoft.ace.oledb.12.0;data source=" & yol & dosya & ";"
    ks.Open "select * from [deneme];", baglan, adOpenKeyset, adLockReadOnly
    ListBox1.Clear
    s1 = ks
    
    If ks.RecordCount > 0 Then
        ks.MoveFirst
        For i = 1 To ks.RecordCount
        If UCase(Replace(Replace(ks.Fields(i, 2), "ı", "I"), "i", "İ")) Like _
        UCase(Replace(Replace(TextBox1.Text, "ı", "I"), "i", "İ")) & "*" Then

            ListBox1.Column(0) = ks(0).Value
            ListBox1.Column(1) = ks(1).Value
            ListBox1.Column(2) = ks(2).Value
            ListBox1.Column(3) = ks(3).Value

            ks.MoveNext
        Next i
    End If
    TextBox23 = ks.Fields.Count
    TextBox24 = ks.RecordCount
    
    ks.Close: baglan.Close
    Set ks = Nothing: Set baglan = Nothing
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,454
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Kayıt setine tüm veriyi yükleyip eğer sorgusu ile veriler sorgulayıp ListBox nesnesine yüklemek yerine ado sorgusu içinde bu filtreyi yaptıktan sonra oluşan kayıt setini ListBox nesnesine yüklemek daha hızlı sonuç verebilir.
 

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,521
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR
Altın Üyelik Bitiş Tarihi
29-05-2025
Değerli Dostlar;

Sayın walabi'nin ilk iletideki dosyasını indirdim. Ancak Form-Cari ile Form1, Form2 ve Form3 sayfalarda hiç gözükmüyor. Office 365 kullanıyorum.
Ne yapmalıyım?

Yanıtınız için önceden teşekkürler.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
405
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba,

Kayıt setine tüm veriyi yükleyip eğer sorgusu ile veriler sorgulayıp ListBox nesnesine yüklemek yerine ado sorgusu içinde bu filtreyi yaptıktan sonra oluşan kayıt setini ListBox nesnesine yüklemek daha hızlı sonuç verebilir.
Korhan Bey, ado hakkında bilgim yok, açıkcası nasıl yapılır bir fikrim de yok. Excel sayfasında veritabanı olarak yapabildiğim işlemleri sadece access de yapmaya çalışıyorum. Bu yüzden ilk aklıma gelen yine siz ve diğer forum yetkililerinin yardımlarıyla kullandığım kodları access de kullancak şekilde revize etmeye çalışıyorum. Farklı bir yöntemle yapılabilirse buda olur. Ancak benim kod bilgim excelin vba kısmındaki kadar. Diğer diller ile şuana kadar ilgilenmedim.

İşimi görecek her türlü değişik yöntemi de uygulamaya çalışırım.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
405
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Değerli Dostlar;

Sayın walabi'nin ilk iletideki dosyasını indirdim. Ancak Form-Cari ile Form1, Form2 ve Form3 sayfalarda hiç gözükmüyor. Office 365 kullanıyorum.
Ne yapmalıyım?

Yanıtınız için önceden teşekkürler.

Merhaba,

İlgili dosyanın adı proje ama henüz üzerinde net bir durum yok. Yani yapım, derleme, aşamasında şeklinde düşünün. Şuan üzerinde durduğum sadece bir form var. ctrl + g ile formu görüntüleyebilirsiniz.

Excel dosyasının son halini yükleyeyim. Textboxlardan access basit bir kayıt yöntemi ve excel sayfasından filtreleme yapmakta. Filtreleme işlemini access üzerinden yapabilmek adına konu açtım zaten, yardım edilirse bunuda işlerim dosyaya.
 

Ekli dosyalar

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,291
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Özel kişi
Aşağıdaki linkte yer alan "Telefon Defteri" uygulamasını biraz inceleyin, size fikir verir....


.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
405
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Aşağıdaki linkte yer alan "Telefon Defteri" uygulamasını biraz inceleyin, size fikir verir....


.
Sayın Haluk, bu uygulamayı daha önce indirmiştim, bilgisayarımda duruyor, hatta sayın oriounda bir uygulaması var. Ancak ben henüz kendim çözümünü bulamadım. Bunun sebebi de ado kavramına henüz çok fazla aşina olmamadan kaynaklanıyor sanırım. Aradığım şeyin basit olduğunu düşünüyorum , araştırıyorum ama doğru çözüme ulaşmam biraz zaman alacak benim için.
 

akd

Destek Ekibi
Destek Ekibi
Katılım
14 Ağustos 2004
Mesajlar
1,111
Excel Vers. ve Dili
2003
Ne yapmak istediğinizi net bir şekilde yazın, örnek bir belge ekleyin size yardımcı olmaya çalışacağım.
iyi çalışmalar
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
405
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Ne yapmak istediğinizi net bir şekilde yazın, örnek bir belge ekleyin size yardımcı olmaya çalışacağım.
iyi çalışmalar

Merhaba örnek bir dosya aslında yüklemiştim önceki mesajımda. Tekrardan yüklüyorum. Ne yapmak istediğimi dosyayı indirdiğinizde daha rahat anlarsınız. Anlatmaya çalışayım. ctrl+g ile userform açtınız, form üzerinde ARA şeklinde iki textbox var. Textbox21 ve 22. textbox21 firma ünvanından sorgulama, yada filtreleme diyeyim, textbox22 de vergi numarasından sorgulama yapmak için. Yapmaya çalıştığım şeyi excel vba da yapıyorum. Sadece veritabanı olarak excel sayfasının yerine access kullanmaya çalışıyorum. Yani kaydet, filtrele, sil, değiştir gibi olayları access veritabanı üzerinde yapmaya çalışacağım.

İstediğim şey ise, textbox21 e örneğin "a" yazdınız , a ile başlayan ünvanlar listboxa yüklenmekte. Bunun vbada işleyen kodunu zaten göreceksiniz ve anlarsınız. Aynı uygulamayı access de nasıl yaparım. Yani listboxa dolması gereken verilerin kaynağını excel sayfasından access taşımaya çalışıyorum.

Teşekkürler,
 

Ekli dosyalar

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
405
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba,

Açmış olduğum konu ile ilgili olarak kendim bir sonuca yaklaştım. Sitedeki örnek uygulamalardan yararlanarak aradığım sonuca aşağıdaki kod ile ulaşabiliyorum. Yalnız şöylesi bir durum var. Access ve ADO ile ilgili kavramlara yeni giriş yaptım sayılır. Yaptığımdan tam emin olmamakla beraber, hatasız çalışan ve aranan sonucu veren kod sanırım doğrudur diye düşünüyorum.

Aşağıdaki kodda ;

ks.Open "select * from [deneme] where Unvan Like '" & TextBox21.Text & "%" & "'", baglan, adOpenKeyset, adLockReadOnly

şeklinde olan satır ile access sütunlarında Metinsel ifade olan sütunları doğru sorgulayabiliyorum ve listboxa bu verileri alıyorum.

Ancak bu kodun benzerini Metin değil de Sayı ifadeleri için kullanmaya çalıştığımda hata ile karşılaşmaktayım sürekli. Daha doğrusu sayısal ifadelerin sorgulanabilmesi için kodu uyarlayamadım.

Sayı sütunları için aşağıdaki kod nasıl olmalıdır?

ks.Open "select * from [deneme] where Vergi_No Like '" & TextBox22.Text & "%" & "'", baglan, adOpenKeyset, adLockReadOnly

Tek tırnakları kaldırmam yeterli olur diye düşündüm ama böyle olmadı.


Kod:
Private Sub Unvan_Ara_Axxess()
ListBox1.ColumnCount = 5
ListBox1.ColumnWidths = "0;60;0;60;0"


    Dim baglan As New ADODB.Connection, ks As New ADODB.Recordset
    yol = ThisWorkbook.Path & "\"
    dosya = "Proje.accdb"
    Set baglan = New ADODB.Connection
    Set ks = New ADODB.Recordset
    baglan.Open "provider=microsoft.ace.oledb.12.0;data source=" & yol & dosya & ";"
    ' NOT>>> metinsel ifadelerde tek tırnak kullanılıyor, sayısal ifadelerde tek tırnağa gerek yok ve % yüzde işareti * gibi kullanılmakta
    ks.Open "select * from [deneme] where Unvan Like '" & TextBox21.Text & "%" & "'", baglan, adOpenKeyset, adLockReadOnly
    ListBox1.Clear
    
    If ks.RecordCount > 0 Then
        ks.MoveFirst
        For i = 1 To ks.RecordCount
            
            ListBox1.AddItem ks(0).Value
            ListBox1.List(i - 1, 1) = ks(1).Value
            ListBox1.List(i - 1, 2) = ks(2).Value
            ListBox1.List(i - 1, 3) = ks(3).Value


            ks.MoveNext
        Next i
    End If
    TextBox23 = ks.Fields.Count
    TextBox24 = ks.RecordCount
    
    ks.Close: baglan.Close
    Set ks = Nothing: Set baglan = Nothing
End Sub
 
Üst