Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Veritabanından ayın günlerine göre listeleme

Konu, 'C#' kısmında kd_sdat tarafından paylaşıldı.

Etiketler:
  1. kd_sdat

    kd_sdat Yeni Üye

    Kayıt:
    28 Eylül 2017
    Mesajlar:
    4
    Beğenilen Mesajlar:
    0
    Şehir:
    tekirdağ
    Merhaba , öncelikle şöyle bir tablom var benim id,adı , soyadı ve 1 den 31 ' e kadar rakamlarım var , yani toplamda 35 sütün var , yapmak istediğim şu , örneğin adı : Ahmet olan birinin 1.gününe görev vermek istiyorum , 2.gününe ayır bir görev falan...31 e kadar gidiyor..
    Yardımınızı istediğim sorum ise biz şuan eylül ayındayız ve eylül ayında 30 gün var ben burada 1 den 30 a kadar nasıl listelerim , ya da ekim ayında da 31 gün var bunun bir sorgusu var mı ? Şimdiden teşekkür ederim..
     
  2. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    898
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Sanırım her ayın kaç gün çektiği bilgisi gerekiyor size.
    DateTime aysonu = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1).AddDays(-1);

    sistem tarihine bir ay eklenmiş, önümüzdeki aya geçilmiş, bir gün çıkarılıp, içinde bulunulan ayın son günü alınmış.

    Eskiden 12 ayın çektiği günleri sabit dizide tutar, lazım olunca oradan alırdık.
    4 yılda bir 29 çeken şubat ayınıda hesaplardık.
    Şimdi hazır fonksiyonları kullanıyorlar.
     
    Son düzenleme: 28 Eylül 2017
    kd_sdat bunu beğendi.
  3. kd_sdat

    kd_sdat Yeni Üye

    Kayıt:
    28 Eylül 2017
    Mesajlar:
    4
    Beğenilen Mesajlar:
    0
    Şehir:
    tekirdağ
    Çok teşekkür ederim ilgilendiğiniz için ben bir ayın son günün çekebiliyorum . Benim ki biraz daha karmaşık , sizin önerdiğiniz daha basit , month calendar kullanarak "aysonu = Convert.ToInt32(DateTime.DaysInMonth(Convert.ToInt32(monthCalendar1.TodayDate.ToString("yyyy")), Convert.ToInt32(monthCalendar1.TodayDate.ToString("MM"))));" bu bana örneğin eylül ayının 30 gün çektiğini söylüyor

    Şimdi benim yapamadığım ise veri tabanından bilgileri çekemiyorum yani bugün aylardan eylül ve sen bana 30 günü tek göster bunu diyemiyorum .
     
  4. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    898
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Tablo yapısını ve almak istediğiniz örnek görüntüyü yapıştırısanız belki yardımcı olabiliriz.
    Kafa başka şeylerde olduğundan kavramakta zorluk çekiyorum.
     
  5. kd_sdat

    kd_sdat Yeni Üye

    Kayıt:
    28 Eylül 2017
    Mesajlar:
    4
    Beğenilen Mesajlar:
    0
    Şehir:
    tekirdağ
    Öncellikle kusura bakmayın sizi de yoruyorum farkındayım
    [​IMG] İSTEdsız.png
    İstediğim tam olarak böyle bişey , burada yaptığım id , ad ve soyad ı veri tabanından çekiyorum aylarda ki sütünları ise for döngüsü ile bu ayın sonuna kadar yazdırdım .
    Takıldığım yer benim bu ayın günlerini veri tabanına kaydetmem lazım ya da veri tabanından direkt günleri çekeyim .
    Umarım anlatabilmişimdir. Olmadı araştırmaya devam edeyim ,
     
  6. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    898
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Anladığım kadarı ile tabloda sadece ad soyad ID gibi bilgiler var, henüz günleri tabloda nasıl tutacağınıza karar vermemişsiniz.
    Select ettiğinizde de, günleri tek değil tüm ayı select edip tek satırda göstermeniz gerekiyor.

    Ben olsaydım tabloda nasıl tutardım.?

    Normalde bu işin standardı, kişinin ID si ile tarihi key olarak kullanarak, her gün için bir kayıt oluşturmak.

    Örnek:
    uyeID - key1 - id olarak üye numarası yada üye ismi tutuyor olabilirsin bilmiyorum. Ben uyeID diyeyim.
    Tarih(yıl-ay-gün) - key2
    Açıklama - bu güne ait diğer gerekli bir veya birden fazla alan.

    Tablo içinde nasıl görünür.
    100 - 2017.09.01 - Açıklama.... varsa diğer alanlar....
    100 - 2017.09.02 - Açıklama.... varsa diğer alanlar....
    100 - 2017.09.03 - Açıklama.... varsa diğer alanlar....
    ...
    101 - 2017.09.01 - Açıklama.... varsa diğer alanlar....
    101 - 2017.09.02 - Açıklama.... varsa diğer alanlar....
    101 - 2017.09.03 - Açıklama.... varsa diğer alanlar....
    ...

    Bu şekilde bilgi tutulur. Tüm ay tek satırda gösterileceği zaman iş biraz uğraştırır tabi. Tek gün gösterilse, ek iş olmadan direkt gösterirsin. Ama tek satırda tüm ay lazım, nasıl yapabiliriz.?

    Önce tüm ayı select etmek gerekiyor, bu sebeple tarih içindeki sadece yıl ve ay rakamlarını dikkate almalıyız.
    SELECT uyeID, tarih, Açıklama,... FROM tablo WHERE (CONVERT(VARCHAR(7), tarih, 120)) = '2017-06'
    buradaki 120 stil formatı.

    Altıncı aya ait tüm günleri select ettik.
    Bunları sayfa değişkenlerine yükleyeceğiz.
    Bir döngü kullanıp sayfa değişkenlerine atmamız gerekiyor. Aslında web için kullanacaksan asp.NET deki görüntüleme data araçlarında biraz uğraşıp tek seferdede gösterilebilir belki ama uğraşmaya değermi bilemiyorum. Götürüsü getirisinden fazla olabilir.

    Umarım istenileni doğru anlamışımdır.
     
    Son düzenleme: 28 Eylül 2017
    kd_sdat bunu beğendi.
  7. kd_sdat

    kd_sdat Yeni Üye

    Kayıt:
    28 Eylül 2017
    Mesajlar:
    4
    Beğenilen Mesajlar:
    0
    Şehir:
    tekirdağ
    Hocam tam istediğim şekilde anlattınız ama tabloyu bir türlü kuramadım , 3 tane tablo yapıp birbirleriyle bire çok ilişkilendirmemi koyayım sizin dediğinize göre de tek tablo sanırım biraz daha detaylı anlatır mısınız tabloyu , benim istediğimi anlatmışsınız zaten "her gün için bir kayıt oluşturmak"
     
  8. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    898
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    nasıl anlatırım tam bilemiyorum;

    Tabloda her üye için günler var ve her güne ait bir görev alanı var.
    Tablo tanımı şu şekilde olmalı.
    Alan adı ve tipi
    uyeID -> üye id olarak ne kullanıyorsan tipi
    tarih -> date
    gorev -> nvarchar(100) ben 100 dedim en çok kaç karakter gerekiyorsa uzunluk o olmalı.

    Tablo bu şekilde oluşturulduktan sonra, ekrandan bir güne ait görev gireceksin.
    ekrandan ilgili günü <asp:Textbox type="date" /> ile alabilirsin.(asp.net kullandığını varsaydım.)
    textbox içinde görev açıklamasını alırsın.
    kaydet butonuna basıldığında elinde uyeID olduğunu varsayıyorum, yoksa onuda ekrandan alman gerekir.
    INSERT INTO VALUES(uyeID, '" + txDate.Text + "', '" + txGorev.Text + "')

    şeklinde kayıt yapıyorsun. Kayıt sonunda sayfada görev textbox un içini boşaltırsın.
    tüm günleri bu şekilde kaydettin diyelim, göstermek içinde yukardaki select cümlesini yazmıştım. O select e belki uyeID de eklersin WHERE kısmına. Üye bazında ise.
    Tabi kayıt esnasında önce o güne ait kayıt varmı kontrol etmelisin.