Veritabanı Filtreleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
EeCOMP
Üye
Mesajlar: 119
Kayıt: 13 Tem 2003 10:38
Konum: istanbul
İletişim:

Veritabanı Filtreleme

Mesaj gönderen EeCOMP »

selamlar benim bir problemim var
şimdi bir program yazıyorum programda tarih ve rün girip kaydediyorum tarihe göre ürünleri listeliyorum
şimdi
formda 3 adet edit var ben şöyle bir mantık kurdum ve filtreleme yaptım

if (edit1.text='') and (edit2.text='') then begin

form2.Table1.Filter := 'Yil='''+Edit3.Text+'''';
form2.Table1.Filtered := True;
form2.Table1.First;
While Not form2.Table1.EOF do
Begin
form8.dbgrid1.update;
form2.Table1.Next;
End;
end;
if (edit1.text='') then begin
form2.Table1.Filter := '(Ay='''+edit2.text+''') and (Yil='''+edit3.Text+''')';
form2.Table1.Filtered := True;
form2.Table1.First;
While Not form2.Table1.EOF do
Begin
form8.dbgrid1.update;
form2.Table1.Next;
End;
end;



şimdi ay ve yıl girdiğimde o yılın o ayına ait kayıtları çok rahat listeliyor fakat sadece yıl girip sadece o yıla ait kayıtları görüntülemek istediğimde

"is not a valid floating point value

hatası veriyo

bir türlü işin içinden çıkamıyorum kodları aynı neden hem ay hem yıl girince sorun yokta sadece yıl girince hata veriyo tersi olsa normal diycem ama bu beni baya şaşırttı işin içinden çıkamadım

yardım ederseniz çok sevinirim

şimdiden çok teşekkürler
Kullanıcı avatarı
FXERKAN
Üye
Mesajlar: 178
Kayıt: 26 Tem 2003 11:06
Konum: Sivas - Konya
İletişim:

Mesaj gönderen FXERKAN »

var
flt : string;
edit3 yil için dedim :-)

if edit3.text <>'' then
begin
flt := 'Yil=' + quatedstr(edit3.text);
end;


daha sonrada

flt := flt + 'OR Ay=' + quotedstr(edit2.text);

gibi birşey iş görür sanırım. duruma göre 'OR'u 'AND' de yapabilirsin

buda olmazsa ki olur :-)

her editin dolu yada boş olmasına göre sadece dolu olanlara uygun filitrelemeyi yaptır
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Öncelikle tabiki sorgulamanızı filtreleme ile degil de Query ile yapmanızı hararetle tavsiye ederim...

Koddaki hata AY degeri girmediginiz halde tablonun filter ozelligine AY='' degeri atanmakta. Bunu Filtered:=True satiridnan hemen önce
Shomessage(form2.Table1.Filtered);
diyerek görebilirsiniz.

Konu ile ilgili size yardimci olacak mesajlar aşağıdaki linklerde var.

viewtopic.php?t=468
viewtopic.php?t=1363
viewtopic.php?t=1549
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@EeCOMP Selam...

- Eklemek istediğim bir hususu takiben önerimi yapıcam...

- Programlarınızı yazarken Delphi kod yazım format kurallarına uyarsanız, kodlarınız hem kendiniz hem de bizim için daha anlaşılır olur... :idea:

- Bu foruma da kod gönderirken, açtığınız başlık altında yazdığınız kodunuzu mouse ile blok içine alıp, yukarda yardımcı fonksiyon web butonlarından Code butonuna basarsanız, aynı yazdığınız şekilde formatlı olarak bizim de görmemizi sağlarsınız... :idea:

:arrow: Yazdığınız kod aynen şöyle...

Kod: Tümünü seç

  if (edit1.text='') and (edit2.text='') then
  begin
    form2.Table1.Filter := 'Yil='''+Edit3.Text+'''';
    form2.Table1.Filtered := True;
    form2.Table1.First;
    While Not form2.Table1.EOF do
    Begin
      form8.dbgrid1.update;
      form2.Table1.Next;
    End;
  end;

  if (edit1.text='') then
  begin
    form2.Table1.Filter := '(Ay='''+edit2.text+''') and (Yil='''+edit3.Text+''')';
    form2.Table1.Filtered := True;
    form2.Table1.First;
    While Not form2.Table1.EOF do
    Begin
      form8.dbgrid1.update;
      form2.Table1.Next;
    End;
  end;
:arrow: :?: İlk olarak sormak istediğim nokta neden While döngüsü içinde form8.dbgrid1.update; gibi bir şeye ihtiyaç duyduğunuz ??? Döngü kadar Update neye yarıyor ?

:arrow: :?: form8.dbgrid1'in DataSourrce'unun gösterge Tablosu; form2.Table1 değil mi ?

:arrow: :?: Bu doğruysa zaten Filter ettiğiniz anda kendiliğinden form8.dbgrid1 güncellenecektir...

:arrow: Neyse yukardakileri geçelim... :!:

:arrow: Burada koddan anlaşıldığı kadarıyla...

Kod: Tümünü seç

Yil = Edit3
Ay  = Edit2
Gun = Edit1
:arrow: Ay ve Yıl girdiğinizde Edit2ve Edit3 her ikisinin de girişi yapılmış Gun yani Edit1 girişi yapılmamışsa birinci IF bloğu AND olduğundan devre dışı, ikinci ikinci IF bloğu çalışır durumda oluyor... (Ay ve Yıl girince Sorun Yok dediğinize göre ikinci IF doğru çalışıyor diyebiliriz.)

:arrow: Sadece Yıl girildiği taktirde (Edit1 ve Edit2 boş olacaktır) yukardaki her iki IF bloğu da çalışır durumda olacaktır... Bunun gereğini anlayamadığımdan size bırakıyorum... :?: :?: :?:

:arrow: Bu noktada hatanızı; prensipte ikinci IF bloğunu sorunsuz kabul ettiğimiz için birincide arayacaksınız...

:arrow: :idea: Çok önemli bir not... Daha önce bir kaç başlıkta da bildirmiştim ama burada yeniden tekrar etmek istiyorum...

:idea: Kullanıcı girişi yapılan yerlerde, kullanıcının boşluk girme ihtimaline karşı her zaman bu IF'lerden önce Trim fonksiyonuyla boşluk kontrolü yapın....

Kod: Tümünü seç

   Edit1.Text := Trim(Edit1.Text);
   Edit2.Text := Trim(Edit2.Text);
   Edit3.Text := Trim(Edit3.Text);
:idea: Bu sayede kullanıcının yaptığı girişlerde sağdaki ve soldaki boşluk ve Text dışı yabancı karakterlerden kurtulunmuş olur...

:idea: Yani... Edit1 içinde bir adet boşluk varsa, yukardaki yaptığınız tektırnak aç-kapa şeklindeki kontrolünüz devre dışı kalacaktır... Bir boşluk bile giriş yapılmış kabul edilir...

:idea: Ek-2 @fahrettin'e katılıyorum... SQL ile sorgulamaya alışırsanız tablonuz her zaman açık kalmaz ve program dışı etkilerden doğacak zararlara maruz kalmaz... (elektrik kesintisi, system reset vs.)
Resim
Resim ....Resim
EeCOMP
Üye
Mesajlar: 119
Kayıt: 13 Tem 2003 10:38
Konum: istanbul
İletişim:

Mesaj gönderen EeCOMP »

çok teşekkür ederim mrmcop hepinize çok teşekkür ederim sorunum çözüldü dediğin gibi iki ifede girdiğinden dolayı o hatayı veriyormuş farklı bir if mantığı kurdum sorunum çözüldü tekrar teşekkürler arkadaslar vermiş olduğunuz fikir ve önerileriniz için çok teşekkür ediyorum fakat ben sql ve query bilmiyorum paradox kullanıyorum
hepinize tekrardan çok teşekkürler
kendinize iyi bakın
Cevapla