none
Sqlden labela ve veri cekme RRS feed

  • Soru

  • Takıldığım konuyu örnek vererek açıklayacağım.

    a, b ve c adlı parça isimleri olsun. Ve bu a,b ve c adlı parçalarının ayrı ayrı ölçüleri var. Sırasıyla 1,2 ve 3 diyelim. Ölçü isimlerine de a1, b1,c1  sonra a2,b2,c2 diyelim.

    mesela ben programımda b parçasını seçtiğimde b parçasına ait b1 ve b2 verilerinden b1'i label'a, b2'yi textBox'a kaydetmek istiyorum. Ama bir sürü parça olduğu için bunları teker teker yapmak istemiyorum. (Ya da başka çözümü yoksa teker teker de yazabilirim maalesef :( ) 

    Şimdi b parçasının b1 ve b2 verileri aynı alan adı altında. Bunu da belirtmek isterim. Yani b parçasını seçtiğimde ayrı tabloda aynı alan adı altında olan b1'i label'a, b2'yi textbox'a çekeceğim.

    Yardımlarınız için şimdiden teşekkürler.


    • Düzenleyen Harun Yılmaz 20 Haziran 2019 Perşembe 07:40 Konu başlığı düzeltme
    18 Haziran 2019 Salı 11:58

Yanıtlar

  • Bir çeşit "pivot", "crosstab" yapmissiniz. Aslinda datayi dogrudan bu sekilde almak mumkun ama kaynak SQL Server ve SQL server'da pivot yapmanın astari yuzunden pahalı ve karmaşık, performans getirisi de yok. Resimden anladigim kadarıyla o alanların data tipi varchar, degil ise casting yerine ToString() kullanabilirsiniz:

    void olculeriGoster(string parcaKodu)
    {
    	// boyle baglanti saklamayin, connection string saklayin
    	using (SqlConnection con = new SqlConnection(pmiBaglanti.ConnectionString)) 
    	using (SqlCommand cmd = new SqlCommand(@"select top(10) OLCU_ADI, OLCULER, OLCU_ALETI, KONTROL
    	from olcuTablosu
    	where PARCA_KODU = @parca", con))
    	{
    		cmd.Parameters.Add("@parca", SqlDbType.VarChar).Value = parcaKodu;
    		con.Open();
    	    var dr = cmd.ExecuteReader();
    		int row = 0;
    		while (dr.Read())
    		{
    			this.Controls["label" + (row + 1)].Text = (string)dr["OLCU_ADI"];
    			this.Controls["Textbox" + (row * 3 + 1)].Text = (string)dr["OLCULER"];
    			this.Controls["Textbox" + (row * 3 + 2)].Text = (string)dr["OLCU_ALETI"];
    			this.Controls["Textbox" + (row * 3 + 3)].Text = (string)dr["KONTROL"];
    			row++;
    		}
    		con.Close();
    	}
    }
     

      Not: Orada top(10) diye kafadan ettim ben. Yan yana goruntuleneck max sayı ne ise o (o olmazsa, ornegin formda label1... label10 var, veritabanına eklenmiş bir parca kodunda 10'dan fazla sonuc varsa hata alirsiniz). Bu sekilde hata almazsanız, ama unutmayın 10'dan fazla ise haberiniz de olmayacak ilk 10 gösterilecek.

    Sanki normal, gridde gösterseniz daha esnek ve az yer kaplar gibi.

    Not2: "sen" diye hitap edince kompleks yapanlardan iseniz bastan bildirin lütfen.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.




    19 Haziran 2019 Çarşamba 14:38
    Yanıtlayıcı


  • evet mevcutlar fakat groupbox'ın içindeler

          O halde önce groupbox a ulaşmalısın this.controls kısımları aşağıdaki şekilde değiştirip denermisin : 

    this.groupBox1.Controls //yada groupBox1 yerine groupbox adın

         


    20 Haziran 2019 Perşembe 13:01

Tüm Yanıtlar

  • Sorun ne yazık ki anlasilmiyor. Resimleri sevmem ama biraz görsel ornek verebilir misin? Kod olarak tablo yapilarini, biraz ornek veri ve istediğin ciktiyi verirsen daha cok makbule geçer.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    18 Haziran 2019 Salı 12:44
    Yanıtlayıcı
  • hesabım daha onaylanmadığı için resim ve bağlantı paylaşamıyorum maalesef. ama resimler varmış gibi anlattım.

    https://i.hizliresim.com/qA4nV5.jpg

    üstte veri tabanındaki bilgiler var. Şimdi ben programımdan 562-07-OP032-01'i seçiyorum diyelim (Bunu parça ID'ye göre alıyorum). Seçtiğimde aşağıdaki yazı ile belirtilen yerlere 562-07-OP032-01 ile ilgili üstteki verilerde olan altalta sırayla 

    Ölçü Adı 

    Ölçüler

    Ölçü Aleti

    Kontrol

    alan adlarındaki verileri tüm çekecek. Yani aşağıdaki her sütun, seçilen parçanın idsine göre üstteki veritabanındaki bir satırı çekecek ve program sütunlara yerleştirecek.

    programda veri çekecek kısım ->  https://i.hizliresim.com/p5RV10.jpg

    ölçü adı label1 e

    ölçüler textbox1 e

    ölçü aleti textbox2 ye

    kontrol textbox3 e  çekilecek.

    Sonra 

    ölçü adı 2 label2 ye

    ölçüler textbox4 e

    ölçü aleti textbox5 e 

    kontrol textbox6 ya çekilecek. Eğer başka bilgileri de varsa onlarda diğer sütunlara çekilecek. Bunun gibi..

    Ben aşağıdaki gibi bir kod yazdım fakat if (dr.Read()) yapında ilk veriyi while(dr.Read()) yapınca son veriyi alıyorum. 

    void olculeriGoster()
            {
                pmiBaglanti.Open();
                SqlCommand olculerKomutu = new SqlCommand("...",pmiBaglanti);
                SqlDataReader dr = olculerKomutu.ExecuteReader();
                while (dr.Read())
                {
                    label1.Text = dr["OLCU_ADI"].ToString();
                    label2.Text = dr["OLCU_ADI"].ToString();
                }
                dr.Close();
                pmiBaglanti.Close();
            }

    ve label2 ye ne yazacağımı bilemedim. o yüzden o şekilde bıraktım sizde görün diye. Nasıl yazabilirim? Takıldım burada yapmam gerekiyor.



    • Düzenleyen Harun Yılmaz 19 Haziran 2019 Çarşamba 12:06 kodlar uyuşmuyordu
    19 Haziran 2019 Çarşamba 12:03
  • SPC mi yapmaya çalışıyorsun 
    19 Haziran 2019 Çarşamba 12:20
  • evet
    19 Haziran 2019 Çarşamba 12:23
  • while'dan hemen önce biz dizi oluşturun.

    Array elemanlar = new ArrayList();

    diye. while parantezleri içerisinde de label1.Text kodları yerine

    elemanlar.Add(dr["OLCU_ADI".ToString])

    şeklinde elemanları diziye aktarın. En son foreach döngüsüyle elemanları label'lara yazdırın...

    19 Haziran 2019 Çarşamba 12:39
  • Arraylist i tanımıyor Array var sadece
    19 Haziran 2019 Çarşamba 12:58
  • Arraylist i tanımıyor Array var sadece
    using System.Collections; tanımlayın en üste...
    19 Haziran 2019 Çarşamba 13:05
  • Bir çeşit "pivot", "crosstab" yapmissiniz. Aslinda datayi dogrudan bu sekilde almak mumkun ama kaynak SQL Server ve SQL server'da pivot yapmanın astari yuzunden pahalı ve karmaşık, performans getirisi de yok. Resimden anladigim kadarıyla o alanların data tipi varchar, degil ise casting yerine ToString() kullanabilirsiniz:

    void olculeriGoster(string parcaKodu)
    {
    	// boyle baglanti saklamayin, connection string saklayin
    	using (SqlConnection con = new SqlConnection(pmiBaglanti.ConnectionString)) 
    	using (SqlCommand cmd = new SqlCommand(@"select top(10) OLCU_ADI, OLCULER, OLCU_ALETI, KONTROL
    	from olcuTablosu
    	where PARCA_KODU = @parca", con))
    	{
    		cmd.Parameters.Add("@parca", SqlDbType.VarChar).Value = parcaKodu;
    		con.Open();
    	    var dr = cmd.ExecuteReader();
    		int row = 0;
    		while (dr.Read())
    		{
    			this.Controls["label" + (row + 1)].Text = (string)dr["OLCU_ADI"];
    			this.Controls["Textbox" + (row * 3 + 1)].Text = (string)dr["OLCULER"];
    			this.Controls["Textbox" + (row * 3 + 2)].Text = (string)dr["OLCU_ALETI"];
    			this.Controls["Textbox" + (row * 3 + 3)].Text = (string)dr["KONTROL"];
    			row++;
    		}
    		con.Close();
    	}
    }
     

      Not: Orada top(10) diye kafadan ettim ben. Yan yana goruntuleneck max sayı ne ise o (o olmazsa, ornegin formda label1... label10 var, veritabanına eklenmiş bir parca kodunda 10'dan fazla sonuc varsa hata alirsiniz). Bu sekilde hata almazsanız, ama unutmayın 10'dan fazla ise haberiniz de olmayacak ilk 10 gösterilecek.

    Sanki normal, gridde gösterseniz daha esnek ve az yer kaplar gibi.

    Not2: "sen" diye hitap edince kompleks yapanlardan iseniz bastan bildirin lütfen.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.




    19 Haziran 2019 Çarşamba 14:38
    Yanıtlayıcı
  • void olculeriGoster(string parcaKodu)
            {
                pmiBaglanti.Open();
                SqlCommand olculerKomutu = new SqlCommand("select PARCA_KODU, PARCA_ADI, OLCU_ADI, OLCULER, OLCU_ALETI, KONTROL from QUALITYINFO T1 join WORK T2 on T1.PARCA_ID = T2.ID where PARCA_ID='"+parcaId+"' ", pmiBaglanti);
                SqlDataReader dr = olculerKomutu.ExecuteReader();
    
                ArrayList elemanlar = new ArrayList();
    
                while (dr.Read())
                {
                    elemanlar.Add(dr["OLCU_ADI".ToString()]);
    
                    foreach (string eleman in elemanlar)
                    {
                        label1.Text = ;  ////// buralara ne yazmam 
                        label2.Text = ;  ///// gerektiğini bilmiyorum
                    }
                }
                dr.Close();
                pmiBaglanti.Close();


    20 Haziran 2019 Perşembe 05:56
  • Aşağıdaki gibi yaptığımda şöyle bir hata alıyorum çalıştırınca 

    System.Data.SqlClient.SqlException: 'The parameterized query '(@Parameter1 varchar(8000))select top(10) OLCU_ADI, OLCULER, OLC' expects the parameter '@Parameter1', which was not supplied.'

    void olculeriGoster(string parcaKodu)
    {
    
    using (SqlConnection con = new SqlConnection(pmiBaglanti.ConnectionString))
                using (SqlCommand cmd = new SqlCommand("select top(10) OLCU_ADI, OLCULER, OLCU_ALETI, KONTROL from QUALITYINFO where PARCA_KODU = '"+pk+"'", con))
                {
                    cmd.Parameters.Add(pk, SqlDbType.VarChar).Value = parcaKodu;
                    con.Open();
                    var dr = cmd.ExecuteReader();
                    int row = 0;
                    while (dr.Read())
                    {
                        this.Controls["label" + (row + 1)].Text = (string)dr["OLCU_ADI"];
                        this.Controls["Textbox" + (row * 3 + 1)].Text = (string)dr["OLCULER"];
                        this.Controls["Textbox" + (row * 3 + 2)].Text = (string)dr["OLCU_ALETI"];
                        this.Controls["Textbox" + (row * 3 + 3)].Text = (string)dr["KONTROL"];
                        row++;
                    }
                    con.Close();
                }
    
    }

    Sen diye hitap edebilirsiniz sorun yok  :)

    her parça değiştiğinde bilgileri de değişecek. O yüzden textboxlar daha iyi olmaz mı gridden?

    ve aşağıdakiler de tablo bilgileri


    20 Haziran 2019 Perşembe 06:02
  • ya da bilgileri görünmez bir data grid e çekip oradan

    olcuAdi= dataGridView1.CurrentRow.Cells[0].Value.ToString();
    olculer= dataGridView1.CurrentRow.Cells[1].Value.ToString();
    olcuAleti= dataGridView1.CurrentRow.Cells[2].Value.ToString();
    kontrol= dataGridView1.CurrentRow.Cells[3].Value.ToString();

    şeklinde değişkenlere atayıp label ve textboxlarda mı göstersem?

    sistemi yorar mı?

    20 Haziran 2019 Perşembe 07:39
  • Öneri için teşekkürler. Fakat LinQ ile ilgili hiç bir fikrim yok maalesef  :(
    20 Haziran 2019 Perşembe 07:57
  • linq şart değil döngülerlede yaparsın önemli olan mantık ölçüleri öyle satır satır kaydetme biraraya topla bir küme yarat puket yap bir text metne çevir alayını öyle sakla. String komutları var yani iki string arasındaki sayıyı bulmaya yarayan filan bu saylar tık diye çıkar listelenir bir sayfa dolusu karmaşa içinden anlatabildimmi her data her seferinde adres kaydı gibi kolaycı şekilde satır satır kaydedilmez sonradan analiz yaparak ulaşmak istediğin datalar satır satır kaydedilir ama senin ölçülerin tek tek bir kıymeti yok hepsi bir arada olunca bir bütün olarak bir değeri var sen dermisin yada amirin bana 22. ölçünün 3. örneklemesinin değerini bul ver hiç bir faydası yok tüm ölçüler bir arada tek bir bilgidir spc de bu yüzden onları bir blok olarak  paketle öyle sakla. Aksi halde sene sonunda 2000 SPC yaparsın bir o kadarda makine yeterlilik filan bir bakmışsın bir milyon ölçü kaydın olmuş ama bir kere bile orada sen bir kayıt aramayacaksın ne gerek var. Veri desenini iyi kurgulamak gerek yani kısacası her şey bir tablo ve satır sonra join ilişkisi olmaz bazen veri blokları paketleyip saklamak faydalıdır. 


    • Düzenleyen hakan1992 20 Haziran 2019 Perşembe 09:22
    20 Haziran 2019 Perşembe 09:19
  • Aşağıdaki gibi yaptığımda şöyle bir hata alıyorum çalıştırınca 

    System.Data.SqlClient.SqlException: 'The parameterized query '(@Parameter1 varchar(8000))select top(10) OLCU_ADI, OLCULER, OLC' expects the parameter '@Parameter1', which was not supplied.'

    ...

          Çetin Abinin paylaştığı kodu kullanmalıydın sen onu değiştirmişsin ve senden parametre bekliyor ancak sen doğrudan sql cümlesine string gömmüşsün :) karşılaştığın hata da zaten bunu söylüyor.Cevabı daha dikkatli inceleyin.

         Bilgileri gizlenmiş bir datagride çekmekte hiç iyi bir fikir değil.

    20 Haziran 2019 Perşembe 09:57
  • Bir çeşit "pivot", "crosstab" yapmissiniz. Aslinda datayi dogrudan bu sekilde almak mumkun ama kaynak SQL Server ve SQL server'da pivot yapmanın astari yuzunden pahalı ve karmaşık, performans getirisi de yok. Resimden anladigim kadarıyla o alanların data tipi varchar, degil ise casting yerine ToString() kullanabilirsiniz:

    void olculeriGoster(string parcaKodu)
    {
    	// boyle baglanti saklamayin, connection string saklayin
    	using (SqlConnection con = new SqlConnection(pmiBaglanti.ConnectionString)) 
    	using (SqlCommand cmd = new SqlCommand(@"select top(10) OLCU_ADI, OLCULER, OLCU_ALETI, KONTROL
    	from olcuTablosu
    	where PARCA_KODU = @parca", con))
    	{
    		cmd.Parameters.Add("@parca", SqlDbType.VarChar).Value = parcaKodu;
    		con.Open();
    	    var dr = cmd.ExecuteReader();
    		int row = 0;
    		while (dr.Read())
    		{
    			this.Controls["label" + (row + 1)].Text = (string)dr["OLCU_ADI"];
    			this.Controls["Textbox" + (row * 3 + 1)].Text = (string)dr["OLCULER"];
    			this.Controls["Textbox" + (row * 3 + 2)].Text = (string)dr["OLCU_ALETI"];
    			this.Controls["Textbox" + (row * 3 + 3)].Text = (string)dr["KONTROL"];
    			row++;
    		}
    		con.Close();
    	}
    }
     

      Not: Orada top(10) diye kafadan ettim ben. Yan yana goruntuleneck max sayı ne ise o (o olmazsa, ornegin formda label1... label10 var, veritabanına eklenmiş bir parca kodunda 10'dan fazla sonuc varsa hata alirsiniz). Bu sekilde hata almazsanız, ama unutmayın 10'dan fazla ise haberiniz de olmayacak ilk 10 gösterilecek.

    Sanki normal, gridde gösterseniz daha esnek ve az yer kaplar gibi.

    Not2: "sen" diye hitap edince kompleks yapanlardan iseniz bastan bildirin lütfen.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.




    Çalıştı çoook teşekkürler :) değerleri Messagebox a aktardığımda hepsini gösteriyor teker teker.

    fakat aşağıdaki kodda şu null hatasını alıyorum.

    System.NullReferenceException: 'Nesne başvurusu bir nesnenin örneğine ayarlanmadı.'


    this.Controls["label" + (row + 1)].Text = (string)dr["OLCU_ADI"];
                        this.Controls["Textbox" + (row * 3 + 1)].Text = (string)dr["OLCULER"];
                        this.Controls["Textbox" + (row * 3 + 2)].Text = (string)dr["OLCU_ALETI"];
                        this.Controls["Textbox" + (row * 3 + 3)].Text = (string)dr["KONTROL"];

    20 Haziran 2019 Perşembe 12:26
  • fakat aşağıdaki kodda şu null hatasını alıyorum.

    System.NullReferenceException: 'Nesne başvurusu bir nesnenin örneğine ayarlanmadı.'


    this.Controls["label" + (row + 1)].Text = (string)dr["OLCU_ADI"];
                        this.Controls["Textbox" + (row * 3 + 1)].Text = (string)dr["OLCULER"];
                        this.Controls["Textbox" + (row * 3 + 2)].Text = (string)dr["OLCU_ALETI"];
                        this.Controls["Textbox" + (row * 3 + 3)].Text = (string)dr["KONTROL"];

          label+(row+1) adıyla ulaşabileceğimiz bir label yada alt satırlara bakarsak Textbox+(row*3+1) adıyla ulaşabileceğimiz textboxlar mevcut mu ? mevcutsa bunlar bir groupbox yada bir panel içerisindeler mi ? Muhtemelen bu sebepten ötürü hata alıyorsun sanki.
    20 Haziran 2019 Perşembe 12:55
  • fakat aşağıdaki kodda şu null hatasını alıyorum.

    System.NullReferenceException: 'Nesne başvurusu bir nesnenin örneğine ayarlanmadı.'


    this.Controls["label" + (row + 1)].Text = (string)dr["OLCU_ADI"];
                        this.Controls["Textbox" + (row * 3 + 1)].Text = (string)dr["OLCULER"];
                        this.Controls["Textbox" + (row * 3 + 2)].Text = (string)dr["OLCU_ALETI"];
                        this.Controls["Textbox" + (row * 3 + 3)].Text = (string)dr["KONTROL"];

          label+(row+1) adıyla ulaşabileceğimiz bir label yada alt satırlara bakarsak Textbox+(row*3+1) adıyla ulaşabileceğimiz textboxlar mevcut mu ? mevcutsa bunlar bir groupbox yada bir panel içerisindeler mi ? Muhtemelen bu sebepten ötürü hata alıyorsun sanki.

    evet mevcutlar fakat groupbox'ın içindeler
    20 Haziran 2019 Perşembe 12:57


  • evet mevcutlar fakat groupbox'ın içindeler

          O halde önce groupbox a ulaşmalısın this.controls kısımları aşağıdaki şekilde değiştirip denermisin : 

    this.groupBox1.Controls //yada groupBox1 yerine groupbox adın

         


    20 Haziran 2019 Perşembe 13:01
  • teşekkür ederim sorunum çözüldü <3
    20 Haziran 2019 Perşembe 13:07