Listviewde seçilen satıra ait verinin tamamen silinmesi

Katılım
15 Ocak 2011
Mesajlar
64
Excel Vers. ve Dili
2011 türkçe
Merhaba arkadaşlar,

Listviewde seçili olan satırı bir commanbutton yardımı ile veritabanından komple silmek istiyorum. Bununla ilgili forumda arama yaptım ama sadece listviewden silme kodunu bulabildim. Ben ise tamamen veritabanından silmek istiyorum. Yardımlarınızı bekliyorum.

Herkese hayırlı günler ve iyi çalışmalar diliyorum.
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,891
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
. . .

Silinmesini istediğiniz Listviewdeki seçili satırda belirleyici özellikteki bir veriyi (ürün kodu veya ürün ismi olabilir) sayfada aratıp, satırıda sildirmeniz gerekiyor.

Veya Listview' e veri alırken, veri isimleriyle beraber satır no bilgisinide alın. Silme işleminde şu şatır numarasını sil komutu verirsiniz.

. . .
 
Katılım
15 Ocak 2011
Mesajlar
64
Excel Vers. ve Dili
2011 türkçe
İşte bu dediklerinizi maalesef koda dökemedim.

Aşağıdaki kodu başka bir konudan buldum ama bende hatalar verdi.

Kod:
Private Sub sil_Click()
y = ListView1.SelectedItem.Index
x = ListView1.ListItems(y).ListSubItems(x).Text
cevap = MsgBox("Silmek istediğinizden emin misiniz?", vbYesNo, "Onay")
If cevap = vbYes Then
    Set Sh = Sheets("Veritabani")
    Sh.Rows(x).Delete
    Set Sh = Nothing
Call UserForm_Initialize
End If
End Sub
Bu şekilde "x = ListView1.ListItems(y).ListSubItems(x).Text" satırını sarıya boyayarak "Element not found" uyarısını verdi. :???:
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,891
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
. . .

Y değerini sayfa üzerinde aratıp, hangi satırda olduğunu tespit etmeniz gerekiyor.
Ondan sonra bu satır numarasını X' e atarsanız kodlar çalışır.

Örnek dosya yüklerseniz daha net çözümler üretilebilir.

. . .
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,891
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
Sanırım dosya ekleme yetkim yok Hüseyin Bey. :dusun:
. . .
Değerli Üyemiz,
Forumda DOSYA EKLEME ile DOSYA İNDİRME işlemleri için ve yayınlanan Video Dersleri izleyebilmek için ALTIN ÜYELİK gerekmektedir.
ALTIN ÜYELİK fiyatlar ;
1 Yıl = 15 TL KDV Dahil
2 Yıl = 25 TL KDV Dahil
5 Yıl = 50 TL KDV Dahil (Video Eğitim DVD Hediye)
Devamını okumak için linki tıklayın....
Not: Ancak yönetim, üyelere Altın Üyeliği zorunlu tutmuyor. Dosya paylaşım sitelerine, çalışmanızı yükleyip. Burada link paylaşabilirsiniz.
Forumdan Videolu Dersler gibi tüm hizmetlerinden yararlanmak için Altın Üyelik gerekli.


. . .
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,891
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
. . .

Tablodaki verilere TC no girdikten sonra Userformdaki kodları silip, şu kodları yapıştırın.

TC noya göre arama yapar ve o satırı siler.

Silme işlemini deneyin, duruma göre silmeden önce son kez sorma işlemlerini ilave ederiz.

Kod:
Private con As Object, rs As Object

Private Sub cikar_Click()
    tc = cliste.SelectedItem.SubItems(3)
    Set ara = Sheets("Veritabanim").Range("C:C").Find(tc, , xlValues, xlWhole)
    Sheets("Veritabanim").Rows(ara.Row).Delete
    Call UserForm_Initialize
End Sub



Private Sub UserForm_Initialize()
    Application.ScreenUpdating = False
    
    Set con = CreateObject("adodb.connection")
    con.Open "provider=microsoft.jet.oledb.4.0;data source=" & ThisWorkbook.FullName & _
    ";extended properties=""excel 8.0;hdr=yes"""
    
    With cliste
        .View = lvwReport  'ListView de buna dikkat etmeliyiz, Eğer ListWiev de burayı lvwReport olarak ayarlamazsak diğer yapılan işlemler listemizde gözükmeyecektir.
        .ColumnHeaders.Add , , "Dosya No", 45
        .ColumnHeaders.Add , , "Adı Soyadı", 70
        .ColumnHeaders.Add , , "Doğum Tarihi", 60
        .ColumnHeaders.Add , , "TC Kimlik", 1
        .FullRowSelect = True 'liste elemanını seçtiğinizde tüm satır seçili olur.
        .Gridlines = True 'Listeyi çizgili yapar.
        
    End With
    
    Sheets("Veritabanim").Select
    sondosya = Range("M1")
    
    Me.cliste.ListItems.Clear
    Set rs = con.Execute("select [Dosya No],[Ad Soyad],[Doğum Tarihi],[TC Kimlik] from [Veritabanim$] where [Dosya No]='" & Me.sondosya.Text & "' ")
    Do While Not rs.EOF
        Me.cliste.ListItems.Add , , rs("Dosya No")
        Me.cliste.ListItems(Me.cliste.ListItems.Count).ListSubItems.Add , , rs("Ad Soyad")
        Me.cliste.ListItems(Me.cliste.ListItems.Count).ListSubItems.Add , , rs("Doğum Tarihi")
        Me.cliste.ListItems(Me.cliste.ListItems.Count).ListSubItems.Add , , rs("TC Kimlik")
        rs.movenext
    Loop
    
End Sub
. . .
 
Son düzenleme:
Katılım
15 Ocak 2011
Mesajlar
64
Excel Vers. ve Dili
2011 türkçe
Yalnız kayıt işlemleri sırasında TC Kimlik numarası kaydedilmeyen kişilerde olabileceğinden bu kodla tüm TC Kimliği girilmeyen satırları sileriz değil mi?

TC Kimlik dışında bir kriter belirleyemez miyiz?
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,891
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
. . .

Silme işlemlerinde bir koşul gerekli. Bu koşulda diğer verilerden ayırt edici bir özellikte olmalı.
O zaman A sütununu Sıra No olarak düzenleyip, bu veriye göre silme işlemi yaptıralım.
Silme işleminin doğru çalışması için her kayıta benzersiz sıra no vermeniz gerekir.

. . .
 
Katılım
15 Ocak 2011
Mesajlar
64
Excel Vers. ve Dili
2011 türkçe
Kod:
Sheets("Veritabanim").Rows(ara.Row).Delete
satırını sarıya boyayarak "Object variable or with block variable not set" hatasını verdi.
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,891
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
. . .

Gözünüzden kaçırdığınız bir kısım vardır, hata aldığınız tabloyu eklerseniz.
Hata yaptığınız kısmı tespit edebiliriz.

. . .
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,891
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
. . .

Verdiğim kodların çalışması için TC no girilmesi gerekiyor.

Sıra Noya göre çalışması için kodları revize etmemiz gerekiyor.
Eklediğiniz resime göre kodları revize edeceğim.

. . .
 
Katılım
15 Ocak 2011
Mesajlar
64
Excel Vers. ve Dili
2011 türkçe
Kod:
Private Sub cikar_Click()
sira = cliste.SelectedItem.SubItems(1)
    Set ara = Sheets("Veritabanim").Range("A:A").Find(sira, , xlValues, xlWhole)
    Sheets("Veritabanim").Rows(ara.Row).Delete
    Call UserForm_Initialize
End Sub
Kod:
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False

Set con = CreateObject("adodb.connection")
con.Open "provider=microsoft.jet.oledb.4.0;data source=" & ThisWorkbook.FullName & _
";extended properties=""excel 8.0;hdr=yes"""

With cliste
        .View = lvwReport  'ListView de buna dikkat etmeliyiz, Eğer ListWiev de burayı lvwReport olarak ayarlamazsak diğer yapılan işlemler listemizde gözükmeyecektir.
         .ColumnHeaders.Add , , "Dosya No", 45
         .ColumnHeaders.Add , , "Adı Soyadı", 70
         .ColumnHeaders.Add , , "Doğum Tarihi", 60
         .ColumnHeaders.Add , , "", 1
       .FullRowSelect = True 'liste elemanını seçtiğinizde tüm satır seçili olur.
       .Gridlines = True 'Listeyi çizgili yapar.
    
End With

Sheets("Veritabanim").Select
    sondosya = Range("M1")
    
    Me.cliste.ListItems.Clear
Set rs = con.Execute("select [Dosya No],[Ad Soyad],[Doğum Tarihi],[Sıra No] from [Veritabanim$] where [Dosya No]='" & Me.sondosya.Text & "' ")
Do While Not rs.EOF
Me.cliste.ListItems.Add , , rs("Dosya No")
Me.cliste.ListItems(Me.cliste.ListItems.Count).ListSubItems.Add , , rs("Ad Soyad")
Me.cliste.ListItems(Me.cliste.ListItems.Count).ListSubItems.Add , , rs("Doğum Tarihi")
Me.cliste.ListItems(Me.cliste.ListItems.Count).ListSubItems.Add , , rs("Sıra No")
rs.movenext
Loop
    
End Sub

şeklinde revize etmiştim ama yanlış mı yapmışım?
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,891
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
. . .

Şu kodları deneyin.

Kod:
Private con As Object, rs As Object

Private Sub cikar_Click()
    Sno = cliste.SelectedItem.SubItems(3)
    
    sor = MsgBox(cliste.SelectedItem.SubItems(1) & " Kaydını Silmek İstiyor Musunuz", vbYesNo)
    If sor = vbNo Then Exit Sub
    
    If WorksheetFunction.CountIf(Sheets("Veritabanim").Range("A:A"), Sno) > 1 Then
    MsgBox "Mükerrer Sıra No Var" & Chr(10) & _
    "Silme İşlemi İptal Edildi", vbCritical
    Exit Sub
    End If
    
    Set ara = Sheets("Veritabanim").Range("A:A").Find(Sno, , xlValues, xlWhole)
    Sheets("Veritabanim").Rows(ara.Row).Delete
    Call UserForm_Initialize
    
End Sub

Private Sub UserForm_Initialize()
    Application.ScreenUpdating = False
    
    Set con = CreateObject("adodb.connection")
    con.Open "provider=microsoft.jet.oledb.4.0;data source=" & ThisWorkbook.FullName & _
    ";extended properties=""excel 8.0;hdr=yes"""
    
    With cliste
        .View = lvwReport  'ListView de buna dikkat etmeliyiz, Eğer ListWiev de burayı lvwReport olarak ayarlamazsak diğer yapılan işlemler listemizde gözükmeyecektir.
        .ColumnHeaders.Add , , "Dosya No", 45
        .ColumnHeaders.Add , , "Adı Soyadı", 70
        .ColumnHeaders.Add , , "Doğum Tarihi", 60
        .ColumnHeaders.Add , , "Sıra No", 0
        .FullRowSelect = True 'liste elemanını seçtiğinizde tüm satır seçili olur.
        .Gridlines = True 'Listeyi çizgili yapar.
        
    End With
    
    Sheets("Veritabanim").Select
    sondosya = Range("M1")
    
    Me.cliste.ListItems.Clear
    Set rs = con.Execute("select [Dosya No],[Ad Soyad],[Doğum Tarihi],[Sıra No] from [Veritabanim$] where [Dosya No]='" & Me.sondosya.Text & "' ")
    Do While Not rs.EOF
        Me.cliste.ListItems.Add , , rs("Dosya No")
        Me.cliste.ListItems(Me.cliste.ListItems.Count).ListSubItems.Add , , rs("Ad Soyad")
        Me.cliste.ListItems(Me.cliste.ListItems.Count).ListSubItems.Add , , rs("Doğum Tarihi")
        Me.cliste.ListItems(Me.cliste.ListItems.Count).ListSubItems.Add , , rs("Sıra No")
        rs.movenext
    Loop
    Application.ScreenUpdating = True
End Sub
. . .
 

Ekli dosyalar

Katılım
15 Ocak 2011
Mesajlar
64
Excel Vers. ve Dili
2011 türkçe
Hüseyin Bey, çok teşekkür ederim. Sayenizde tamda istediğim gibi oldu sonunda.:mutlu::mutlu::eek:k:::eek:k::
 
Katılım
15 Ocak 2011
Mesajlar
64
Excel Vers. ve Dili
2011 türkçe
Üst üste yazmış olacağım ama konuyla ilgili birşey sormak istiyorum.

Kod:
Me.cliste.ListItems(Me.cliste.ListItems.Count).ListSubItems.Add , , rs("Doğum Tarihi")
        rs.movenext
kodu işlerken boş olan hücrede hata veriyor. hücre doluysa sıkıntı yok. Bunu aşabilmemiz mümkün mü acaba?
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,891
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
Üst üste yazmış olacağım ama konuyla ilgili birşey sormak istiyorum.

Kod:
Me.cliste.ListItems(Me.cliste.ListItems.Count).ListSubItems.Add , , rs("Doğum Tarihi")
        rs.movenext
kodu işlerken boş olan hücrede hata veriyor. hücre doluysa sıkıntı yok. Bunu aşabilmemiz mümkün mü acaba?
. . .

Veri alma yönteminiz ADO olduğu için null değer olmaması gerekiyor. ADO' da bu sorun nasıl aşılır bilmiyorum.

Çözüm bulamazsanız. Veri alma yönetimi değiştirebiliriz. Ortalama verileriniz kaç satır oluyor.

. . .
 
Üst