none
Combobox'a hiz veri cekme nasil yapilabilir? RRS feed

  • Soru

  • Merhaba arkadaşlar,

    Bir datagridview var ilgili satir secilince veriler ilgili textbox ve comboboxlara geliyor. Sorunum su atiyorum combobox1 de default olarak 4 adet string mevcut "A,B,C,D" olsun. ilgili index secilince ornegin "A" olsun sistem bu indexe ait bilgiyi veriyababindan cekip combobox 2 ye atiyor. daha sonra combobox2 den secilen indexe ait bilgileri combobox 3 e atiyor.bunun gibi sirali secilde yaklasik 10 adet combobox var. ve datagridviewden bir satir secildiginde hali ile sistem veri cekip bu combolari doldurmak icin sistem donuyor. bunun icin farkli bir yontem varmidir?

    23 Ocak 2016 Cumartesi 20:52

Yanıtlar

  • (Asagida yazinca goruntu daraliyor diye buraya yaziyorum)

    Sana hatalarini soylemeye calisacagim ama bunu yaparken de kirilmana sinirlenmene neden olabilirim, 'dost aci soyler' diye kabul et.

    Senin kodlarindaki SQL sorgulamalarini bir araya toplayinca soyle bir sey cikiyor:

    SELECT Grup FROM Open_Point_List GROUP BY Grup;
    SELECT Bölüm FROM Open_Point_List WHERE Grup = 'combogrup.Text' GROUP BY Bölüm;
    SELECT Alt_Bölüm FROM Open_Point_List WHERE Grup= 'combogrup.Text' GROUP BY Bölüm, Alt_Bölüm HAVING Bölüm='combobölüm.Text';
    SELECT Ergocheck_Durumu FROM Open_Point_List GROUP BY Ergocheck_Durumu;
    SELECT Kısım FROM Open_Point_List GROUP BY Kısım ORDER BY Kısım ASC;
    
    SELECT Kontrol_No FROM Öncelik_Listesi ORDER BY Kontrol_No;
    
    SELECT Makine_Bilgisi FROM Makine_Bilgisi WHERE Bölüm='combobölüm.Text' AND Alt_Bölüm='comboaltbölüm.Text' GROUP BY Makine_Bilgisi;
    SELECT Envanter_No FROM Makine_Bilgisi WHERE Bölüm='combobölüm.Text' AND Alt_Bölüm='comboaltbölüm.Text' GROUP BY Envanter_No ORDER BY Envanter_No;
    
    Select * from BölümReferans order by Bölüm asc;
    

    Veritabani programlamasiyla calisan her kisinin hemen dikkatini cekecek olan giristeki 5 SQL (digerleri de var da o cok carpici).  Sen verilerini cop kovasina doldurur gibi, calakalem bir tabloda toplamaya baslamissin. Bu bir tablodan cok, bir listeden ya da excel sayfasindan yaratilmis tablo gibi. Veritabani ile calismayanlarin yaptigi bir sey ve zaten access'i veritabani niyetine kullanmandan da veritabani programcisi olmadigin anlasiliyor.

    Oncelikle bir seye karar vermelisin, bana kizip bildigin yoldan gidip bu isi eglencelik mi yapacaksin, yoksa bu verilerin senin icin bir onemi var da duzgun bir sey yapmayi mi planliyorsun. Eger ilki ise, accesste bile bu kadar kotu islemler yavas calissa da donma yasatmayabilir. Veritabaninda o alanlarda indexlerin var mi ona bak, yoksa yarat ve yazinin geri kalanini da okuma. 

    Okumaya devam etmeye karar verdiysen, tavsiyem, nasil olsa radikal degisiklikler olacak, baslamisken en onemli degisikligi de yap ve access'i veritabani diye kullanmayi birak. Ne sececegine gelince, cok fazla secenek oldugundan ben senin icin daraltayim:

    1) PostgreSQL - dunyanin en gelismis acik kaynak kodlu iliskisel veritabani sistemi.
    2) MS SQL Server - MS'un gozbebegi.
    3) SQLite - Acik kaynak kodlu, kurulum gerektirmeyen, cep telefonlarinda da en cok kullanilan veritabani.

    (geri kalan 250 kusur veritabani var ama secenekleri bu 3'une indirdik)

    Bunlarin icinde SQLite'in dezavantaji, cok kullanicili olmamasi.
    MS SQL server'in en buyuk avantaji, MS'un gozbebegi oldugu icin VS icinde en cok onun icin arac gelistirilmesi, destek verilmesi. Sanirim bu senin icin onemli olacak, onun icin de secilecek olan MS SQL server'in SQLExpress yayimi (10 Gb'a kadar ucretsiz. 32 bit access'in database limitinin sadece 2 Gb oldugunu dusunursen bu sana yeter). Hayir yetmez diyorsan, o zaman zaten VS'un arac destegini on planda tutmani gerektirmeyecek kadar kiymetli verin var demektir ve kendine postgreSQL gibi cok gelismis bir veritabani secme sansini verebilirsin (MS SQL server'in aksine, windows disi isletim sistemlerinde de calisir).

    Neyse, en azindan MS SQL server Express secerek, access'ten kurtul. mdb ya da accdb dosyani bana verirsen, onu SQL server  database'e cevirmek de benden olsun (tabii bu kodda gorduklerimden cok daha fazlasi yok ise). 

    Ilk bes SQL'e bakarsak, sen bir tabloda:

    Grup, Bolum, AltBolum, Ergocheck, Kisim diye toplamissin. Bu Turkiye'nin posta kodu listesini:

    Il, Ilce, Semt, Mahalle, Postakodu

    gibi yazmaya benziyor. Yazilmaz mi? Yazilabilir ama yazarsan basina gelecekleri de gormen lazim. Ornegin Istanbul icin satirlar sunun gibi:

    ilAdi	ilceAdi	semtAdi	mahalleAdi	kod
    İstanbul	Adalar	Burgazada	Burgazadası Mah.	34975
    İstanbul	Adalar	Büyükada	Maden Mah.	34970
    İstanbul	Adalar	Büyükada	Nizam Mah.	34970
    İstanbul	Adalar	Heybeliada	Heybeliada Mah.	34973
    İstanbul	Adalar	Kınalıada	Kınalıada Mah.	34977
    İstanbul	Arnavutköy	Arnavutköy	Anadolu Mah.	34276
    İstanbul	Arnavutköy	Arnavutköy	Arnavutköymerkez Mah.	34276
    İstanbul	Arnavutköy	Arnavutköy	Atatürk Mah.	34276
    İstanbul	Arnavutköy	Arnavutköy	İmrahor Mah.	34276
    İstanbul	Arnavutköy	Arnavutköy	İslambey Mah.	34276
    İstanbul	Arnavutköy	Arnavutköy	Nenehatun Mah.	34276
    İstanbul	Arnavutköy	Arnavutköy	Yavuzselim Mah.	34276
    İstanbul	Arnavutköy	Boğazköy	Atatürk Mah.	34285
    İstanbul	Arnavutköy	Boğazköy	Boğazköymerkez Mah.	34285
    İstanbul	Arnavutköy	Boğazköy	İstiklal Mah.	34285

    Bu satirlari yazarken hata yapma olasiligi daha fazla. Ornegin 

    İstanbul	Arnavutköy	Arnavutköy

    6 satirda, gereksiz yere tekrarlaniyor ve tek bir ID ile tanimlanabilecek bu veri 3 tane string ile tanimlanmis oluyor. Yalnizca bu bile "donma" icin nedenlerden birisi. Senin bu veri icin combolar yaptigini dusunursek, ilk Combo'ya Istanbul gelmesi icin gereksiz yere 913 satir secilip (Istanbul'un 813 mahallesi tanimli) icerisinden Istanbul alinacak. Yine ayni sekilde bu combo 81 il secmek icin tum mahalle listesinden gruplama yapacak (47649 satir var). Oysa Iller tablosu ayri olsa sadece 81 satirdan secim yapar (ki gercekte veritabaninda oyle). Il ile ilce tablosu biribirine IlID diye bir alan uzerinden baglanir. Yine ayni sekilde, Ilceler ile semtler ilceID uzerinden ve bu boyle devam eder. Zaten bu nedenle de bu tip veritabanlarinin adi "iliskisel veritabani - relational database" ve kisaca RDBMS olarak bilinirler. Bu sekilde bir yapi ile senin combolarin dolma suresi milisaniye duzeyinde olur ve herhangi bir donma hissetmezsin. Mantiksal olarak bakinca, cogu combonun tek sefer dolmasi yeterli, ancak sistemini bu sekilde duzenlersen, her seferinde yeniden doldursan da herhangi hissedilir bir yavaslama olmayabilir (bolum, ya da altbolum sayin 10 binlerce degil ise). Su an senin yaptiginda sadece Ergocheck_durumu gibi sadece birkac secenekli bir comboyu bile doldurabilmek icin:
    Grup,Bolum,Altbolum * ortalama 1-2 Ergocheck*Ortalana kisim ve diger alanlarin sayisi

    kadar kayittan secme yapiliyor. Hele bir de o alanlar indexli degil ise, zaten fasulye gibi nimetten sayip database diye sectigin access surunur.


     

    • Yanıt Olarak Öneren Ensar KARTAL 25 Ocak 2016 Pazartesi 14:42
    • Yanıt Olarak İşaretleyen Serkan Canseven 25 Ocak 2016 Pazartesi 20:10
    25 Ocak 2016 Pazartesi 14:03
    Yanıtlayıcı
  • Şimdi moralini bozmak istemem ama komple gereksiz bunlar, hepsi yanlış. Eğer bana bir teamviewer id gönderebilirsen yardımcı olmaya çalışayım. emailim altta.

    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    25 Ocak 2016 Pazartesi 11:32
    Moderatör

Tüm Yanıtlar

  • "hali ile sistem veri cekip bu combolari doldurmak icin sistem donuyor" ne demek? Boyle bir durum yok, neden "hali ile" olsun ki? Siz hic kod vermediginizden, neyi yanlis yaptiginizi bilmenin imkani yok. Kotu bir kodlamada bile donmazken, burada donduguna gore, cok farkli bir sey yapiyorsunuz demek ki. 

    Bir de, "veritabani" cok genel bir sozcuk. 250'den fazla veritabani var. Tam olarak neden bahsettiginizi aciklarsaniz daha iyi. 

    Forumda defalarca, biribiri ile ilgili combo ornekleri verildi.

    23 Ocak 2016 Cumartesi 21:20
    Yanıtlayıcı
  • bunda anlamayacak birsey yok anlamak istemesseniz.

    combobox1.text="a10"; olsun

    void combobox2_doldur()

    {

    string sorgu= "select * from db_bolum where bolum='"+combobox1.text+"';

    Bla bla bla...

    }

    Bu sekilde bir sorgu ile combobox2 dolduruluyor. akabinde combobox2 de bir satir seciliyor ve ayni mantikla combobox2.text="gehause"; olsun.Buna gore

    void combobox3_doldur()

    {

    string sorgu= "select * from db_altbolum where bolum='"+combobox2.text+"';

    bla bla bla...

    }

    busekilde 10 combobox veritabanindan

    cekiliyor(Ergonomi.accdb) adli veritabanindan.

    bunlar sira sira secilmiyor. Datagridview'den satir seciyorum ve o satirdaki veriler otamotik olarak comboboxlari dolduruyor. veritabanindan veriler cekilince sistem donuyor gec geliyor tam bu esnada. bunun icin farkli bir metod varmidir?

    Sorum bu anladilmayan bir nokta varsa aciklamaya calisirim.

    23 Ocak 2016 Cumartesi 21:43
  • "Baska bir yol" diyorsun, ancak senin yaptigin yol zaten ASLA kullanmaman gereken bir yol. SQL cumlelerini ASLA ve ASLA oyle + ile birlestirerek yapma, parametre kullan. Donma olayina gelince, onu nasil yaptigini ben gene de anlayamadim, belki bir baskasi anlamistir. Dedigim gibi forumda defalarca ornek kod verildi, onlara bak istersen.

    23 Ocak 2016 Cumartesi 21:49
    Yanıtlayıcı
  • Hocam arkadaş, yaptığının doğru olduğunu düşünüyor, onun için kod falan paylaşmıyor. İlk önce bildiklerini unutturmak lazım, 

    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    24 Ocak 2016 Pazar 06:40
    Moderatör
  • Öncelikle burası paralı veya Microsoft çalışanlarının olduğu bir forum değil gönüllülerden oluşan bir forum. Sana cevap veren insanlar senin sorununu çözmeye çalışıyorlar. Çetin Hocam ve Önay Hocam bu konuda çok anlayışlılar. Kimse burada müneccim değil "bunda anlamayacak birsey yok anlamak istemesseniz. " bu şekilde konuşman çok yanlış. En Azından senin puanına bak ve sana cevap veren insanın puanına bak aradaki emek farkını görürsün.

    Gelelim soruna ,

    Senin kullandığın zaten bir veritabanı değil sadece bu şekilde lanse edilen bir Office programı. Sorguların * ile hepsini çekiyorsun işine yapıyan kolonu çek ve parametre kullan.


    kdrgny@outlook.com

    24 Ocak 2016 Pazar 14:08
  • Merhabalar

    Resim 1 'de veriler listeleniyor.

    Resim 2 'de datagridview üzerinden bir satır seciliyor. Ve secilen satır'daki veriler alt ksımdaki combobox ve Textboxlara dolduruluyor.

    Resim 3 'de dedolmuş veriler üzerinden bir güncellem ihtiyacı var ise yapılıyopr.

     void Grup_doldur()
            {
                sorgu = "SELECT Open_Point_List.Grup FROM Open_Point_List GROUP BY Open_Point_List.Grup; ";
                foreach (DataRow Row in db.TabloÇek(sorgu).Rows)
                {
                    combogrup.Items.Add(Row["Grup"].ToString());
                }
    
            }
    
            public void combobölüm_doldur()
            {
                combobölüm.Items.Clear();
                string veri = combogrup.SelectedItem.ToString();
                sorgu = "SELECT Open_Point_List.Bölüm FROM Open_Point_List WHERE (((Open_Point_List.Grup)='" + Convert.ToString(veri) + "')) GROUP BY Open_Point_List.Bölüm;";
                foreach (DataRow Row in db.TabloÇek(sorgu).Rows)
                {
                    combobölüm.Items.Add(Row["Bölüm"].ToString());
                }
    
            }
    
            public void comboaltbölüm_doldur()
            {
                comboaltbölüm.Items.Clear();
                string veri = combobölüm.SelectedItem.ToString();
                sorgu = "SELECT Open_Point_List.Alt_Bölüm FROM Open_Point_List WHERE (((Open_Point_List.Grup)='" + combogrup.Text + "')) GROUP BY Open_Point_List.Bölüm, Open_Point_List.Alt_Bölüm HAVING (((Open_Point_List.Bölüm)='" + combobölüm.Text + "'));";
                foreach (DataRow Row in db.TabloÇek(sorgu).Rows)
                {
                    comboaltbölüm.Items.Add(Row["Alt_Bölüm"].ToString());
                }
            }
    
            public void combokntrlno_doldur()
            {
                combokntrlno.Items.Clear();
                sorgu = "SELECT Öncelik_Listesi.Kontrol_No FROM Öncelik_Listesi ORDER BY Öncelik_Listesi.Kontrol_No;";
    
                foreach (DataRow Row in db.TabloÇek(sorgu).Rows)
                {
                    combokntrlno.Items.Add(Row["Kontrol_No"].ToString());
    
    
                }
            }
    
            public void combomakbilgisi_doldur()
            {
                combomakbilgisi.Items.Clear();
                sorgu = "SELECT Makine_Bilgisi.Makine_Bilgisi FROM Makine_Bilgisi WHERE (((Makine_Bilgisi.Bölüm)='" + combobölüm.Text + "') AND ((Makine_Bilgisi.Alt_Bölüm)='" + comboaltbölüm.Text + "')) GROUP BY Makine_Bilgisi.Makine_Bilgisi;";
                foreach (DataRow Row in db.TabloÇek(sorgu).Rows)
                {
                    combomakbilgisi.Items.Add(Row["Makine_Bilgisi"].ToString());
                }
            }
    
            public void comboenvno_doldur()
            {
                comboenvno.Items.Clear();
                sorgu = "SELECT Makine_Bilgisi.Envanter_No FROM Makine_Bilgisi WHERE (((Makine_Bilgisi.Bölüm)='" + combobölüm.Text + "') AND ((Makine_Bilgisi.Alt_Bölüm)='" + comboaltbölüm.Text + "')) GROUP BY Makine_Bilgisi.Envanter_No ORDER BY Makine_Bilgisi.Envanter_No;";
                foreach (DataRow Row in db.TabloÇek(sorgu).Rows)
                {
                    comboenvno.Items.Add(Row["Envanter_No"].ToString());
                }
            }
    
            public void comboergodurumu_doldur()
            {
                comboergodurumu.Items.Clear();
                sorgu = "SELECT Open_Point_List.Ergocheck_Durumu FROM Open_Point_List GROUP BY Open_Point_List.Ergocheck_Durumu;";
                foreach (DataRow Row in db.TabloÇek(sorgu).Rows)
                {
                    comboergodurumu.Items.Add(Row["Ergocheck_Durumu"].ToString());
                }
            }
    
            public void combokısım_doldur()
            {
                combokısım.Items.Clear();
                sorgu = "SELECT Open_Point_List.Kısım FROM Open_Point_List GROUP BY Open_Point_List.Kısım ORDER BY Open_Point_List.Kısım ASC;";
                foreach (DataRow Row in db.TabloÇek(sorgu).Rows)
                {
                    combokısım.Items.Add(Row["Kısım"].ToString());
                }
            }
    
            public void ComboBölümler_doldur()
            {
    
                combobölümler.Items.Clear();
                sorgu = "Select * from BölümReferans order by Bölüm asc;";
                foreach (DataRow Row in db.TabloÇek(sorgu).Rows)
                {
                    if (Row["Bölüm"] != DBNull.Value)
                    {
                        combobölümler.Items.Add(Row["Bölüm"].ToString());
                    }
    
                }
            }
    
            private void comboaltbölüm_SelectedIndexChanged(object sender, EventArgs e)
            {
                combokntrlno_doldur();
                combomakbilgisi_doldur();
                comboenvno_doldur();
                comboergodurumu_doldur();
                combokısım_doldur();
            }
    
            private void combogrup_SelectedIndexChanged(object sender, EventArgs e)
            {
                combobölüm_doldur();
            }
    
            private void combobölüm_SelectedIndexChanged(object sender, EventArgs e)
            {
                comboaltbölüm_doldur();
            }

    Kod satırımda budur.


    Burada yaptığım şey şudur. Doğru yanlış tartışılabilir eksiğim varsa söyleyiniz lütfen.

    Kullanıcı hatalı bilgi girmesin diye sadece ilgili bölüm verilerini getirtiyorum.

    Datagridview 'e tıkladığımda combogrup.selectedindex değişiyor. Dolayısı ile secili olan grup'a ait bilgileri combobölüm'e geliyor.

    combobölüm.selectedindex değişincede secili bölüme ait alt_bölüm bilgileri geliyor. Ve bunları hep access üzerinden çekiyor. Busebeple anında veri transferi olmuyor.

    Birşeyler yanlış ama neyin yanlış olduğunu bilmiyorum.

    Desteğnizi rica ederiim...




    25 Ocak 2016 Pazartesi 10:39
  • Şimdi moralini bozmak istemem ama komple gereksiz bunlar, hepsi yanlış. Eğer bana bir teamviewer id gönderebilirsen yardımcı olmaya çalışayım. emailim altta.

    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    25 Ocak 2016 Pazartesi 11:32
    Moderatör
  • Peki. Şuan şirket pc'den gonderemiyoruz. Teamviewer fln kuramıyoruz maalesef :( fakat kendi pc'mden gönderebilirim.

    Sizin için uygunsa 21:00 gibi yardımcı olabilirmisiniz? yadamümkün değilse yön gösterici bir kod verebilirmisniz?

    main adresinize whatsapp bilgilerimi göndreceğim. Oradan desteğinizizi rica ederim mümkünse eğer.

    25 Ocak 2016 Pazartesi 13:54
  • (Asagida yazinca goruntu daraliyor diye buraya yaziyorum)

    Sana hatalarini soylemeye calisacagim ama bunu yaparken de kirilmana sinirlenmene neden olabilirim, 'dost aci soyler' diye kabul et.

    Senin kodlarindaki SQL sorgulamalarini bir araya toplayinca soyle bir sey cikiyor:

    SELECT Grup FROM Open_Point_List GROUP BY Grup;
    SELECT Bölüm FROM Open_Point_List WHERE Grup = 'combogrup.Text' GROUP BY Bölüm;
    SELECT Alt_Bölüm FROM Open_Point_List WHERE Grup= 'combogrup.Text' GROUP BY Bölüm, Alt_Bölüm HAVING Bölüm='combobölüm.Text';
    SELECT Ergocheck_Durumu FROM Open_Point_List GROUP BY Ergocheck_Durumu;
    SELECT Kısım FROM Open_Point_List GROUP BY Kısım ORDER BY Kısım ASC;
    
    SELECT Kontrol_No FROM Öncelik_Listesi ORDER BY Kontrol_No;
    
    SELECT Makine_Bilgisi FROM Makine_Bilgisi WHERE Bölüm='combobölüm.Text' AND Alt_Bölüm='comboaltbölüm.Text' GROUP BY Makine_Bilgisi;
    SELECT Envanter_No FROM Makine_Bilgisi WHERE Bölüm='combobölüm.Text' AND Alt_Bölüm='comboaltbölüm.Text' GROUP BY Envanter_No ORDER BY Envanter_No;
    
    Select * from BölümReferans order by Bölüm asc;
    

    Veritabani programlamasiyla calisan her kisinin hemen dikkatini cekecek olan giristeki 5 SQL (digerleri de var da o cok carpici).  Sen verilerini cop kovasina doldurur gibi, calakalem bir tabloda toplamaya baslamissin. Bu bir tablodan cok, bir listeden ya da excel sayfasindan yaratilmis tablo gibi. Veritabani ile calismayanlarin yaptigi bir sey ve zaten access'i veritabani niyetine kullanmandan da veritabani programcisi olmadigin anlasiliyor.

    Oncelikle bir seye karar vermelisin, bana kizip bildigin yoldan gidip bu isi eglencelik mi yapacaksin, yoksa bu verilerin senin icin bir onemi var da duzgun bir sey yapmayi mi planliyorsun. Eger ilki ise, accesste bile bu kadar kotu islemler yavas calissa da donma yasatmayabilir. Veritabaninda o alanlarda indexlerin var mi ona bak, yoksa yarat ve yazinin geri kalanini da okuma. 

    Okumaya devam etmeye karar verdiysen, tavsiyem, nasil olsa radikal degisiklikler olacak, baslamisken en onemli degisikligi de yap ve access'i veritabani diye kullanmayi birak. Ne sececegine gelince, cok fazla secenek oldugundan ben senin icin daraltayim:

    1) PostgreSQL - dunyanin en gelismis acik kaynak kodlu iliskisel veritabani sistemi.
    2) MS SQL Server - MS'un gozbebegi.
    3) SQLite - Acik kaynak kodlu, kurulum gerektirmeyen, cep telefonlarinda da en cok kullanilan veritabani.

    (geri kalan 250 kusur veritabani var ama secenekleri bu 3'une indirdik)

    Bunlarin icinde SQLite'in dezavantaji, cok kullanicili olmamasi.
    MS SQL server'in en buyuk avantaji, MS'un gozbebegi oldugu icin VS icinde en cok onun icin arac gelistirilmesi, destek verilmesi. Sanirim bu senin icin onemli olacak, onun icin de secilecek olan MS SQL server'in SQLExpress yayimi (10 Gb'a kadar ucretsiz. 32 bit access'in database limitinin sadece 2 Gb oldugunu dusunursen bu sana yeter). Hayir yetmez diyorsan, o zaman zaten VS'un arac destegini on planda tutmani gerektirmeyecek kadar kiymetli verin var demektir ve kendine postgreSQL gibi cok gelismis bir veritabani secme sansini verebilirsin (MS SQL server'in aksine, windows disi isletim sistemlerinde de calisir).

    Neyse, en azindan MS SQL server Express secerek, access'ten kurtul. mdb ya da accdb dosyani bana verirsen, onu SQL server  database'e cevirmek de benden olsun (tabii bu kodda gorduklerimden cok daha fazlasi yok ise). 

    Ilk bes SQL'e bakarsak, sen bir tabloda:

    Grup, Bolum, AltBolum, Ergocheck, Kisim diye toplamissin. Bu Turkiye'nin posta kodu listesini:

    Il, Ilce, Semt, Mahalle, Postakodu

    gibi yazmaya benziyor. Yazilmaz mi? Yazilabilir ama yazarsan basina gelecekleri de gormen lazim. Ornegin Istanbul icin satirlar sunun gibi:

    ilAdi	ilceAdi	semtAdi	mahalleAdi	kod
    İstanbul	Adalar	Burgazada	Burgazadası Mah.	34975
    İstanbul	Adalar	Büyükada	Maden Mah.	34970
    İstanbul	Adalar	Büyükada	Nizam Mah.	34970
    İstanbul	Adalar	Heybeliada	Heybeliada Mah.	34973
    İstanbul	Adalar	Kınalıada	Kınalıada Mah.	34977
    İstanbul	Arnavutköy	Arnavutköy	Anadolu Mah.	34276
    İstanbul	Arnavutköy	Arnavutköy	Arnavutköymerkez Mah.	34276
    İstanbul	Arnavutköy	Arnavutköy	Atatürk Mah.	34276
    İstanbul	Arnavutköy	Arnavutköy	İmrahor Mah.	34276
    İstanbul	Arnavutköy	Arnavutköy	İslambey Mah.	34276
    İstanbul	Arnavutköy	Arnavutköy	Nenehatun Mah.	34276
    İstanbul	Arnavutköy	Arnavutköy	Yavuzselim Mah.	34276
    İstanbul	Arnavutköy	Boğazköy	Atatürk Mah.	34285
    İstanbul	Arnavutköy	Boğazköy	Boğazköymerkez Mah.	34285
    İstanbul	Arnavutköy	Boğazköy	İstiklal Mah.	34285

    Bu satirlari yazarken hata yapma olasiligi daha fazla. Ornegin 

    İstanbul	Arnavutköy	Arnavutköy

    6 satirda, gereksiz yere tekrarlaniyor ve tek bir ID ile tanimlanabilecek bu veri 3 tane string ile tanimlanmis oluyor. Yalnizca bu bile "donma" icin nedenlerden birisi. Senin bu veri icin combolar yaptigini dusunursek, ilk Combo'ya Istanbul gelmesi icin gereksiz yere 913 satir secilip (Istanbul'un 813 mahallesi tanimli) icerisinden Istanbul alinacak. Yine ayni sekilde bu combo 81 il secmek icin tum mahalle listesinden gruplama yapacak (47649 satir var). Oysa Iller tablosu ayri olsa sadece 81 satirdan secim yapar (ki gercekte veritabaninda oyle). Il ile ilce tablosu biribirine IlID diye bir alan uzerinden baglanir. Yine ayni sekilde, Ilceler ile semtler ilceID uzerinden ve bu boyle devam eder. Zaten bu nedenle de bu tip veritabanlarinin adi "iliskisel veritabani - relational database" ve kisaca RDBMS olarak bilinirler. Bu sekilde bir yapi ile senin combolarin dolma suresi milisaniye duzeyinde olur ve herhangi bir donma hissetmezsin. Mantiksal olarak bakinca, cogu combonun tek sefer dolmasi yeterli, ancak sistemini bu sekilde duzenlersen, her seferinde yeniden doldursan da herhangi hissedilir bir yavaslama olmayabilir (bolum, ya da altbolum sayin 10 binlerce degil ise). Su an senin yaptiginda sadece Ergocheck_durumu gibi sadece birkac secenekli bir comboyu bile doldurabilmek icin:
    Grup,Bolum,Altbolum * ortalama 1-2 Ergocheck*Ortalana kisim ve diger alanlarin sayisi

    kadar kayittan secme yapiliyor. Hele bir de o alanlar indexli degil ise, zaten fasulye gibi nimetten sayip database diye sectigin access surunur.


     

    • Yanıt Olarak Öneren Ensar KARTAL 25 Ocak 2016 Pazartesi 14:42
    • Yanıt Olarak İşaretleyen Serkan Canseven 25 Ocak 2016 Pazartesi 20:10
    25 Ocak 2016 Pazartesi 14:03
    Yanıtlayıcı
  • Peki. Şuan şirket pc'den gonderemiyoruz. Teamviewer fln kuramıyoruz maalesef :( fakat kendi pc'mden gönderebilirim.

    Sizin için uygunsa 21:00 gibi yardımcı olabilirmisiniz? yadamümkün değilse yön gösterici bir kod verebilirmisniz?

    main adresinize whatsapp bilgilerimi göndreceğim. Oradan desteğinizizi rica ederim mümkünse eğer.

    olur tabi

    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak Öneren Ensar KARTAL 25 Ocak 2016 Pazartesi 14:42
    25 Ocak 2016 Pazartesi 14:31
    Moderatör
  • Ya Önay,

    Ben de ne kismetsizim :) Yazmaya cok onceleri baslamistim, bir suru araya giren is ve kisiler oldu, yazmayi bitirip attigimda megerse sen coktan bunu yazmissin. Arada ogrenme sansim olsaydi o kadar sey yazmaktan kurtulurdum :)

    Ertuğrul arkadasim, Önay gene harika bir teklifte bulunmus, kacirma.

    25 Ocak 2016 Pazartesi 15:08
    Yanıtlayıcı
  • hocam , senin yazdıkların boşa gitmezki, başkaları da okur.

    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    25 Ocak 2016 Pazartesi 15:11
    Moderatör
  • Aynen katılıyorum.

    Çetin abi ve Önay Abi yazdıklarınız çok değerli.Ben aydınlanıyorum benim gibi bir çok kişi aydınlanacaktır.

    Önay abi ,21:00'da pc başında olacağım :)Desteğiniz için çok teşekkürler.

    Çetin Abi ,

    Uzun yazın beni aydınlattı. Çok sağol fevr çıkış için kuusra bakma. Özür dilerim.

    25 Ocak 2016 Pazartesi 16:07
  • Önay Bey müsaitmisiniz?
    25 Ocak 2016 Pazartesi 19:32