TDataset Filter

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Efe
Üye
Mesajlar: 56
Kayıt: 09 Kas 2014 11:14

TDataset Filter

Mesaj gönderen Efe »

Merhaba

TDataset ile filtreleme yapmak istiyorum LIKE ile çalışıyo, NOT LIKE ile çalışmıyo, nerde yanlış yapıyorum aceba.

procedure TDM.FilterATableNoMail(ATable: TDataSet);
var
MailHost: string;
begin
if ATable = TableHotmail then MailHost:='hotmail' else
if ATable = TableGMail then MailHost:='gmail' else
if ATable = TableLive then MailHost:='live' else
if ATable = TableMsn then MailHost:='msn' else
if ATable = TableMyNet then MailHost:='mynet' else
if ATable = TableOutlook then MailHost:='outlook' else
if ATable = TableYahoo then MailHost:='yahoo' else
if ATable = TableFacebook then MailHost:='facebook' else
if ATable = TableYMail then MailHost:='ymail' else
MailHost:='yandex';

ATable.Filtered:=False;
ATable.Filter:='EMail NOT LIKE '+ QuotedStr('%'+MailHost+'%');
ATable.Filtered:=True;


end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: TDataset Filter

Mesaj gönderen mrmarman »

Veritabanı olarak hangisini kullanıyorsunuz belirtmemişsiniz. Bazılarında oluyor bazılarında olmuyor...

Ancak bunları bir kenara bırakıp, filtre işini SQL Query ile halletmeniz daha sağlıklı ve performanslı olacaktır. Bu bir gerçek.
Resim
Resim ....Resim
Efe
Üye
Mesajlar: 56
Kayıt: 09 Kas 2014 11:14

Re: TDataset Filter

Mesaj gönderen Efe »

Arkadaşlar ben bu problemi hala çözemedim!

Hiçbir veri tabanı işlemi yapamıyorum(yeni kayıt, filtre, arama, son kayıta gitme...), hata veriyor.


SQLite
veri tabanını değiştirdim access yaptım ama sonuç aynı. Internetten ve Sqlite sitesinden araştırdığım kadarıyla sorun şu:

veri tabanından hafızaya yüklenen veri hafıza boyutunu aşarsa(RAM daki boyut) "out of memory" hatası veriyor.
Programı çalıştırıp görev yöneticisine baktım yaklaşık 2GB gösteriyor. Bu sorunu nasıl aşarım bilgisi olan varmı?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: TDataset Filter

Mesaj gönderen sabanakman »

mrmarman yazdı:...filtre işini SQL Query ile halletmeniz daha sağlıklı ve performanslı olacaktır. Bu bir gerçek.
Table kullanmadan Query kullanmanız en ideal yöntem olacaktır. Hem ayrıca "NOT LIKE" şeklinde bir operatör yoktur LIKE operatörünü NOT ile terslemeniz gerekmektedir.
Efe yazdı: ATable.Filtered:=False;
ATable.Filter:='NOT EMail LIKE '+ QuotedStr('%'+MailHost+'%');
ATable.Filtered:=True;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Efe
Üye
Mesajlar: 56
Kayıt: 09 Kas 2014 11:14

Re: TDataset Filter

Mesaj gönderen Efe »

Filter işlemini query ile hallettim

sorun

yeni kayıt ekliyemiyorum, son kayıta gidemiyorum bu işlemleri yaptığım zaman "out of memory" hatası oluşuyor. program boyutu 21mb veri tabanı boyutu 293mb ancak görev yöneticisinde program boyutu 2gb yakın görünüyor.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: TDataset Filter

Mesaj gönderen mrmarman »

Aynı QUERY ile aşağıdaki benzeri komut girerek kayıt ekleyebilirsin...

Kod: Tümünü seç

INSERT INTO tabloadi ( adi, soyadi ) VALUES ( 'Muharrem', 'ARMAN' )
en sonunda da Query.OPEN veya Query.ACTIVE demeyeceksiniz. Onun yerine Query.EXECSQL diyeceksiniz.

Ondan sonra normal SELECT ile açıp sonucu görebilirsiniz.
Resim
Resim ....Resim
Cevapla