Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Tekrar eden kayıtları ayıklama

Konu, 'Veritabanları' kısmında walder tarafından paylaşıldı.

  1. walder

    walder Üye

    Kayıt:
    22 Ocak 2003
    Mesajlar:
    66
    Beğenilen Mesajlar:
    0
    Selamlar. Access in yaptığı bir hata sonucunda veritabamında tekrar eden kayıtlar oluştu. Ama öyle böyle değil toplamda 30.000 üzerinde kayıt var 400 mb civarı veri tabanı boyutu. Ancak gerçekte 15.000 civarı kayıt olması gerekiyor. Benim ilk düşüncem sql ile tekrar etmeyen kayıtları almak oldu ama bunu yapamadım çünkü kayıt saısının fazlalığı sebebiyle hata verdi. Sonra asp ile yapayım dedim getrows denedim ama o da yemedi. O da hata verdi veri çok büyük gibi bir hata idi.
    Şimdi bu konuda sizlerden öneri bekliyorum. Asp,VB kullanabilirim bu iş için. Yada olursa makro vba falan da olabilir.
    Mantığı konusunda biraz fikir yürütsek yeterli olur ama unutmamak gereken kayıt sayısının ve kayıt niteliğinin fazla olması(her kayıt 10 alan ve alanların biri 50 kb civarı veri içeriyor)
    Teşekkürler sevgiler
     
  2. mustafa

    mustafa Daimi Üye

    Kayıt:
    17 Ocak 2003
    Mesajlar:
    962
    Beğenilen Mesajlar:
    0
    Meslek:
    web programlama
    Şehir:
    istanbul
    ahh ah, access'e veritabanı muâmelesi yapınca garibim bu hallere düşüyor işte.
     
  3. acemi

    acemi Misafir

    * Oncelikle .mdb dosyasinin bir yedegini al.

    * .mdb dosyayi MS Access ile ac.

    * Tables (tablolar) bolumune gec. (Genelde, mdb dosya ilk acildiginda zaten bu bolumde olursun)

    * Ilgili tabloya mouse sag tus ile tikla. Acilan pencereden Copy'e tikla.

    * Bos alana mouse sag tu ile tikla ve acilan pencereden Paste'a tikla.

    * Paste Table As penceresi acilinca Structure Only (sadece veri yapisi) secenegini secip Table Name bolumune YeniTablo yazdiktan sonra OK'e tikla. Soz konusu tablo ile ayni ozelliklere sahip ama icinde veriler olmayan bir tablo olusacak.

    * Olusan YeniTablo'ya mouse sag tus ile tiklayip acilan pencereden Design View'a tikla.

    * Tablodaki butun alanlarin Required (gerekli) ve Indexed (Indexli) seceneklerini No yap. Boylece veriler kopyalanirken bu islemler/kontroller yapilmayacak ve veriler daha hizli kopyalanacaktir.

    * Degisiklikleri kaydedip tabloyu kapat.

    * Queries (sorgular) bolumune gec.

    * Yeni bir query olusturmak icin New dugmesine tikla ve acilan pencereden Design View'u sectikten sonra OK'ye tikla.

    * Show Table penceresinden verilerin oldugu soz konusu tabloyu secip Add'e tikla. Tablo sorguya eklendikten sonra Close'a tiklayarak Show Table penceresini kapat.

    * Tablodaki butun alanlara sirasi ile cift tiklayarak, butun bu alanlari sorgu listesine ekle. Butun alanlari eklemek icin sakin * kullanma.

    * Arac cubugundaki Totals (Σ) ikonuna tikla. Sorguda Total satiri belirecek ve butun kolonlar icin bu satirda Group by yazacak.

    * Menuden Query (sorgu) -> Append Query (ekleme sorgusu) secenegine tikla.

    * Acilan Append penceresindeki Table Name bolumu icin YeniTablo adli tablomuzu sec ve OK'ye tikla.

    * Arac cubugundan Run (!) ikonuna tikla ve islem tamamlanana kadar bekle.

    * You are about to append xxxxx row(s) diye bir mesaj cikacak. OK'e tikla.

    * Sorguyu kapat ve Tables bolumune gec.

    * Eski tablonun adini degistir. Ornegin: IptalEdilenTablo (mouse sag tus -> Rename)

    * YeniTablo adli tablomuza, esas tablonun adini ver.

    * Olusan yeni tabloyu Design View modunda acip iptal edilen Required (gerekli) ve Indexed (Indexli) seceneklerini tekrar eski haline getir.
     
  4. walder

    walder Üye

    Kayıt:
    22 Ocak 2003
    Mesajlar:
    66
    Beğenilen Mesajlar:
    0
    Daha önce buraya cevap yazmıştım ama giderken hata olumş sanırım tekrar yazayım.
    aceminin dediği işlemle kısa sürede çok etkili bir şekilde sorunum çözüldü. Ancak merak ettiğim birşeyler var. Sorun çözüldü ama tam olarak nasıl oldu bilmiyorum. Bu işlemin ne yaptığı konusunda biraz bilgi ya da kaynak adresi almam mümkün mü?
    Bundan daha önemlisi de şu. Veri sayısı olması gerekende daha fazla düştü. Ya access fazla veri götürdü ya da daha önceden de tekrar eden kayıtlar vardı(kaza olmadan önce de)
    Burada tekrar eden kayıtlar nasıl ayıklanıyor? yani 9 field var diyelim 8 i birbirinin aynı ama birisi değil o zaman bu tekrar eden kayıt olarak mı algılanıyor? Eğer öyleyse halim yaman demektir. Yoksa alanlarım tümünün içeriklerine mi bakılıyor.
    Teşekkürler
     
  5. acemi

    acemi Misafir

    * Oncelikli mevcut tabloyla ayni ozelliklere sahip ama icinde veri olmayan bir tablo olusturduk.

    * Sonra sorgu (queries) bolumunde mevcut tablonun verilerini, tekrarlari goz ardi edecek sekilde listeleyen bir sorgu olusturduk. (GROUP BY bu ise yariyor)

    * Bu sorgu sayesinde listelenen tekrarsiz verileri, yeni tabloya aktardik.

    * Eski tabloyu iptal edip (adini degistirerek), yeni tabloyu onun yerine koyduk.

    * Index'leri ve required bolumleri gecici olarak iptal etmemizin sebebi, veri transfer islemini hizlandirmak icindi. Bunlari iptal etmeden de ayni is yapilabilirdi ama yeni tabloya eklenen her satir icin indeksleme islemi ve "gerekli mi kontrolu" yapilacakti ve verilerin transfer edilme suresi uzayacakti.

    * Beklediginden daha az kaydin kalmasinin sebebi, farkinda olmadigin tekrarlarin da olmasi olabilir. Bunlari aynen uyguladiysan, tekrarlar haric, eksilen kayit olmamistir. (tabii tekrarlarin bir kopyasi da yeni tabloya dahil edildi.)
     
  6. acemi

    acemi Misafir

    Hayir. 9 alanin 9'u da ayni ise tekrar eden kayit oluyor. Bir tanesi bile farkli ise tekrar eden kayit degildir.

    Tabii sorguyu hazirlarken, sorguda gostermedigin bir alan varsa, tekrarlara bakilirken o goz ardi edilir. Yalniz boyle bir durumda, yeni tabloda, o kolonda hicbir deger gozukmez veya default degeri varsa o gozukur.
     
  7. walder

    walder Üye

    Kayıt:
    22 Ocak 2003
    Mesajlar:
    66
    Beğenilen Mesajlar:
    0
    Evet şimdi anladım detaylı olarak. Daha önceden de tekrar eden kayıt olması oldukça muhtemeldi zaten.
    Bu işlem çok işime yaradı teşekkürü borç bilirim
     
  8. acemi

    acemi Misafir

    Borcunu sildim :)