Yazar |
|
safter
Kayıt: 18.04.2006 |
|
OleDbCommand db_komut1 = new OleDbCommand("SELECT min(id) FROM eleman", db_baglanti);
db_komut.ExecuteNonQuery();
OleDbCommand db_komut2 = new OleDbCommand("SELECT max(id) FROM eleman", db_baglanti);
db_komut.ExecuteNonQuery();
Random rasgele = new Random();
id = rasgele.Next(db_komut1, db_komut2);
veritabanından en büyük ve en kücük idleri cekiyorum ve bu degerler arasında TEKRARSIZ bir sayi elde etmek istiyorum yukarıdaki kod dogru mu ? bide tekrarsız olması için ne eklemem lazım ? yardımcı olurmusunuz?
q
|
|
Yazar |
|
omergok
kenderuntanbul
Kayıt: 21.02.2007 |
|
safter işin kod kısmına girmeyim ama mantık olarak yapman gerekeni söyleyeyim.
ilk olarak sadece o iki sayı arasından rastgele sayı üretmen yanlış çünkü aradaki id nolarından birisi ilerde silinmiş/silinecek olabilir. O yüzden tüm id numaralarını alıp bir diziye atman lazım. Bu işlemden sonra rastgele seçimi bu dizinin içinden yapacaksın. çekilen sonucu da yapmak istediğin işlemi yaptıktan sonra diziden çıkartacaksın. döngü dizinin oluştuğu yerden sonra olacak. sql işlemini döngü içine alma sakın dizi sürekli başa sarar. diziden çektiğin elemanları tek tek çıkardıktan sonra mesela do-while kullanıyorsan döngü için (ki muhtemelen öyle olacak) şart kısmında da dizinin eleman sayısını kontrol edersin. 0 olduğu zaman döngüyü kırarsın.
|
|
Yazar |
|
aliozkn
Manisa
Kayıt: 13.04.2006 |
|
random sayı işini sql le de yapabilirsin
http://www.petefreitag.com/item/466.cfm
|
|
Yazar |
|
aliprinter
İstanbul
Kayıt: 12.02.2006 |
|
Öncelikle Ömer'in anlattığı yola katılıyorum. Başka bir yol aklıma geldi bunu da düşünebilirsin:
Anladığım kadarıyla Access veritabanı kullanak yapıyorsun. Değilse ona göre cevap yazayım.
OleDBCommand kullanmandan dolayı Access üzerinden anlatıyorum.
Ömer'in de dediği gibi ID baz alarak kayıt istemek yanlış olur.
Aslında tek bir sql cümlesiyle ölümcül darbeyi indirebilirsin:
OleDbCommand db_komut = new OleDbCommand("SELECT TOP 10 id FROM eleman ORDER BY Rnd(id)", db_baglanti);
db_komut'u çalıştırıp okuttuğun zaman her seferinde farklı 10 kayıt seçecektir sana.
(id sütunundan random sayı türeterek ona göre sıralama yapmasını ve ilk 10 kaydı getirmesini istiyoruz sql kodunda.)
SQL Server ya da diğer veri tabanı sistemlerinde benzer şekilde çözüm mevcut...
|
|
Yazar |
|
omergok
kenderuntanbul
Kayıt: 21.02.2007 |
|
SQL içinde böyle bir güzellik olduğunu bilmiyordum açıkçası (: Bunu öğrendiğim iyi oldu, hatta baya baya iyi oldu çünkü bir konuyu kara kara düşünüyordum artık sorunumun büyük bir kısmı halloldu (: teşekkürler hepinize (:
|
|
Yazar |
|
safter
Kayıt: 18.04.2006 |
|
aliprinter yazdi | Öncelikle Ömer'in anlattığı yola katılıyorum. Başka bir yol aklıma geldi bunu da düşünebilirsin:
Anladığım kadarıyla Access veritabanı kullanak yapıyorsun. Değilse ona göre cevap yazayım.
OleDBCommand kullanmandan dolayı Access üzerinden anlatıyorum.
Ömer'in de dediği gibi ID baz alarak kayıt istemek yanlış olur.
Aslında tek bir sql cümlesiyle ölümcül darbeyi indirebilirsin:
OleDbCommand db_komut = new OleDbCommand("SELECT TOP 10 id FROM eleman ORDER BY Rnd(id)", db_baglanti);
db_komut'u çalıştırıp okuttuğun zaman her seferinde farklı 10 kayıt seçecektir sana.
(id sütunundan random sayı türeterek ona göre sıralama yapmasını ve ilk 10 kaydı getirmesini istiyoruz sql kodunda.)
SQL Server ya da diğer veri tabanı sistemlerinde benzer şekilde çözüm mevcut... |
anladım peki 10 kayıt degilde bir değişkendeki değer kadar kayıtı almak istiyorsam hatta bu seçilen kayıtlar üzerinde UPDATE yapmak istiyorsam nasıl kullanacagım bu nu .. çok karıştı kafam kusura bakma printer :D yardımcı olursan cok sevinirim
q
|
|
Yazar |
|
safter
Kayıt: 18.04.2006 |
|
ben kodu böyle kullana bilirmiyim? onu demek istedim :)
OleDbCommand db_komut = new OleDbCommand("UPDATE TOP "'+pazartesi+'" id FROM eleman ORDER BY Rnd(id) SET gun_1 = 'OFF', gun_8 = 'OFF' ", db_baglanti);
:):) cok mu ütopik oldum ne :D
q
|
|
Yazar |
|
safter
Kayıt: 18.04.2006 |
|
bu arada pazartesi orada bir rakam :) değişken isimlerini biraz uzun tutuyorumda :)
q
|
|
Yazar |
|
aliprinter
İstanbul
Kayıt: 12.02.2006 |
|
Kullanabilirsin...
Düzeltme: Demin hızlı bir bakış ataracak cevap yazdım. Kullanabilirsin derken TOP 10 yerine
TOP " + pazartesi + "
şeklinde kullanabilirsin demek istedim. (Tek tırnağa gerek yok ayrıyetten)
UPDATE yapmak istiyorsan şöyle bir sql olmalı:
OleDbCommand db_komut = new OleDbCommand("UPDATE elemean SET guncelleneceksutunadi='yenideger' WHERE id IN (SELECT TOP " + pazartesi + " id FROM eleman ORDER BY Rnd(id)", db_baglanti);
|
|
|
|
-
Del.icio.us
-
Digg
-
Facebook
-
Furl
-
Google
-
Blink
-
Simpy
-
Spurl
-
Y! MyWeb
|
|
| | | | | |