Delphi Can

Orjinalini görmek için tıklayınız: Doğru sonuca ulaşma
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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;
İlk göze çarpan "Aler" parametresi ilk sql ile ikinci sql arasında farklı / ters yazılı olabilir mi?

Alerter No
No Alerter
(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 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.
(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);