none
Değişen tablo yapısı nasıl yapılabilinir? RRS feed

  • Soru

  • Halihazırda kullanılan bir programda(tekil kullanıcı) tutulan verilere kullanıcı istediğinde yeni veri eklemek istiyor. (Yeni sütun, database'de değişiklik)

    Export(xls, birde kendi db uzantım) özellikleri var bunların bozulmasını istenmiyor, bir önceki versiyondan çıkan bir sonraki versiyona girebilmeli. Tabi bir sonrakinden çıkan bir öncekine girmek zorunda değil. Bu olamaz dedim ben. 

    Ben LiteDB kullanıyorum çok da elverişli olduğunu söyleyemem. Yani şu ana kadar her şey güzeldi. 

    Yeni eklenenler için tip olarak dizi oluşturuyorum ama Excel'e çıkarken ve Excel'den girerken problem oluyor. Excel çok önemli programı kullanamayan kişilerden Excel üzerinden alınıyor veriler. Ve kod o kadar uzuyor ki akıl mantık alacak düzeyde değil. 

    Program üzerinden alınmış boş Excel taslağı üzerine dolduruluyor o konuda bir problem yok, istenilen alanlar boş bırakılıyor.

    Görüntüleme kısmı ile alakalı bir sorun yok onuda yapabiliyorum.

    Sadece anlattığım olayla alakalı hazır başka bir yapı varsa ya da başka bir şekilde bir öneri kabul edebilirim. 

    24 Şubat 2016 Çarşamba 10:59

Yanıtlar

  • Elimde hazir bir ornek yok ne yazik ki.

    C# statik bir dil, onun icin ne zaman boyle MongoDb benzeri islerle calissam ben de zorlaniyorum. BsonDocument en kolayima gelen. MongoDb olsaydi, [BsonExtraElements] attribute vardi (gerci o zamanda satir basina dolasman gerekecek, senin orijinale benziyor). 

    LiteDb'nin driveri ile calismadim, herhalde MongoDb gibi .Names vardir:

    var result = db.GetCollection("collection");
    var fieldNames = result.SelectMany(r => r.Names).Distinct();
    
    
     

    Kolonlari olusturur. Sonrasinda her satiri dolasip degerleri doldurmak mumkun (TryGetValue() var Mongoda). Ya da tum alanlarin oldugu bir dokuman yaratip ( Json text olarak ), Merge() etsen hepsinde tum fieldler olmus olur. Ne bileyim oyle aklima geleni soyluyorum iste:)


    24 Şubat 2016 Çarşamba 18:35
    Yanıtlayıcı

Tüm Yanıtlar

  • NO SQL, Document type. Yalnız tabo yok tabi. 

    Sizin dediğiniz gibi bir şey klasik tablo yapısı ile de yapılabilir ama programlama tarafı biraz karışır.


    • Düzenleyen Halil TAŞ 24 Şubat 2016 Çarşamba 11:04
    24 Şubat 2016 Çarşamba 11:02
  • Ben zaten NoSql kullanıyorum bak yukarıda LiteDB yazıyor, Document Type dan kastını biraz açarsan çünkü benim bildiğim http de gidip gelen dosyanın tipini değiştirmekten başka bir şey ifade etmiyor.

    24 Şubat 2016 Çarşamba 11:05
  • NoSQl database'in tipleri var. (Kusura bakmayın LiteDB nin noSQL olduğunu bilmiyordum) 

    Document tipte olanlar genelde Json formatını destekliyorlar. LiteDB'de baktım şimdi document tip.

    Yeni alanlar için 2 değişkenden oluşan bir class oluşturup bunu asıl clasınızda bir alan olarak tanımlasınız istediğiniz kadar kaydı asıl kayıda baplarsanız. Bu şekilde olmaz mı? Ya da ben yanlış mı anlıyorum sorunuzu.

    24 Şubat 2016 Çarşamba 11:19
  • version isini gormuyor mu? Soruyu tam anlayamadim acikcasi.
    24 Şubat 2016 Çarşamba 12:02
    Yanıtlayıcı
  • Kullanıcı sütunlarda değişiklik yapmak istiyor, elbette büyük bölümü sabit kalıyor, silinme çok nadir oluyor, olsa da direk gizleme yapıyorum, ama değişiklik gerekiyor, gün geçtikçe değişik veriler girilmeye başlanıyor. 

    Sonuç olarak bir çok tablolar ilişkiler var ama bazılarında değişiklik yapmam gerekiyor neredeyse ayda 2 kez gibi. Ve çok veri var hepsini yeni tabloya geçirmek gerekiyor. Bu işleri ben değil kullanıcının yapabileceği bir sistem tasarlamayı düşünüyorum.

    Aslında programda yaptım, malum tabloya iki sütun ekledim veriler ve veri isimleri diye program oldukça güzel çalışıyor ama excel'e çıkmıyor işte artık, çıksa da geri girmiyor. Kendim parse etmek zorunda kalıyorum. Ve neyin nereye gideceğine karar vermek ise çok zor oluyor, ya bütün sütunları doldurup verilmesi gerek ya da ID'ler kullanılması yoksa nasıl eşleştirme yapabilirim. 

    Excel'e çıkış ve girişte problem yaşamayacağım, (yani satece satır sütuna dönüştürebileceğim, bir hücrede sadece bir veri olarak) bir veri tabanı, yapı ya da adına ne deniyorsa ondan tasarlamam gerekiyor. 


    ben buna benzer bir sistem kullanıyorum ama olmuyor işte kullanıcı bunların her birini ayrı hücrede girmek istiyor. Tabi her veri her kişide yok, sütun excel'de yoksa oradan gelen tüm verilerde varsayılan değer ya da yoksa null olacak. Aslında bunları yapıyorum ama işte problem ben excel'e listedeki verileri eşleştirip alt alta nasıl basarım, aslında onun kodunu yazarım ama iş epey uzuyor, bunun genel geçer bir sistemi yok mudur ? Sormak istediğim soru o. Epey uzun kod yazacağız eğer kolay bir yolu varsa onu yapayım.

    24 Şubat 2016 Çarşamba 12:58
  •  public class SerbestVeri
        {
            public string VeriAd { get; set; }
            public string Veri { get; set; }
        }

        public class ExcelKayit
        {
            public int Id { get; set; }
            public string Ad { get; set; }
            public string Soyad { get; set; }

    public string telefon{get;set;}

            public List<SerbestVeri> serbestveri { get; set; }
        }

    Biçiminde yapsanız. Kullanıcı istediği kolonu isimlendirip istediği veriyi yazsın. Excel'de satır satır okuyup belli kolondan sonrakileri her satir için serbestveri'ye atacaksınız. Yazma işi kolay. Asıl zor kısmı okuma. Okuduğunuzda o kolon var mı diye kontrol edilecek yoksa kolon başlığı atılıp iligili satıra verisi yazılacak.

    Yani benim aklıma şimdilik başka bir şey gelmiyor.

    24 Şubat 2016 Çarşamba 13:22
  • Tabi tip kullanmak biraz daha kolaylaştıracaktır ama genel manada yazdığınız şey benim istediğim tarafla alakalı değil ben excel'e çıkar dediğimde sizinkinin yanında Proje.Adi.SerbestVeri yazacak benimkinde ise virgüller ile ayırıyor. Hadi onu ToString ile çözelim diğer taraf ne olacak okurken from string olacak. sonradan eklenen sütunlar bir biri ile alakalı değil, filtrelemek ve diğer işlemler çok zor.

    Ya Json filan olsa mantıklı ama excel bozuyor işi çok fazla kod değişikliği gerekiyor. Ben de diyorum daha kolay bir yöntemi varsa direk onu yazarak başlayayım. Yapıyı komple değiştirmeye razıyım. 


    24 Şubat 2016 Çarşamba 13:41
  • İyi de bu Json zaten. Bu şekilde kaydetmeyeceksinizki. Bunu serialize edeceksiniz Json documentine çevirip kaydedeceksiniz. Okuduğunuzda da tam tersi.
    24 Şubat 2016 Çarşamba 13:47
  • Tamam efendim haklısınız da ben onun haricinde bir şey arıyorum, yoksa zaten bunu yapacağım  soruda bile yazıyor bu. Database zaten listeyi kaydediyor, o verilerde string değil byte[]. tamam liste olsun ama ben bunu sormadım bilmiyorum öyle bir şey var mıdır ama hani olur ya ET'nin içinde şöyle bir özellik var buradan config dosyasıyla tipi değiştirince otomatik tabloyu güncelleştiriyor gibi şeyler bekliyorum. Aradığım şey kesinlikle list değil. Bilmediğim bir şeyi arıyorum.  

    array değil list kullanın dediniz teşekkür ederim güzel bir tavsiye ama bahsettiğim zorlukların önüne geçmiyor. Ben otomatik olan bir kısmı varsa onu düşünüyorum.

    Listin içerisindeki bir veri(olup olmadığını bile bilmediğim)'ye göre nasıl filtre yapacağım. Bunu excel'de aynı sütuna nasıl yazacağım ?

    24 Şubat 2016 Çarşamba 14:07
  • Kullanici hakli gibi geldi. O sekilde yapacagina her biri ayri hucre olsa bence daha iyi:

    adres, il, ilce, mahalle ... 

    diye basliklar olur. LiteDb, MongoDb gibi olduguna gore, bu basliklari basitce yeni bir BsonDocument() olarak eklersin, oyle degil mi?

    Belki ben fazla basit dusunuyorum ama, LiteDb -> Excel oldugunda collection'in icerisinden ilk seviyedeki isimler basliklari olusturuyor. Hepsinde data olmasi da gerekmiyor.

    Excel -> LiteDb oldugunda ise daha da kolay, ilk satirin key'leri olusturdugu bir dictionary (LiteDb key-value dictionary tutuyor).

    24 Şubat 2016 Çarşamba 15:55
    Yanıtlayıcı
  • Evet hocam şu an doğru yönden yaklaştık, bende tam bunu soruyorum, şimdi ben tamamını bir Class üzerinden yapmaya çalışıyorum ama olmuyor class'daki id il bsondocument bağlantısını da işin aslı kuramadım. tamamını BsonDocument yapsam nasıl olur bu sefer gerekli alanın nasıl doldurulmasına zorlayabilirim. Excel'den bile gelirken eğer ilişki kuramadığım zaman hepsini tek tek kullanıcıya soruyorum o seçiyor ilgili seçenekleri. 

    Bir de bu verilerin bir çoğu ortak yani aslında db tarafında direk olarak veri değil id kullanılıyor, amaç ciddi bir loglama ve istenildiğinde filtrelenmiş olarak excel üzerinden verme. Ama loglar farklı yerlerden Excel üzerinden geliyor doğal olarak farklı verilerde var. Direk programa giren yerlerde var. Ben benim veritabanımda bu sütun varsa oraya yoksa yeni sütun oluşturup oraya eklenmeli, ben bununla alakalı çalışıyorum şu anda. Birde filtre mevzusu var. 

    Bu iki olayla alakalı bir örnek verebilmeniz mümkün mü acaba ?

    24 Şubat 2016 Çarşamba 16:22
  • Elimde hazir bir ornek yok ne yazik ki.

    C# statik bir dil, onun icin ne zaman boyle MongoDb benzeri islerle calissam ben de zorlaniyorum. BsonDocument en kolayima gelen. MongoDb olsaydi, [BsonExtraElements] attribute vardi (gerci o zamanda satir basina dolasman gerekecek, senin orijinale benziyor). 

    LiteDb'nin driveri ile calismadim, herhalde MongoDb gibi .Names vardir:

    var result = db.GetCollection("collection");
    var fieldNames = result.SelectMany(r => r.Names).Distinct();
    
    
     

    Kolonlari olusturur. Sonrasinda her satiri dolasip degerleri doldurmak mumkun (TryGetValue() var Mongoda). Ya da tum alanlarin oldugu bir dokuman yaratip ( Json text olarak ), Merge() etsen hepsinde tum fieldler olmus olur. Ne bileyim oyle aklima geleni soyluyorum iste:)


    24 Şubat 2016 Çarşamba 18:35
    Yanıtlayıcı