lostyazilim
tr.link

C# Hep aynı değeri çekiyor?

18 Mesajlar 2.509 Okunma
lstbozum
tr.link

Roycolt Roycolt Let's begin! Kullanıcı
  • Üyelik 27.04.2013
  • Yaş/Cinsiyet 32 / E
  • Meslek Freelance
  • Konum İstanbul Avrupa
  • Ad Soyad A** K**
  • Mesajlar 1304
  • Beğeniler 252 / 380
  • Ticaret 28, (%100)
Merhaba arkadaşlar, yazmakta olduğum basit bir program var. Ancak access üzerinde oluşturduğum tablomdan hep aynı değeri çekiyor. 3 soru var ama sürekli birinci soruyu label'a yansıtıyor. Bunun çözümünü nasıl sağlayabilirim?

Select * from soru where dersID=1 order by RND()

Tablolarım ve programım ise;





 

 

wmaraci
reklam

yetkilibiri yetkilibiri Yazılım Uzmanı Kullanıcı
  • Üyelik 28.05.2017
  • Yaş/Cinsiyet 33 / E
  • Meslek Yazılım Uzmanı
  • Konum İstanbul Avrupa
  • Ad Soyad E** Y**
  • Mesajlar 107
  • Beğeniler 41 / 41
  • Ticaret 2, (%100)
Access DB için sorguyu böyle düzenle kardeşim;


SELECT TOP 1 * FROM soru WHERE dersID=1 ORDER BY rnd(soruID)
 

 

Roycolt Roycolt Let's begin! Kullanıcı
  • Üyelik 27.04.2013
  • Yaş/Cinsiyet 32 / E
  • Meslek Freelance
  • Konum İstanbul Avrupa
  • Ad Soyad A** K**
  • Mesajlar 1304
  • Beğeniler 252 / 380
  • Ticaret 28, (%100)
yetkilibiri Hocam teşekkürler sorun çözüldü. Ancak butona tekrar tıkladığımda işlem yapmıyor. Yani diğer soruyu getirmiyor. Bunu nasıl çözebiliriz?
 

 

yetkilibiri yetkilibiri Yazılım Uzmanı Kullanıcı
  • Üyelik 28.05.2017
  • Yaş/Cinsiyet 33 / E
  • Meslek Yazılım Uzmanı
  • Konum İstanbul Avrupa
  • Ad Soyad E** Y**
  • Mesajlar 107
  • Beğeniler 41 / 41
  • Ticaret 2, (%100)
Farklı bir şeyden kaynaklı olabilir. Butonun altındaki kodu paylaşırsan bir bakalım..
 

 

wmaraci
wmaraci

Roycolt Roycolt Let's begin! Kullanıcı
  • Üyelik 27.04.2013
  • Yaş/Cinsiyet 32 / E
  • Meslek Freelance
  • Konum İstanbul Avrupa
  • Ad Soyad A** K**
  • Mesajlar 1304
  • Beğeniler 252 / 380
  • Ticaret 28, (%100)
yetkilibiri Buyrun hocam;

sayaç++;
lblsoru.Text = sayaç.ToString();
baglan.Open();
OleDbCommand komut = new OleDbCommand("SELECT TOP 1 * FROM soru WHERE dersID=1 ORDER BY rnd(soruID)", baglan);
OleDbDataReader oku = komut.ExecuteReader();
while (oku.Read())
{
label1.Text = (oku["soruBaslik"].ToString());
radioButton1.Text = (oku["A"].ToString());
radioButton2.Text = (oku["B"].ToString());
radioButton3.Text = (oku["C"].ToString());
radioButton4.Text = (oku["D"].ToString());
}
baglan.Close();
 

 

yetkilibiri yetkilibiri Yazılım Uzmanı Kullanıcı
  • Üyelik 28.05.2017
  • Yaş/Cinsiyet 33 / E
  • Meslek Yazılım Uzmanı
  • Konum İstanbul Avrupa
  • Ad Soyad E** Y**
  • Mesajlar 107
  • Beğeniler 41 / 41
  • Ticaret 2, (%100)
Bağlantıyı program açılırken aç kapatana kadar açık kalsın.
Yoksa her butona bastığında yeni bağlantı oluşturur.

Form Load Eventine taşı: baglan.Open();
Form Closing Eventine taşı: baglan.Close();

baglan değişkenini de butonun altında tanımladıysan globale alman gerekir.
 

 

Roycolt Roycolt Let's begin! Kullanıcı
  • Üyelik 27.04.2013
  • Yaş/Cinsiyet 32 / E
  • Meslek Freelance
  • Konum İstanbul Avrupa
  • Ad Soyad A** K**
  • Mesajlar 1304
  • Beğeniler 252 / 380
  • Ticaret 28, (%100)
yetkilibiri Dünden beri uğraşıyorum yok çözemedim hocam. Butona tekrar tıklandığında soruyu çekmiyor. Ayrıca diğer butona kodları eklememe rağmen onda hiç işlem yapmıyor.
 

 

species species Fazla tevazunun sonu kötü Kullanıcı
  • Üyelik 08.09.2015
  • Yaş/Cinsiyet 39 / E
  • Meslek Yazılım
  • Konum İstanbul Anadolu
  • Ad Soyad R** D**
  • Mesajlar 165
  • Beğeniler 17 / 41
  • Ticaret 10, (%100)
Her butona tıkladığında bir sonraki soruyu çekmesini istiyorsan: integer bir değer oluştur değeri 0 olsun. foreach ile 13 içerisinde dön. Dönerken her ferinde int olarak belirlediğin değer +1 ekle. foreach içerisinde yazdığın select kodunda dersID=i olarak tanımla.

Yazmayı dene istersen. Olmazsa hazırladığın kodu yaz tekrar bakalım. Kolay gelsin.
 

 

Kurumsal Firmaların Reklam Platformu https://www.1yandaki.com/

yetkilibiri yetkilibiri Yazılım Uzmanı Kullanıcı
  • Üyelik 28.05.2017
  • Yaş/Cinsiyet 33 / E
  • Meslek Yazılım Uzmanı
  • Konum İstanbul Avrupa
  • Ad Soyad E** Y**
  • Mesajlar 107
  • Beğeniler 41 / 41
  • Ticaret 2, (%100)
Roycolt Bir yerde hata yapıyorsundur. Kodlarının tamamını görmeden bir şey söylemek zor.
Ama şöyle bir yöntem de deneyebilirsin;

İlgili dersID ye ait SoruID leri programın başında tek seferde çek DB den int bir dizeye doldur.
SELECT soruID FROM soru WHERE dersID=1
gibi..

Daha sonra bu int dizeden istediğin gibi Random SoruID alıp soruları getirmek için kullanabilirsin.

SELECT TOP 1 * FROM soru WHERE dersID=1 AND soruID = {int diziden aldığın yeni değer}
 

 

Roycolt Roycolt Let's begin! Kullanıcı
  • Üyelik 27.04.2013
  • Yaş/Cinsiyet 32 / E
  • Meslek Freelance
  • Konum İstanbul Avrupa
  • Ad Soyad A** K**
  • Mesajlar 1304
  • Beğeniler 252 / 380
  • Ticaret 28, (%100)
yetkilibiri Hocam kodların tamamı aşşağıdaki gibidir. Aynı şekilde diğer butona da bu kodları ekledim. Tabloda bir sıkıntı olabilir mi diye düşünmeye başladım artık :)

Tablo Ayarları;
https://prnt.sc/fljved
https://prnt.sc/fljvh5
https://prnt.sc/fljvkn

Kodlar;

public Form1()
{
InitializeComponent();
}
int sayaç = 0;
OleDbConnection baglan = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database3.accdb");
private void button1_Click(object sender, EventArgs e)
{
sayaç++;
lblsoru.Text = sayaç.ToString();
baglan.Open();
OleDbCommand komut = new OleDbCommand("SELECT TOP 1 * FROM soru WHERE dersID=1 ORDER BY rnd(soruID)", baglan);
OleDbDataReader oku = komut.ExecuteReader();
while (oku.Read())
{
label1.Text = (oku["soruBaslik"].ToString());
radioButton1.Text = (oku["A"].ToString());
radioButton2.Text = (oku["B"].ToString());
radioButton3.Text = (oku["C"].ToString());
radioButton4.Text = (oku["D"].ToString());
}
baglan.Close();
}
 

 

wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al