• 26-11-2012, 10:04:26
    #1
    Arkadaşlar Merhaba
    üye silinirken üyeye ait veritabanında birden fazla tablodan verileri silmeyi yapamadım, kodlamada aşağıdaki gibi, bu konuda yardım edebilirmisiniz, Teşekkürler.

    <%
    Set uyem=db.Execute("SELECT * FROM uye WHERE id="& id)
    Set prod=db.Execute("SELECT * FROM ilan WHERE kmn='"& uyem("id") &"'")
    Do While Not prod.Eof
    For i=1 To 10
    If Not prod("resim"&i)="" Then
    Set rssil = CreateObject("Scripting.FileSystemObject")
    rssil.DeleteFile Server.MapPath("../image/" & prod("resim"&i))
    End If
    Next

    Set vtr=db.Execute("SELECT * FROM vitrin")
    Do While Not vtr.Eof
    If Not vtr("ilan_no")=id Then
    db.Execute("DELETE * FROM vitrin WHERE ilan_no="& prod("id"))
    End If
    vtr.MoveNext : Loop
    db.Execute("DELETE * FROM ilan WHERE id="& prod("id"))
    prod.MoveNext:Loop
    db.Execute("DELETE FROM uye WHERE id="& id)
    %><script>
    alert('Üye ve bu üyenin Tüm ilanları başarılı Bir şekilde sistemden silinmiştir...!!');
    window.open('index.asp?page=uye','_self');</script>
  • 26-11-2012, 11:24:12
    #2
    Üyeliği durduruldu
    bunun için trigger yazılması daha sağlıklı olur ama ben sana sorgu ile ağaç yapısını silme olayını basitçe anlatayım, işi öğrendikten sonra trigger yazmayı öğrenmelisin:

    şimdi mesela uyeler tablomuz olsun, bu kişinin ilanları da ilanlar tablosunda tutulsun. ilanlar tablosunda da uye_id hücremiz olsun ki ilişkiyi sağlayabilelim. hatta bir tablo daha koyalım, atıyorum mesela mesajlar diye tablo olsun. bunda da uye_id hücresi olsun ilişki sağlansın.

    sonuç şu:

    - uyeler
    > id
    > kullanici_adi
    > sifre

    - ilanlar
    > id
    > uye_id
    > ilan_baslik

    - mesajlar
    > id
    > uye_id
    > baslik
    > icerik

    şimdi biz uyeler tablosundan 1 üye silinince bağlı olduğu diğer tablolardaki kayıtları da silelim. mesela id'si 1 olan üyeyi silelim.

    sorgumuz:
    Alıntı
    SELECT * FROM uyeler u
    LEFT JOIN ilanlar i ON i.uye_id = u.id
    LEFT JOIN mesajlar m ON m.uye_id = u.id
    WHERE u.id = 1
    burda dikkat edersen kalın yaptığım yerlerde ilişkiyi uyguladım. bu sorgu çalışınca 1 id'li uyenin kendisi, ilanları ve mesajları bütün halinde listelenir.

    silmek için SELECT * yerine DELETE u.*, i.*, m.* yazmak yeterli olur.

    sonuç:
    Alıntı
    DELETE u.*, i.*, m.* FROM uyeler u
    LEFT JOIN ilanlar i ON i.uye_id = u.id
    LEFT JOIN mesajlar m ON m.uye_id = u.id
    WHERE u.id = 1
    NOT: bu işlemi daha da kısa hale getirebilirsin. sonraki aşama olarak trigger öğren demiştim. triggeri öğrenirken foreign key metodunu da öğreneceksin.
    tablolar arasında ben sorgu ile ilişki kurdum, bunu foreign key ile kısaltabiliyoruz. arkaplanda tabloları bağlıyor, biz sadece DELETE FROM uyeler WHERE id=1 sorgusunu çalıştırıyoruz, o otomatik olarak ilişkili olduğu yerlerden de kayıtları siliyor.

    döngü içinde döngü yazarak fuzuli kod yazmış oluyorsun, bu şekilde tek sorgu ile istediğini yapabilmiş olacaksın. anlayamadığın yer olursa sor.
  • 26-11-2012, 12:47:25
    #3
    Üyeliği durduruldu
    örnek vererek anlatıyım kardeşim veritabanımızda 2tane tablo olsun biri üyeler diğeri konular
    üyelerde idsi 5 nolu admin olsun
    konular tablosunda bir verimiz olsun örnek
    üyeid=5
    konubaslik=deneme
    konuicerik=fdsf
    gibi
    sileceğin üyenin idsini formdan çektiğini varsayalım ve şöyle bir kod yazalım
    <%
    id = request.form("uyeid")
    set uyesil = baglanti.execute("delete from uyeler where id='&id&'")
    set uyeyeaitkonusil = baglanti.execute("delete from konular where uyeid='"&id&"'")
    %>
    şeklinde mantığı anladıysan sorun kalmaz
  • 26-11-2012, 14:26:22
    #4
    Üyeliği durduruldu
    mhmtbnl adlı üyeden alıntı: mesajı görüntüle
    örnek vererek anlatıyım kardeşim veritabanımızda 2tane tablo olsun biri üyeler diğeri konular
    üyelerde idsi 5 nolu admin olsun
    konular tablosunda bir verimiz olsun örnek
    üyeid=5
    konubaslik=deneme
    konuicerik=fdsf
    gibi
    sileceğin üyenin idsini formdan çektiğini varsayalım ve şöyle bir kod yazalım
    <%
    id = request.form("uyeid")
    set uyesil = baglanti.execute("delete from uyeler where id='&id&'")
    set uyeyeaitkonusil = baglanti.execute("delete from konular where uyeid='"&id&"'")
    %>
    şeklinde mantığı anladıysan sorun kalmaz
    benim yazdığımı okumadan üstünü çizdin yani
  • 26-11-2012, 15:51:32
    #5
    Arkadaşlar hepinize yardımlarınız için çok teşekkür ederim, sorunumu hallettim.
    Sorun olarak ( DELETE * FROM ) içindeki yıldız işaretini kaldırmam gerekiyor,
    Teşekkürler.
  • 26-11-2012, 16:19:05
    #6
    Üyeliği durduruldu
    yanlız döngü içinde dosya silme işlemi yapmışsın, dosya yoksa yerinde hata verecek ve kod devam etmeyecek, dosyanın varolup olmadığını da kontrol et
  • 26-11-2012, 16:28:28
    #7
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Muhtemelen üyenin kayıt ettiği ilanları silmek istiyorsunuz. Bunun için ilanı ekleyen üyenin id değerini silerseniz o rakama eş değer tüm içerikler otomatik silinecektir.
  • 26-11-2012, 21:47:41
    #8
    ShekerChi hocam örnek verebilirmisin?
    Teşekkürler
  • 26-11-2012, 21:59:01
    #9
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Birincisi transaction kullan, eğer sorgunun yarısında birşey olur patlarsa iyi olmaz.
    Mesela üyeleri sildin diyelim, üyeye ait ilanları silerken hata oldu, hop ilanlar boşa düşer, ama transaction kullanırsan rollback yapar ve silme işlemini iptal eder baştan başlarsın.

    İkincisi trigger kullan.
    Üçüncüsü ve en önemlisi foreign key'leri kullan.