- Konu sahibi
- #1
Delphi’de bir kayda gitmek için açık veri kümesinde
Arama düğmesinin
Uygulamayı çalıştırıp arama alanına örneğin
Parametre, kullanıcı girdisini SQL metnine birleştirmek yerine değer olarak gönderir.
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.
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ı
Filtreyi kaldırmak için
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öntem | Sonuç | Uygun kullanım |
|---|---|---|
| Locate | Eşleşen kaydı geçerli kayıt yapar. | Açık sonuç içinde bir kayda gitmek |
| Filter | Koşula uymayan kayıtları görünümden çıkarır. | Mevcut veri kümesinin görünümünü daraltmak |
| SQL WHERE | Veritabanı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: