Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Database random
#1
Merhaba; databaseden rastgele 2 adet veri çekeceğim, 1. veriyi çekmede sorun yok 2. veriyi nasıl çekebilirim?

  TimerListele.Enabled := False;
  With Form1.QSip do
  begin
    Connection := Form1.FDConnection;
    Close;
    SQL.Clear;
    SQL.Add('Select * From KALIPLAR Where KALIP=:KP Order By Rand(ID) Limit 2');
    ParamByName('KP').AsInteger := 1;
    Prepared := True;
    Open;
    if Not IsEmpty then
    begin
      LabelLeft.Text := FieldByName('KALIP').AsString; // 1. veri

       LabelRight.Text := FieldByName('KALIP').AsString;// 2. veri

    end
Hayat bazen güzel olabiliyor.
Cevapla
#2
(05-03-2018, Saat: 19:38)Dostk Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba; databaseden rastgele 2 adet veri çekeceğim, 1. veriyi çekmede sorun yok 2. veriyi nasıl çekebilirim?

  TimerListele.Enabled := False;
  With Form1.QSip do
  begin
    Connection := Form1.FDConnection;
    Close;
    SQL.Clear;
    SQL.Add('Select * From KALIPLAR Where KALIP=:KP Order By Rand(ID) Limit 2');
    ParamByName('KP').AsInteger := 1;
    Prepared := True;
    Open;
    if Not IsEmpty then
    begin
      LabelLeft.Text := FieldByName('KALIP').AsString; // 1. veri

       LabelRight.Text := FieldByName('KALIP').AsString;// 2. veri

    end

  TimerListele.Enabled := False;
  With Form1.QSip do
  begin
    Connection := Form1.FDConnection;
    Close;
    SQL.Clear;
    SQL.Add('Select * From KALIPLAR Where KALIP=:KP Order By UUID() Limit 2');
    ParamByName('KP').AsInteger := 1;
    Prepared := True;
    Open;
    if Not IsEmpty then
    begin
      LabelLeft.Text := FieldByName('KALIP').AsString; // 1. veri
      LabelRight.Text := FieldByName('KALIP').AsString;// 2. veri
    end

Hangi veritabanını kullandığınızı yazmamışsınız. MySQL için UUID(), MS-SQL Server için NEWID(), Oracle için SYS_GUID() fonksiyonunu kullanabilirsiniz.
WWW
Cevapla
#3
Sorun yanlış anlaşıldı sanırım, veritanabı olarak olarak sqlite kullanıyorum.

Rastgele bir kayıt alabiliyorum, ikinci kayıttı aynı kodda nasıl alabilirim?
Hayat bazen güzel olabiliyor.
Cevapla
#4
Merhaba,
SQLite veri tabanında limit ile belirlenen kayıt sayısının başlangıç değeri OffSet ifadesi ile bildirilir. 
Limit ile 2 kayıt istediğinizi bildirmişsiniz. Offset ile de kayıt başlangıç numarasını vermelisiniz. Elde edilen kayıt kümesindeki ilk kaydın offset'ı sıfırdır. Hangi kayıttan itibaren iki kayıt almak istediğinizi belirtmeniz yeterli olacaktır.
Ör. Limit 2 offset 0 ifadesi ilk iki kaydı DataSet olarak döndürecektir.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
(05-03-2018, Saat: 21:16)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
SQLite veri tabanında limit ile belirlenen kayıt sayısının başlangıç değeri OffSet ifadesi ile bildirilir. 
Limit ile 2 kayıt istediğinizi bildirmişsiniz. Offset ile de kayıt başlangıç numarasını vermelisiniz. Elde edilen kayıt kümesindeki ilk kaydın offset'ı sıfırdır. Hangi kayıttan itibaren iki kayıt almak istediğinizi belirtmeniz yeterli olacaktır.
Ör. Limit 2 offset 0 ifadesi ilk iki kaydı DataSet olarak döndürecektir.

Fesih bey, ilginize teşekkür ederim, biraz daha açıklayıcı bilgi verebilir misiniz?
Hayat bazen güzel olabiliyor.
Cevapla
#6
(06-03-2018, Saat: 16:01)Dostk Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(05-03-2018, Saat: 21:16)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
SQLite veri tabanında limit ile belirlenen kayıt sayısının başlangıç değeri OffSet ifadeyi ile bildirilir. 
Limit ile 2 kayıt istediğinizi bildirmişsiniz. Offset ile de kayıt başlangıç numarasını vermelisiniz. Elde edilen kayıt kümesindeki ilk kaydın offset'ı sıfırdır. Hangi kayıttan itibaren iki kayıt almak istediğinizi belirtmeniz yeterli olacaktır.
Ör. Limit 2 offset 0 ifadesi ilk iki kaydı DataSet olarak döndürecektir.

Fesih bey, ilginize teşekkür ederim, biraz daha açıklayıcı bilgi verebilir misiniz?

Merhaba,
Random ile birlikte Limit 2 kullandığınızda zaten iki kayıt elde etmiş olacaksınız. Kullanım şekli aşağıdaki gibi olmalıdır. 
Select * From KALIPLAR Where KALIP=:KP ORDER BY RANDOM() LIMIT 2
Where satırında vermiş olduğunuz şart sonucunda iki veya daha fazla kayıt elde edilmesi durumunda, iki kayıt listelenecektir.
(Bu satırda şartınız yalnızca bir kayıt içeriyorsa, tabi ki tek bir kayıt listelersiniz. )

Kod kısmı da aşağıdaki gibi olabilir.
  QSip.SQL.Text :=
   'Select * From KALIPLAR Where KALIP=:KP ORDER BY RANDOM() LIMIT 2';
 QSip.ParamByName('KP').AsInteger := 1;
 QSip.Open;
 LabelLeft.Text := QSip.FieldByName('KALIP').AsString;
 QSip.Next;
 LabelRight.Text := QSip.FieldByName('KALIP').AsString;
 QSip.Close;
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#7
(06-03-2018, Saat: 16:01)Dostk Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(05-03-2018, Saat: 21:16)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
SQLite veri tabanında limit ile belirlenen kayıt sayısının başlangıç değeri OffSet ifadeyi ile bildirilir. 
Limit ile 2 kayıt istediğinizi bildirmişsiniz. Offset ile de kayıt başlangıç numarasını vermelisiniz. Elde edilen kayıt kümesindeki ilk kaydın offset'ı sıfırdır. Hangi kayıttan itibaren iki kayıt almak istediğinizi belirtmeniz yeterli olacaktır.
Ör. Limit 2 offset 0 ifadesi ilk iki kaydı DataSet olarak döndürecektir.

Fesih bey, ilginize teşekkür ederim, biraz daha açıklayıcı bilgi verebilir misiniz?



 
   begin
      while Not Eof do
      begin
        Next;
        if FieldByName('ID').AsInteger Mod 2 = 0 then
        begin
          LabelLeft.Text := FieldByName('ID').AsString;
        end
        else
        begin
          LabelRight.Text := FieldByName('ID').AsString;
        end;
Cevapla
#8
merhaba;

Mod 2 = 0 ile denemeler yapmıştım ama bir türlü doğru sonucu alamamıştım.
sanırım SQL.Add('Select * From KALIPLAR Where KALIP=:KP Order By Rand(ID) Limit 2'); burada hata yapıyordum.


Teşekkür ederim.
Hayat bazen güzel olabiliyor.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Database tasarım önerisi klavye 4 158 31-07-2018, Saat: 18:15
Son Yorum: klavye
  Mysql database bağlantısı serhat 3 461 31-03-2018, Saat: 08:36
Son Yorum: klavye
  Birden fazla database oluşturma dilo 2 375 28-11-2017, Saat: 16:54
Son Yorum: Halil Han Badem
  Random(ListBox.Count); çalışmıyor Hashshashin 2 364 27-11-2017, Saat: 22:22
Son Yorum: Hashshashin



Konuyu Okuyanlar: 1 Ziyaretçi