SQL Row_Number() Fonksiyonu Update Yapmak (Sıra Kolonu Güncelleme)

Eylül 15, 2017 Mustafa BÜKÜLMEZ 0 Yorum



Selamlar arkadaşlar,
Bu dersimizin içeriği;
  1. Row_Number() Kullanımı
  2. Update işlemi
  3. Update İşlemi içerisinde select sorgusu kullanımı
Öncelikle bu işlem bana neden gerek oldu onu anlatayım. ID bilgisi haricinde bir adet de sıra bilgisi tutmak gereken bir tablom var. Sıra mutlaka 1, 2, 3, 4 gibi sıralı olması gerekiyor. Eğer 1, 3, gibi atlamalı olursa sıkıntı yaşıyorum. (En başta 50 olup sonraki düzeltmede 45 olması sıkıntı değil) Yani işin özü her üç satırdan bir hesap çıkarmam gerekiyor.  Bunun içinde Kod -1 , Kod -2 olarak kullanıyorum.
Tablo mevcut ama aralardan silinmeler olduğundan dolayı atlamalar var ve bu da hesapları bozuyor. Manuel düzeltmek isterdim ancak tabloda binlerce kayıt var ve saatler sürer.
Kodlarımıza geçelim.
SQL
UPDATE x

SET x.Tbl_Kod = x.Yeni_Kodlar

FROM (
      SELECT Tbl_Kod , ROW_NUMBER() OVER (ORDER BY [Tbl_ID] ) AS Yeni_Kod
      FROM MyTable
      ) x

-- x ile select sorgusuna bir isim vermiş olduk
-- x. ile başlayanlar bu select sorgusunun elemanları anlamına gelir.
-- x sorgusundaki Tbl_Kod 'u x sorgusundaki ROW_NUMBER()' a  göre güncelle - demiş oluyoruz.
-- Ancak buradaki ROW_NUMBER()' ı da veriler ID ye göre sıralandığındaki satır numarasını alıyoruz
Kodlarımızı sıralı olarak yani ardışık olarak almak için 
SQL
ROW_NUMBER()
bu fonksiyonu kullanıyoruz ve hangi sıraya göre alacağımızı da
SQL
ROW_NUMBER() OVER (ORDER BY [Tbl_ID]
devamındaki komutlar ile alıyoruz.  
NOT: ROW_NUMBER() ile gelen sıra numarası hiçbir zaman değişmez.   
Sıralamayı ID'ye göre de yapsanız, Tarihe göre de yapsanız 1. satır her zaman 1. satırdır. Yani ROW_NUMBER() tabloya bağlı değldir. Gelen sonuçlara bağlıdır. (Excel deki gibi düşünün. 1. Satırı sildiğinizde 2. satır 1. satır olur.)
Bu dersimizde bu kadar arkadaşlar
Diğer derslerimizde görüşmek üzere,
Bol kodlu günler
https://mustafabukulmez.com/

0 Yorum:

SQL Tablolarda Sıralı Olmayan Kayıtları Sıralamak

Eylül 15, 2017 Mustafa BÜKÜLMEZ 0 Yorum


Selamlar arkadaşlar,
Bu dersin içeriği;
  1. MS-SQL'de kayıtların sıralı görünmemesi sorununu düzelteceğiz. (2 Farklı yol)
Belki daha önce karşılaşmışsınızdır. Tabloyu oluşturdunuz kayıtlar dolmaya başladı. Kontrol için tabloyu açtınız bir baktınız Identity(1,1) kolonundaki ID ler karman çorman (tüm satır yani). Şöyle bir sıra görebilirsiniz. 1, 5, 2, 3, 4, 10, 11, 12, 13, 14, 25, 86, 7...
1. Yol - Öncelikle bu sorunun sebebi ID kolonunu primary key yapmamanızdır. Böyle bir tablonuz var ise bir deneyin. Desing sayfasını açın ve Id kolonunu primary key yapın. Sorunun düzeldiğini göreceksiniz.
2. Yol - Bir sebepten dolayı tabloda primary key kullanamıyorsunuz ve bu kayıtların sırasız oluşu işinizi zorlaştırıyor. O zaman yapacağınız işlem şudur. Tablo adının solundaki ( + )'ya tıklayın ve alt klasörleri görün.
  • Columns
  • Keys
  • Constraints
  • Triggers
  • Indexes
  • Statistics
Burada işimiz Indexes klsöründe. Indexes klasörü üzerinde sağ tıklıyoruz ve New Index >> Clustered Index diyoruz. Açılan ekranda identity olan kolonumuzu seçiyoruz ve tamam diyoruz. Artık kayıtlar düzenli bir şekilde sıralanacaktır.

Bu dersimizde bu kadar arkadaşlar,
Diğer derslerimizde görüşmek üzere,
Bol kodlu günler.
https://mustafabukulmez.com/

0 Yorum:

C# StreamReader Türkçe Karakter Sorunu Çözümü

Eylül 15, 2017 Mustafa BÜKÜLMEZ 0 Yorum



Selamlar arkadaşlar,
Bu dersin içeriği;
  1. StreamReader ile ini dosyaları okurken yaşadığımız Türkçe karakter sorununu çözümü
Hepimiz bu konudan muzdaribiz. Kod kısa konu kısa fazla uzatmayalım.
C#
string yardim = "";
StreamReader sr = new StreamReader(String.Format(@"{0}YardimTextKaydet.ini", System.Windows.Forms.Application.StartupPath), Encoding.GetEncoding("iso-8859-9"), false);
yardim = sr.ReadToEnd();
sr.Close();
Kodlarımız bu kadar arkadaşlar. Burada Türkçe karakter sorunumuzu çözen kısım şurasıdır.
C#
Encoding.GetEncoding("iso-8859-9"), false

Bu dersimizde bu kadar arkadaşlar
Diğer derslerimizde görüşmek üzere
Bol kodlu günler.
https://mustafabukulmez.com/

0 Yorum:

C# DevExpress CheckedListBoxControl'den Seçili Bilgileri Alma Sorunu Çözümü

Eylül 12, 2017 Mustafa BÜKÜLMEZ 0 Yorum


Selamlar Arkadaşlar,
Bu dersin içeriği;
  1. CheckedListBoxControl'ü SQL dem doldurduğumuzda  ve işaretlenmiş verileri alırken yaşanan sorunun çözümü
Arkadaşlar, DevExpress CheckedListBoxControl kullandığınızda verileri özellikler kısmından colleciton'a yazıp kullandığınızda bir sorun yaşamadan işaretli verileri alabiliyorsunuz. Ama çok fazla ise... Tek tek eklemek çok uzun sürecekse bunu bir tabloya bağlarız ve otomatik dolar değil mi? İşte sorun burada çıkıyor ya!..
Şimdi verileri SQL den çekip Combox, Listbox gibi nesnelere doldurmanın iki yöntemi var. Öncelikle ben, bende çalışmayan yöntemi göstereceğim.
C#
DataTable dt =  new DataTable();
// datat table doldurma işlemleri

clb_ait_oldugu_kategoriler.DataSource = dt;
clb_ait_oldugu_kategoriler.DisplayMember = "Kategori_adi";
clb_ait_oldugu_kategoriler.ValueMember = "Kategori_RECno";            
İlk yöntem bu şekilde. Bu kodlar ile veriler, sorunsuz bir şekilde CheckedListBoxControl'e doluyor. Ama verileri şeçerken ki şöyle ;
C#
string kategoriler ="";
foreach (CheckedListBoxItem item in clb_ait_oldugu_kategoriler.Items)
            {
                if (item.CheckState == CheckState.Checked)
                    kategoriler += item + ",";
            }
if şartı her zaman false dönüyor. Nedense seçili olan itemleri algılamıyor. Nedenini bir türlü çözemedim. Ancak verileri alma yöntemide hiçbir sorun yok. Verilerin gelmemesi sorunun asıl sebebi verileri doldurma şeklinde!...
Evet yukarıda dediğimiz gibi ilk yöntemle doldurduğumızda seçilenleri algılamıyor. Şimdi sorun vermeyen doldurma şeklini görelim;
C#
for (int i = 0; i < dt.Rows.Count; i++)
{
    clb_ait_oldugu_kategoriler.Items.Add(dt.Rows["Kategori_adi"].ToString());
}
Bu şekilde doldurduğumuzda ise verileri sorunsuz bir şekilde alıyoruz.
İtiraf etmeliyim ki sorunu bu dersi yazarlem farkettim. Sanırım.. :D 
İlk yöntemle biz verileri dolduruyoruz ancak CheckedListBoxControl'e item olarak eklemiş olmuyoruz sanırım. Verileri aldığımız kodda eklenen verileri buluyor ama Checkeddurumunu alamıyor. 
Neyse artık bir önemi kalmadı sorunun. İkinci yöntemle direk item olarak eklediğimizde sorunsuz bir şekilde çalışıyor. Yani seçilmiş olan itemleri alabiliyoruz.
Bu dersimizde bu kadar arkadaşlar.
Diğer derslerimizde görüşmek üzere
Bol kodlu günler.
https://mustafabukulmez.com/

0 Yorum:

C# StreamReader Türkçe Karakter Sorunu Çözümü

Eylül 12, 2017 Mustafa BÜKÜLMEZ 0 Yorum



Selamlar arkadaşlar,
Bu dersin içeriği;
  1. StreamReader ile ini dosyaları okurken yaşadığımız Türkçe karakter sorununu çözümü
Hepimiz bu konudan muzdaribiz. Kod kısa konu kısa fazla uzatmayalım.
C#
string yardim = "";
StreamReader sr = new StreamReader(String.Format(@"{0}YardimTextKaydet.ini", System.Windows.Forms.Application.StartupPath), Encoding.GetEncoding("iso-8859-9"), false);
yardim = sr.ReadToEnd();
sr.Close();
Kodlarımız bu kadar arkadaşlar. Burada Türkçe karakter sorunumuzu çözen kısım şurasıdır.
C#
Encoding.GetEncoding("iso-8859-9"), false

Bu dersimizde bu kadar arkadaşlar
Diğer derslerimizde görüşmek üzere
Bol kodlu günler.
https://mustafabukulmez.com/

0 Yorum:

C# Login Ekranında Sürekli Değişen Resimler Yapmak

Eylül 09, 2017 Mustafa BÜKÜLMEZ 0 Yorum

Bu dersimizde Login Ekranında Sürekli Değişen Resimler Yapmayı göreceğiz


Selamlar arkadaşlar,
Bu dersin içeriği;
  1. PictureBox kullanımı
  2. Timer Kullanımı
  3. Directoryİnfo Kullanımı
  4. Fileİnfo Kullanımı
  5. For Kullanımı
Öncelikle projemizin bin debug yoluna bir klasör açalım ve içerisine resimlerimizi atalım. Resimlerimizi login 1.jpg, login 2.jpg gibi bir formatta isimlendirelim. 
DİKKAT: İsimler farklı farklı olmayacak. Tek farklı kısım sayısı olacak. Aksi takdirde bu yöntem çalışmaz.
Şimdi bizim bu resimleri proje içerisinde bulmamız gerekiyor. Bunun için Directoryİnfo ve Fileİnfo sınıflarını kullanacağız. DirectoryInfo ile klasörü tarayacağız, FileInfo ile klasördeki resimlerin sayısını for döngüsü kullanarak alacağız.
C#
int adet=0;
void ResimleriSay()
        {
            DirectoryInfo di = new DirectoryInfo(AppPath = System.Windows.Forms.Application.StartupPath + @"LoginResimler");
            FileInfo[] rgFiles = di.GetFiles();
            adet = 0;
            for (int i = 0; i < rgFiles.Count(); i++)
            {
                adet++;
            }
        }
//Adet değişkenimizi tanımlıyori metodumuzu hazırlıyoruz. Bu bir kullanım yoludur. Diğer yolumuz ise

int ResimleriSay()
        {
            DirectoryInfo di = new DirectoryInfo(Classlar.GlobalSistem.AppPath + @"LoginResimler");
            FileInfo[] rgFiles = di.GetFiles();
            int adet = 0;
            for (int i = 0; i < rgFiles.Count(); i++)
            {
                adet++;
            }
            return adet;
        }
// ikinci yolumuz da budur arkadaşlar. Kullanım şeklide;
// Textbox1.Text = ResimleriSay().ToString();
//Birinci de metod ile değişkenimizi doldurdul
//İkinci de metodun kendisini değişken yapıp kullandık
Evet Klasördeki resimlerin sayısını aldık. bunu yapmamızdaki amacımız klasörde kaç tane resim var ise o kadar değişmesini istememiz. Bir resim koyarsak hiç değişmeyecek.
C#
//NOT:
System.Windows.Forms.Application.StartupPath
//Bize programın exe dosyasının bulunduğu klasörün yolunu verir.
Login formumuza bir adet PictureBox, bir adette Timer ekliyoruz.
Formumuzun load eventine gelelim ve Timer'imizi ayarlayalım. Tabiki Timer başladığında resim adedi de bize lazım olacağından load eventimizde ResimSay() fonksiyonumuz da çalıştırıyoruz.
C#
 pictureEdit1.Image = Image.FromFile(System.Windows.Forms.Application.StartupPath + @"LoginResimlerlogin 1.jpg");
 // form ilk açıldığında boş gelmemesi için varsayılan bir resim ayarladık.
 ResimleriSay();
 timer1.Enabled = true; 
 timer1.Interval = 1000; // 1000 demek 1 saniye demektir. Her saniye resim değişecek
 timer1.Start();
Şimdi de Timer'imizin Tick eventine gelip kodlarımızı yazıyoruz.
C#
int i = 0;
private void timer1_Tick(object sender, EventArgs e)
{
    i++;
    if (i > adet)
       i = 1;
    pictureEdit1.Image = Image.FromFile(System.Windows.Forms.Application.StartupPath+ @"{0}LoginResimlerlogin "+1+".jpg");
    ResimleriSay();
}
i  adında bir int değişkeni tanımladık. Timer'in her tick demesinde i 'yi bir arttırdık. Eğer ki i klasörümüzdeki resim sayısına eşit oldu ise, (yani tüm resimleri gösterildi ise) i değişkenimizi 1 yapıyoruz.
Şimdi ;
i = 1 , adet = 18 eşit mi? Değil... Devam ediyoruz
PictureBox'in resmini alacağız. 
C#
System.Windows.Forms.Application.StartupPath // bu kod ile ana klasöre geldik


@"{0}LoginResimler" ile resimlerimizin klasöürün adını veriyoruz. 

//Buradaki @ amacı ter slash'ların hata vermemesi için.  
// Ya "\" çift slash kullanacaksınız yada @ işareti


//işte en civcivli kısım burası 

"login " + i + ".jpg";

// Yukarıda demiştik hepsi aynı isimde olsun sayıları farklı olsun diye. İşte onun amacı burada 
// çıkıyor. 
// Timer'imizin her tick 'inde i ' yi bir arttırmıştık. Buradaki resim adı yerinde sayıya denk 
// gelecek şekilde i değişkenini veriyoruz. Bu şekilde resim adı şöyle oluyor "login 1.jpg"
// klasörümüzde login 1.jpg var ise gösterilecektir. Yok ise hata verecektir
// Tick eventindeki if kontrolünün de amacı bu hatanın önüne geçmektir.
Tick eventinin en sonundaki "ResimleriSay();" yeni eklenen resimler olursa diye sayıyı güncelliyoruz.

Bu dersimizde bu kadar arkadaşlar
Diğer derslerimizde görüşmek üzere
Bol kodlu günler.
https://mustafabukulmez.com/

0 Yorum: