Delphi Can
Doğru sonuca ulaşma - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Doğru sonuca ulaşma (/showthread.php?tid=7751)



Doğru sonuca ulaşma - Mete - 05-06-2024

Selamlar,

Sqlite veri tabanında, DERINLIK alanı REAL 11,3 gibi küsürlü sayılar oluyor. Alttaki iki kodun mantığı aynı fakat sonuçlar neden faklı çıkıyor?


Bu kodlarla doğu sonuç alıyorum:
 
   sFDQ.Active := False;
    sFDQ.Close;
    sFDQ.SQL.Clear;
    sFDQ.SQL.Add('Select * From Havuz Where Tarih=: Tarih and Alerter=: Aler');
    sFDQ.ParamByName('Tarih').AsDate := Date;
    sFDQ.ParamByName('Aler').AsString := 'Alerter No';
    sFDQ.Prepared := True;
    sFDQ.Open;
    while Not sFDQ.Eof do
    begin
      Ml := Trunc(StrToFloat(sFDQ.FieldByName('Ml').AsString)) >= sMl;
      Derinlik := Trunc(StrToFloat(sFDQ.FieldByName('Derinlik').AsString)) <= sDerinlik;

      if (Derinlik) and (Ml) then
      begin
        MemoAlerter.Lines.Add('Ml: ' + sFDQ.FieldByName('Ml').AsString);
        MemoAlerter.Lines.Add(StringOfChar('-', 104));
      end;
      sFDQ.Next;
    end;


 Bu kodlarda genelde eksik veri alıyorum:
 
   sFDQ.Active := False;
    sFDQ.Close;
    sFDQ.SQL.Clear;
    sFDQ.SQL.Add('Select * From Havuz Where Tarih=: Tarih and Derinlik<=: Deri and Ml>=: Ml and Alerter=: Aler');
    sFDQ.ParamByName('Tarih').AsDate := Date;
    sFDQ.ParamByName('Deri').AsFloat := sDerinlik;
    sFDQ.ParamByName('Ml').AsFloat := sMl;
    sFDQ.ParamByName('Aler').AsString := 'Alerter No'; (DÜZETTTİM)
    sFDQ.Prepared := True;
    sFDQ.Open;
    while Not sFDQ.Eof do
    begin
      MemoAlerter.Lines.Add('Ml: ' + sFDQ.FieldByName('Ml').AsString);
      MemoAlerter.Lines.Add(StringOfChar('-', 104));
      sFDQ.Next;
    end;



Doğru sonuca ulaşma - mrmarman - 05-06-2024

İlk göze çarpan "Aler" parametresi ilk sql ile ikinci sql arasında farklı / ters yazılı olabilir mi?

Alerter No
No Alerter


Cvp: Doğru sonuca ulaşma - Mete - 06-06-2024

(05-06-2024, Saat: 22:57)mrmarman Adlı Kullanıcıdan Alıntı: İlk göze çarpan "Aler" parametresi ilk sql ile ikinci sql arasında farklı / ters yazılı olabilir mi?

Alerter No
No Alerter





Alerter No İlgili bir durum değil. AsFloat ilgili bir sorun olduğunu düşünüyorum.
Alerter No kısmını 2 gün önce fark ettim ve düzelttim. Yedeklemeden alıp buraya eklerken Alerter No kısmı atlamışım.


Doğru sonuca ulaşma - 3ddark - 06-06-2024

Doğru dediğin yerde sayıyı trunc ile integer yuvarlayarak işlem yapıyorsun. Hatalı dediğin yerde eğer sayılar virgülü ise ki öyle görünüyor. Bu nedenle aynı sonucu vermez.


Cvp: Doğru sonuca ulaşma - Mete - 06-06-2024

(06-06-2024, Saat: 00:31)Mete Adlı Kullanıcıdan Alıntı:
(05-06-2024, Saat: 22:57)mrmarman Adlı Kullanıcıdan Alıntı: İlk göze çarpan "Aler" parametresi ilk sql ile ikinci sql arasında farklı / ters yazılı olabilir mi?

Alerter No
No Alerter





Alerter No İlgili bir durum değil. AsFloat ilgili bir sorun olduğunu düşünüyorum.
Alerter No kısmını 2 gün önce fark ettim ve düzelttim. Yedeklemeden alıp buraya eklerken Alerter No kısmı atlamışım.



Bu şekilde doğru sonuçları alabildim.
   
 sFDQ.Active := False;
    sFDQ.Close;
    sFDQ.SQL.Clear;
    sFDQ.SQL.Add('Select * From Havuz Where Tarih=:Tarih and Alerter=:Aler');
    sFDQ.ParamByName('Tarih').AsDate := Date;
    sFDQ.ParamByName('Aler').AsString := 'Alerter No';
    sFDQ.Prepared := True;
    sFDQ.Open;
    while Not sFDQ.Eof do
    begin
      cMl := Trunc(StrToFloat(sFDQ.FieldByName('Ml').AsString));
      cDerinlik := Trunc(StrToFloat(sFDQ.FieldByName('Derinlik').AsString));
      if (cMl >= sMl) and (cDerinlik <= sDerinlik) then
      begin
        MemoAlerter.Lines.Add('Ml: ' + sFDQ.FieldByName('Ml').AsString);