Arif

WFN Üye
Konular
756
Mesajlar
756
Çözüm
0
Ticaret Puanı
0
Üyelik
25 Gün
Konum
Bilecik
Web Sitesi
Var
Alanı
SEO Uzmanı
1/1
Konu sahibi
Delphi’de bir kayda gitmek için açık veri kümesinde Locate kullanabilir, görüntülenen kayıtları Filter ile daraltabilir veya veritabanından yalnız eşleşen satırları almak için parametreli SQL sorgusu çalıştırabilirsiniz. Büyük tablolarda genellikle SQL ile arama daha uygun bir başlangıçtır; seçim, mevcut sonuçlar arasında gezinmek mi yoksa yeni bir sonuç listesi oluşturmak mı istediğinize bağlıdır.

Hangi yöntemi seçmelisiniz?​

Üç yöntem aynı sonucu üretmez. Veri kümesi, bir tabloyu veya sorgunun döndürdüğü kayıtları Delphi’de temsil eden nesnedir.
YöntemSonuçUygun kullanım
LocateEşleşen kaydı geçerli kayıt yapar.Açık sonuç içinde bir kayda gitmek
FilterKoşula uymayan kayıtları görünümden çıkarır.Mevcut veri kümesinin görünümünü daraltmak
SQL WHEREVeritabanından koşula uyan satırları ister.Büyük tablolarda yeni bir sonuç listesi oluşturmak
Locate listeyi filtrelemez; Filter ise kayıtları veritabanından silmez. SQL sorgusunun hızı da tablo büyüklüğüne, indekse, arama koşuluna ve kullanılan veritabanına bağlıdır.

FireDAC ile parametreli arama yapın​

Aşağıdaki varsayımsal örnek, Musteriler tablosundaki id ve ad alanlarını arar. Projede FireDAC sürücüsünün kurulmuş, FDConnection1 bağlantısının yapılandırılıp açılmış olduğunu varsayın. Formda bir TFDQuery, TDataSource, TDBGrid, TEdit ve arama düğmesi oluşturun. FDQuery1.Connection özelliğini FDConnection1 olarak, DataSource1.DataSet özelliğini FDQuery1 olarak ve DBGrid1.DataSource özelliğini DataSource1 olarak ayarlayın.

Arama düğmesinin OnClick olayına şu kodu yerleştirin; tablo ve alan adlarını kendi veritabanınıza göre değiştirin:

Kod:
procedure TForm1.Button1Click(Sender: TObject);
var
  Aranan: string;
begin
  Aranan := Trim(Edit1.Text);

  FDQuery1.Close;
  if Aranan = '' then
  begin
    FDQuery1.SQL.Text :=
      'SELECT id, ad FROM Musteriler ORDER BY ad';
    FDQuery1.Open;
  end
  else
  begin
    FDQuery1.SQL.Text :=
      'SELECT id, ad FROM Musteriler ' +
      'WHERE ad LIKE :aranan ORDER BY ad';
    FDQuery1.ParamByName('aranan').AsString := '%' + Aranan + '%';
    FDQuery1.Open;
  end;
end;

Uygulamayı çalıştırıp arama alanına örneğin Ali yazın ve düğmeye basın. Sorgu açıldığında tabloda adı bu ifadeyle eşleşen kayıtlar görünür. Alan boşken düğmeye basmak filtrelenmemiş listeyi yeniden açar; büyük tablolarda bu seçenek çok sayıda kayıt getirebileceğinden uygulamanızda sonuç sınırı veya sayfalama kullanmayı değerlendirin.

Parametre, kullanıcı girdisini SQL metnine birleştirmek yerine değer olarak gönderir. % işaretleri metnin iki yanında başka karakterler bulunmasına izin verir; kullanıcı girdisindeki % ve _ de joker karakter olarak yorumlanabilir. Bunları düz karakter olarak aramak gerekiyorsa kullanılan veritabanının LIKE ve kaçış kurallarına göre sorguyu düzenleyin. Büyük/küçük harf ve Türkçe karakterlerin eşleşmesi de veritabanının karşılaştırma ayarlarına bağlıdır.

Boş tablo, yalnızca sorgunun o bağlantıda ve o koşullarla satır döndürmediğini gösterir; kaydın veritabanında hiç bulunmadığını kanıtlamaz. Bağlantının doğru veritabanına yöneldiğini, tablo ve alan adlarını, aranan değeri ve karşılaştırma ayarlarını kontrol edin. Kodu yeniden açmadan önce veri kümesinde kaydedilmemiş bir düzenleme varsa önce kaydedin veya iptal edin.

Açık veri kümesinde kayıt bulun veya görünümü filtreleyin​

FDQuery1 açıkken, örneğin tam adı Ali olan bir kayda gitmek için aşağıdaki kod kullanılabilir. Locate başarılıysa veri kümesinin geçerli kaydı değişir ve bağlı tablo bu kaydı gösterir:

Kod:
if not FDQuery1.Locate('ad', 'Ali', []) then
  ShowMessage('Mevcut sonuçta kayıt bulunamadı.');

Bulunamaması, kaydın özellikle mevcut sorgu sonucunda veya uygulanan filtre altında bulunamadığı anlamına gelebilir. Önce sorgunun kapsamını genişletin ya da etkin filtreyi kaldırın; ardından tekrar arayın. Aynı ada sahip birden fazla kayıt varsa tek bir eşleşmeye gitmek hepsini listelemekle aynı şey değildir.

Mevcut sonuçta yalnız adı Ali olan kayıtları göstermek için, filtrelemeyi destekleyen bir veri kümesinde şu kodu kullanabilirsiniz:

Kod:
FDQuery1.Filtered := False;
FDQuery1.Filter := 'ad = ' + QuotedStr('Ali');
FDQuery1.Filtered := True;

Filtreyi kaldırmak için FDQuery1.Filtered := False; yeterlidir. QuotedStr, metni filtre ifadesine uygun biçimde tırnaklar; yine de filtre sözdizimi ve desteklenen özellikler veri kümesi bileşenine göre değişebilir. Filtreyi kapatmak, önceki SQL sorgusunun getirmediği kayıtları eklemez; tüm tabloyu görmek için sorguyu da uygun koşullarla yeniden açmanız gerekir. Tek yönlü veri kümeleri filtrelemeyi desteklemez.
 
Moderatör tarafında düzenlendi:

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic