Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[ÇÖZÜLDÜ] Birden fazla alanı kullanarak arama yapmak?
#1
Merhabalar
Bir Tabloda 5 tane alanım var ve hepsinde arama yapmam gerekiyor. Forma 5 tane edit ekleyerek arama yapmak için dizayn ettim. Bazı testler yaptım ama tam neciteye varamadım. Kullanıcının hangi alanı kullanarak arama yapacağını bilemem ve kullanıcının kaç tane alanı kullanarak arama yapacağını da yine bilemem ondan dolayı kullanıcı 5 editten herhangi birisini doldurduğunda veya bazıların boş bıraktığında da arama sonucunu ona göre getirmesini istiyorum.

Nette araştırdım ayrıca kardeş delphi forumuna baktım ama isteğim sonuca varamadım.. Benimle aynı sorunu yaşayan birileri olmuş checkleri kontrol ederek çözdüğünü söylüyor ama ne kadar sağlıklı bilemedim.

Tek alan için yazdığım kod;
DataSource1.DataSet.Filtered :=False; 
DataSource1.DataSet.Filter := 'KULLANICI_ADI' + '=' + QuotedStr(Edit1.Text+'*');
DataSource1.DataSet.Filtered :=True;


İki alan için yazdığım kod;
DataSource1.DataSet.Filtered :=False; 
DataSource1.DataSet.Filter := '[KULLANICI_ADI]=' + QuotedStr(Edit1.Text) + ' and [DURUMU]=' + QuotedStr(Edit2.Text);
DataSource1.DataSet.Filtered :=True;

İki alan için yazdığım kod ile aynı kodu genişleterek daha fazla alan içinde kullanabiliyorum ama sorun şu şekilde eğer bu sorgulardan birisinde yani edit2 diyelim ki boş ama edit1 dolu bu durumda arama yapmıyor boş getiyoriyor ve hepsinin tam takır dolu olması gerekiyor bu sorunu nasıl çözebilirim?


Editlerin boş olup olmadığını kontrol ederek denedim ama olmuyor yani olmasına olur ama her editin diğeri ile eşleşmesi gerekiyor ondan kodlarım çok uzuyor ve uzamasını  istemiyorum. Aynı şekil checkleri kontrol ederek te denedim ama daha basit bir yolunun olduğun düşünüyorum,

Nasıl bir şey yapmalıyım ki kullanıcı bu 5 alandan hangisine veya hangilerine bilgi girerse ona göre arama yaptırmayı nasıl yapabilirim?

Teşekkür ederim.
Cevapla
#2
SQL : string;

SQL := '';
if trim(Edit1.Text) <> '' then SQL := '[KULLANICI_ADI]=' + QuotedStr(Edit1.Text) ;
if trim(Edit2.Text) <> '' then if SQL = '' then SQL := '[DURUMU]=' + QuotedStr(Edit2.Text) else SQL := SQL + ' AND '+  '[DURUMU]=' + QuotedStr(Edit2.Text) ;
.
.
.
DataSource1.DataSet.Filtered :=False;
DataSource1.DataSet.Filter := SQL;
DataSource1.DataSet.Filtered :=True;
Cevapla
#3
(23-04-2017, Saat: 20:01)meko Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
SQL : string;

SQL := '';
if trim(Edit1.Text) <> '' then SQL := '[KULLANICI_ADI]=' + QuotedStr(Edit1.Text) ;
if trim(Edit2.Text) <> '' then if SQL = '' then SQL := '[DURUMU]=' + QuotedStr(Edit2.Text) else SQL := SQL + ' AND '+  '[DURUMU]=' + QuotedStr(Edit2.Text) ;
.
.
.
DataSource1.DataSet.Filtered :=False;
DataSource1.DataSet.Filter := SQL;
DataSource1.DataSet.Filtered :=True;


Bu yöntem ile koda diğer editleri de ekleyerek halletim. Ayrıca Arama hızım epey hızlandı.

Çok Teşekkür ederim.
Cevapla
#4
Eğer Edit boşsa '%' şeklinde yazarak kolayca halledebilirsin. bir fonksiyon yazıp Edit içeriğini gönderirsin eğer Edit boş ise sana '%' döndürür değilse yazdığın içeriği döndürür QuotedStr(Edit) gibi. Böylece sonsuz tane if kullanmamış olursun.
WWW
Cevapla
#5
Bu gibi durumlarda tsql'de yaygın kullanılan LIKE kavramını tercih ederseniz, kontrollerle uğraşmak yerine daha hızlı ve konforlu geliştirme yapabilirsiniz. Kurumsal uygulama kullananlar genellikle veritabanı bilgisine sahip olmasalarda "... içeren" şeklinde filtrelemek istedikleri bilgiler için % (contains) belirtecini öğrenir ve iyi de kullanırlar. Siz de sorgularınızı bu şekilde revize ederek daha çok sonuç odaklı ve kullanıcı dostu "listeleme" ekranları oluşturabilirsiniz.

Bonus: Konu, Başlık, Kişi, Tarih, Tutar gibi kavramlar genellikle bu tarz listelemelerde yaygındır. Sorgularınızda "or" eki ile alakalı tüm sütunlara tek bir input (veri girişi) (TEdit) kullanarak tüm kavramlarınızda, arama kriterine en yakın 100, 1000 (TOP) değeri çekerek kullanıcıya çok güzel bir imkan sunabilirsiniz.
{ talk is cheap show me the code. }
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Datasnap Türkçe karakter sorunu [Çözüldü] hakanharbeli 4 107 11-02-2018, Saat: 03:29
Son Yorum: hakanharbeli
Star ıdHTTP Post hakkında? [Çözüldü] Cyber 1 84 06-02-2018, Saat: 13:36
Son Yorum: Cyber
  Form create h.k (Çözüldü ) cinarbil 12 266 25-01-2018, Saat: 12:09
Son Yorum: cinarbil
  Wsdl Xml Importer(Çözüldü) yhackup 17 221 09-01-2018, Saat: 15:42
Son Yorum: yhackup
  PAnsiChar ile başım dertte (Çözüldü) erkankurtaga 2 220 22-12-2017, Saat: 11:25
Son Yorum: erkankurtaga



Konuyu Okuyanlar: 1 Ziyaretçi