Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Çok Satırlı Filtreleme [Çözüldü]
#1
Arkadaşlar merhaba işyerinde kullandığım bir programda plakaları filtreleme işlemi yapıyoruz şöyle ki; plakaları memo bileşeni midir yoksa listbox mudur bilmiyorum içine bitişik halde alt alta kaç adet yazarsak yazalım sonuç olarak cxgridde girilen plakalar listeleniyor. plakalar yanyana yazılırsa çalışmıyor alt alta yazılırken arada boşluk olsa dahi çalışıyor ben bunu delphide yapmak istiyorum. Bu mümkün müdür? Mümkünse yardımlarınızı bekliyorum.

   

Ben bileşenin memo olduğunu tahmin ediyorum.
Cevapla
#2
Memo olduğu konusuna katılıyorum.
Memo'lar "lines" protperty aracılığıyla satır satır ulaşılabilir.


var
  i : integer;
  LPlaka : string;
begin
  for i := 0 to Memo1.lines.count-1 do
  begin
    LPlaka := trim( Memo1.lines[i]); // satırı LPlaka değişkenine ata
    if LPlaka = '' then continue; // satır boş ise başa dön..

    // burası LPlaka değişkeni içerisindeki ifade ne yapmak isterseniz yapmanız gereken yer.
    showmessage( LPlaka );

  end;
end;



* Filtreleme için memo'nun onChange olayında bu döngüye yeniden sokacaksınız hepsi bu...
* Ürünü filtre alacağınız veritabanına nasıl veriyorsanız güncelleyeceksiniz ve tazeleyeceksiniz.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
(01-12-2023, Saat: 08:52)mrmarman Adlı Kullanıcıdan Alıntı: Memo olduğu konusuna katılıyorum.
Memo'lar "lines" protperty aracılığıyla satır satır ulaşılabilir.


var
  i : integer;
  LPlaka : string;
begin
  for i := 0 to Memo1.lines.count-1 do
  begin
    LPlaka := trim( Memo1.lines[i]); // satırı LPlaka değişkenine ata
    if LPlaka = '' then continue; // satır boş ise başa dön..

    // burası LPlaka değişkeni içerisindeki ifade ne yapmak isterseniz yapmanız gereken yer.
    showmessage( LPlaka );

  end;
end;



* Filtreleme için memo'nun onChange olayında bu döngüye yeniden sokacaksınız hepsi bu...
* Ürünü filtre alacağınız veritabanına nasıl veriyorsanız güncelleyeceksiniz ve tazeleyeceksiniz.

Sayın Muharrem Arman hocam çok teşekkür ederim yardımlarınız için.

Arkadaşlar Muharrem ARMAN hocamın kodunu bir şekilde çalışmama entegre ettim. Hazır konu açılmışken birde şöyle bir filtreleme için yardım talep ediyorum affınıza sığınarak.Şimdi Gtıp adında bir alanım var ben bu alanda çoklu filtreleme yapmak istiyorum  yani dbgridde sadece benim istegiğim gtiplerin kalmasını istiyorum bunu nasıl yapabilirim birçok filtreleme kodu denedim ama sadece tek koşulu sağlıyor. yardımlarınızı bekliyorum.

   


Fotoğrafta da görüldüğü üzere ben mesela filtrele butonuna bastığımda sadece aşağıdaki gtiplerin olduğu satırların dbgridde gösterilmesini istiyorum.

4009.12.00.90.00
4009.32.00.90.00
4016.91.00.00.00
4016.99.52.00.00
4016.99.57.00.00
7307.92.90.00.11
7307.99.80.00.11
Cevapla
#4
(02-12-2023, Saat: 00:07)bünyamin68 Adlı Kullanıcıdan Alıntı:
(01-12-2023, Saat: 08:52)mrmarman Adlı Kullanıcıdan Alıntı: Memo olduğu konusuna katılıyorum.
Memo'lar "lines" protperty aracılığıyla satır satır ulaşılabilir.


var
  i : integer;
  LPlaka : string;
begin
  for i := 0 to Memo1.lines.count-1 do
  begin
    LPlaka := trim( Memo1.lines[i]); // satırı LPlaka değişkenine ata
    if LPlaka = '' then continue; // satır boş ise başa dön..

    // burası LPlaka değişkeni içerisindeki ifade ne yapmak isterseniz yapmanız gereken yer.
    showmessage( LPlaka );

  end;
end;



* Filtreleme için memo'nun onChange olayında bu döngüye yeniden sokacaksınız hepsi bu...
* Ürünü filtre alacağınız veritabanına nasıl veriyorsanız güncelleyeceksiniz ve tazeleyeceksiniz.

Sayın Muharrem Arman hocam çok teşekkür ederim yardımlarınız için.

Arkadaşlar Muharrem ARMAN hocamın kodunu bir şekilde çalışmama entegre ettim. Hazır konu açılmışken birde şöyle bir filtreleme için yardım talep ediyorum affınıza sığınarak.Şimdi Gtıp adında bir alanım var ben bu alanda çoklu filtreleme yapmak istiyorum  yani dbgridde sadece benim istegiğim gtiplerin kalmasını istiyorum bunu nasıl yapabilirim birçok filtreleme kodu denedim ama sadece tek koşulu sağlıyor. yardımlarınızı bekliyorum.




Fotoğrafta da görüldüğü üzere ben mesela filtrele butonuna bastığımda sadece aşağıdaki gtiplerin olduğu satırların dbgridde gösterilmesini istiyorum.

4009.12.00.90.00
4009.32.00.90.00
4016.91.00.00.00
4016.99.52.00.00
4016.99.57.00.00
7307.92.90.00.11
7307.99.80.00.11

Selam
TDataset'in Filter özelliği var onu kullanabilirsiniz. 

  ...
  ds.Filter := 'Country = ' '''Fransa''' or '''Almanya''' ';
  ds.Filtered := True;
  ...

Ancak bu işlem veri yapısına bağlı olarak PageUp veya PageDown yapıldığında sıkıntı yaratabilr. Özellikle dataset'teki satır sayısı çok fazlaysa (5000 ve üzeri) her hareket tuşuna basıldığında beklemeye sebep olabilir.
Cevapla
#5
(02-12-2023, Saat: 02:23)mustafaozpinar Adlı Kullanıcıdan Alıntı:
(02-12-2023, Saat: 00:07)bünyamin68 Adlı Kullanıcıdan Alıntı: Sayın Muharrem Arman hocam çok teşekkür ederim yardımlarınız için.

Arkadaşlar Muharrem ARMAN hocamın kodunu bir şekilde çalışmama entegre ettim. Hazır konu açılmışken birde şöyle bir filtreleme için yardım talep ediyorum affınıza sığınarak.Şimdi Gtıp adında bir alanım var ben bu alanda çoklu filtreleme yapmak istiyorum  yani dbgridde sadece benim istegiğim gtiplerin kalmasını istiyorum bunu nasıl yapabilirim birçok filtreleme kodu denedim ama sadece tek koşulu sağlıyor. yardımlarınızı bekliyorum.




Fotoğrafta da görüldüğü üzere ben mesela filtrele butonuna bastığımda sadece aşağıdaki gtiplerin olduğu satırların dbgridde gösterilmesini istiyorum.

4009.12.00.90.00
4009.32.00.90.00
4016.91.00.00.00
4016.99.52.00.00
4016.99.57.00.00
7307.92.90.00.11
7307.99.80.00.11

Selam
TDataset'in Filter özelliği var onu kullanabilirsiniz. 

  ...
  ds.Filter := 'Country = ' '''Fransa''' or '''Almanya''' ';
  ds.Filtered := True;
  ...

Ancak bu işlem veri yapısına bağlı olarak PageUp veya PageDown yapıldığında sıkıntı yaratabilr. Özellikle dataset'teki satır sayısı çok fazlaysa (5000 ve üzeri) her hareket tuşuna basıldığında beklemeye sebep olabilir.
Sayın Mustafa Hocam öncelikle cevabınız için teşekkür ederim ancak verdiğiniz kod hata veriyor hatanın ne olduğunu çözemedim belki çok basit bir çözümü vardır ama her ne hikmetese göremedim

   

tırnak işaretleri ile ilgili bir hata ama ne olduğunu çözemedim.
Cevapla
#6
(02-12-2023, Saat: 12:11)bünyamin68 Adlı Kullanıcıdan Alıntı:
(02-12-2023, Saat: 02:23)mustafaozpinar Adlı Kullanıcıdan Alıntı: Selam
TDataset'in Filter özelliği var onu kullanabilirsiniz. 

  ...
  ds.Filter := 'Country = ' '''Fransa''' or '''Almanya''' ';
  ds.Filtered := True;
  ...

Ancak bu işlem veri yapısına bağlı olarak PageUp veya PageDown yapıldığında sıkıntı yaratabilr. Özellikle dataset'teki satır sayısı çok fazlaysa (5000 ve üzeri) her hareket tuşuna basıldığında beklemeye sebep olabilir.
Sayın Mustafa Hocam öncelikle cevabınız için teşekkür ederim ancak verdiğiniz kod hata veriyor hatanın ne olduğunu çözemedim belki çok basit bir çözümü vardır ama her ne hikmetese göremedim


tırnak işaretleri ile ilgili bir hata ama ne olduğunu çözemedim.
Sanırım şu şekilde yazarsanız olacak

    ds.Filter := 'Country = ''Fransa'' or ''Almanya''';

Mantığı şu : Bir stringde ' (#39) varsa bunu yazmak için 2 adet '' koyuyoruz. ya da aralara #39 ekliyoruz.

    ds.Filter := 'Country = ' + #39 + 'Fransa' + #39 +' or ' + #39 + 'Almanya' + #39;
Cevapla
#7
   
Sayın mustafa hocam ilgi ve alakanıza çok teşekkür ederim direkt ne yapmak istediğimi şöyle açıklayayım. Fotoğrafta görüldüğü gibi Sağ tarafta listboxun içinde bulunan gitiplerin benim veritabanımda olanlarla filtreleme yapmak istiyorum. Yani öyle bir filtreleme yapmalıyımki listboxun içinde bulunan gtiplerle aynı olan gtipler dbgridde diğerlerinden ayrılarak listelensin tabiki bu gtiplerden veritabanımda olmayanlarda var bunuda dikkate alarak yapmalıyım Biraz karışık görünüyor. Filtreleme işlemi tek sütunda birden fazla satırda olunca takıldım kaldım.
Cevapla
#8
Merhaba,

Aslında olayı Delphi tarafında çözmektense veri tabanı tarafına bırakmanız işinizi daha hızlı ve sağlıklı şekilde çözecektir.

Delphi kısmında Memo bileşenine yazılanları virgül ile ayırıp tek satır haline getirin.
   

function PlakaParse(kaynak: TMemo): string;
var
 i                  : integer;
 kaynakVirgulParsele: TStringList;
 parselenenKaynak   : string;
begin
 Result              := '';
 kaynakVirgulParsele := TStringList.Create;
 try
   kaynakVirgulParsele.Delimiter       := ',';
   kaynakVirgulParsele.StrictDelimiter := true;
   kaynakVirgulParsele.DelimitedText   := Stringreplace(Stringreplace(kaynak.Text, #13, ',', [rfReplaceAll, rfIgnoreCase]), #10, '', [rfReplaceAll, rfIgnoreCase]);
   kaynakVirgulParsele.Sorted          := true;
   kaynakVirgulParsele.Duplicates      := TDuplicates.dupIgnore;

   parselenenKaynak := '';

   for I := 0 to kaynakVirgulParsele.Count - 1 do
   begin
     parselenenKaynak := parselenenKaynak + Trim(kaynakVirgulParsele[i]) + ',';
   end;
   parselenenKaynak := Copy(parselenenKaynak, 1, Length(parselenenKaynak) - 1);
   Result           := parselenenKaynak;

 finally
   FreeAndNil(kaynakVirgulParsele);
 end;

end;

Daha sonra veri tabanı tarafına göndererek IN ile çoklu filtre özelliğini kullanın.

 MSSQL kullanımı

         

SELECT
* 
FROM
sy_names
WHERE
title IN 
(
SELECT VALUE FROM STRING_SPLIT('a,b,c,d,e',',')
)

MySQL kullanımı

       

SELECT
* 
FROM
sy_names
WHERE
title IN (

SELECT 
SUBSTRING_INDEX(SUBSTRING_INDEX( '1,2,3,4' , ',', n.num), ',', -1)
FROM (
SELECT a.num + b.num * 10 + 1 num
FROM 
(SELECT 0 num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) a
,(SELECT 0 num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) b
ORDER BY num
) n
WHERE n.num <= 1 + (LENGTH('1,2,3,4') - LENGTH(REPLACE('1,2,3,4', ',', '')))

)

Tüm sorgularınızı veri tabanı tarafında bir prosedür ya da fonksiyon üzerinde yazar iseniz programlama dili tarafında da istediğiniz dili kullanma özgürlüğüne erişirsiniz. Delphi veya bir başka dil fark etmeksizin bağımlılığınız ortadan kalkar. Uygulama tarafı sadece veriyi gönderen ve gösteren olmalı. Verilerle ilgili tüm işlemlerin sunucu kısmında yapılmasını öneririm.
FMX - Software Developer | Serhat Yanalak
Cevapla
#9
   

Sayın Mr.X rumuzlu hocam verdiğiniz bilgiler için çok teşekkür ederim. Dediğiniz gibi işlemi veritabanı kısmında hallettim sorgulanan gtipler sbit olduğundan bu şekil sorgulama benim için yeterli oldu.
Cevapla
#10
(01-12-2023, Saat: 08:52)mrmarman Adlı Kullanıcıdan Alıntı: Memo olduğu konusuna katılıyorum.
Memo'lar "lines" protperty aracılığıyla satır satır ulaşılabilir.


var
  i : integer;
  LPlaka : string;
begin
  for i := 0 to Memo1.lines.count-1 do
  begin
    LPlaka := trim( Memo1.lines[i]); // satırı LPlaka değişkenine ata
    if LPlaka = '' then continue; // satır boş ise başa dön..

    // burası LPlaka değişkeni içerisindeki ifade ne yapmak isterseniz yapmanız gereken yer.
    showmessage( LPlaka );

  end;
end;



* Filtreleme için memo'nun onChange olayında bu döngüye yeniden sokacaksınız hepsi bu...
* Ürünü filtre alacağınız veritabanına nasıl veriyorsanız güncelleyeceksiniz ve tazeleyeceksiniz.

Merhaba arkadaşlar forumunuza yeni kayıt oldum kayıt olur olmaz da en çok aradığım bir konu ile karşılaştım lakin cevaplar benim için yeterli gelmedi sebebi ise çok acemi olmam .Şimdi sayın Muharrem Arman Bey konu başlığı ile alakalı cevap vermişsiniz ben cevabı inceledim ve kodları uyguladım amenna ancak filtreleme kısmını beceremedim acaba bu konuda küçük bir örnek vermeniz mümkün müdür? Bu arada tavsiyelerinize uyarılarınıza açığım.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Logo Go3 de döviz tablosunda Date_ alanına veri (Çözüldü) yazma cinarbil 4 258 19-04-2024, Saat: 08:25
Son Yorum: cinarbil
  AdoQuery ile ilgili bir sorun. (Çözüldü) Bay_Y 4 218 17-04-2024, Saat: 10:58
Son Yorum: Bay_Y
  Fastreport İçindekiler Sayfası Oluşturma [ÇÖZÜLDÜ] bydelphi 1 272 18-03-2024, Saat: 12:11
Son Yorum: bydelphi
  [ÇÖZÜLDÜ] macos işletim sistemine program yazmak shooterman 5 589 02-02-2024, Saat: 09:54
Son Yorum: shooterman
  COZULDU veritabani prg yerine ne kullanabilirim. sadikacar60 8 889 29-01-2024, Saat: 18:41
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi